カードエッジコネクタ仕様
Z-1/FX-890Pには外部回路を繋げるためのコネクタがカードエッジコネクタと30pinコネクタの二つが用意されています。
ここではこの内のカードエッジコネクタについて説明します。
カードエッジコネクタは本体上部中央のカバー内にあります。
Z-1系ではこのカバーは簡単に外れるようになっているのですが、FX-890Pでは一度裏蓋を外さないと取れないようになっているので注意して下さい。
1.ピン配置
カードエッジコネクタの仕様はSHARP製ポケコンPC-G801と互換性があります。
コネクタを正面から見た場合のピン配置
ピン番号 名称 方向 説明 1 Vcc +5V出力 ※ 2 Vcc +5V出力 ※ 3 ALE out アドレスラッチイネーブル 4 CS1 out チップセレクト1 5 CS2 out チップセレクト2 6 RSTO out リセット出力 ※ 7 Vin +5V入力 8 INT in 割り込み入力 9 WR out ライト信号 10 RD out リード信号 11 A17 out アドレスバス 12 A16 out アドレスバス 13 S1 out CPUステータス1 14 S2 out CPUステータス2 15 D7 in/out データバス 16 D6 in/out データバス 17 D5 in/out データバス 18 D4 in/out データバス 19 D3 in/out データバス 20 D2 in/out データバス 21 D1 in/out データバス 22 D0 in/out データバス 23 A15 out アドレスバス 24 A14 out アドレスバス 25 A13 out アドレスバス 26 A12 out アドレスバス 27 A11 out アドレスバス 28 A10 out アドレスバス 29 A9 out アドレスバス 30 A8 out アドレスバス 31 A7 out アドレスバス 32 A6 out アドレスバス 33 A5 out アドレスバス 34 A4 out アドレスバス 35 A3 out アドレスバス 36 A2 out アドレスバス 37 A1 out アドレスバス 38 A0 out アドレスバス 39 GND グランド 40 GND グランド
※「方向」のin/outはポケコン側から見たときの信号の流れを示しています。
※+5V出力は電源OFF時にも供給されています。
※RSTOは電源OFF時およびリセット時にHIレベルになります。
2.電気特性
電圧レベルはTTL(HIレベル=5V/LOWレベル=0V)で、許容電流はIOL=4mA、IOH=2mAです。
ただし、電源ラインの許容電流は1mAしかありません。
なのでTTLなICに直接信号線を接続しても大丈夫ですが、電源をポケコン側から取る場合はあまり負荷を掛けないように注意する必要があります。
大事を取るなら電源は外部に取るほうが良いでしょう。各信号線のタイミングは、
この様になっています。
したがって外部機器から見た場合、CS1もしくはCS2がLOWの状態でRDもしくはWRがLOW→HIに立ち上がったタイミングでデータのやり取りを行なう事になります。
余談ですが、Z-1/FX-890Pで使用されているCPUである80C188EBのアドレスバスとデータバスは本来は多重化されているためそのままでは使用することが出来ません。
そこで、アドレスバスとデータバスの信号を分離するために使用されるのがALEで、ALEがHI→LOWに立ち下がるタイミングでラッチを行なうことでアドレスラインを取り出す事が出来ます。(データラインはタイミングの関係上直接接続して使う事が出来ます。)
しかし、カードエッジに出ているアドレスバスとデータバスはZ-1/FX-890Pに搭載されているSC(スタンダードセル)というLSIによりすでに信号が分離されているため、この辺の事は考えなくても良くなっています。
INTは外部機器側からポケコン側へ割り込み要求を行う為のpinです。
カードエッジの割り込み要求はCPUの「外部割込み4(INT4)」に対応しており、外部機器から任意のタイミングで割り込みを発生させる事が出来ます。
ただし、カードエッジ割り込みを有効にするためにはペリフェラル制御ブロックで各種パラメータを設定してやる必要があり、通常状態ではカードエッジ割り込みは無効になっています。(詳しくは後述)
S1/S2については良く分かりません。
CPUの同名pinと同等だとするとS0が出ていないため利用価値が無い(S0〜S2の3bitでCPUの状態を通知するから)のだが…。
Vinはその名の通り電源を繋げばポケコンを駆動させられ…るはず。(回路を見た限りでは)
もっとも実際にココに電源を繋いでみた訳ではないのでなんとも言えないですけど。
3.データ入出力
カードエッジに外部機器を接続しただけではポケコン側からアクセスすることはできません。
カードエッジにアクセスするためにはカードエッジのアドレスラインをCPUにマッピングしてやる必要があるのです。
具体的にはカードエッジに出ている2本のチップセレクトをCPUの論理アドレスのどの範囲で有効にするかをペリフェラル制御ブロックで設定することになります。(設定次第ではアドレス空間ではなくI/O空間にマッピングすることもできます。)
ここで注意して欲しいのは、カードエッジに出てくるアドレスとCPUからアクセスする際のアドレスは異なっていると言う点です。
マッピング時のイメージ
これはカードエッジ側はいちいちアドレスデコード部などを作る必要はなく、単にチップセレクトさえ見ていれば良いという事を意味しています。
4.設定方法
ペリフェラル制御ブロック(PCB)はI/O空間の0000H〜00FFHに配置されています。
そしてカードエッジに出ているCS1とCS2はPCBではそれぞれGCS4とGCS5に対応しています。
I/O 名称 機能 90H GCS4 Start GCS4チャネルスタートレジスタ 92H GCS4 Stop GCS4チャネルストップレジスタ 94H GCS5 Start GCS5チャネルスタートレジスタ 96H GCS5 Stop GCS5チャネルストップレジスタ マッピングを行なうアドレスは上位10ビットで指定できるため、メモリ空間では1024バイト単位、I/O空間では64バイト単位で任意の位置に配置する事が出来ます。
- チャネルスタートレジスタ
MSB LSB CS9 CS8 CS7 CS6 CS5 CS4 CS3 CS2 CS1 CS0 0 0 WS3 WS2 WS1 WS0
CS9〜CS0:マッピングの開始アドレスの上位10ビット
WS3〜WS0:ウェイト挿入数
- チャネルストップレジスタ
MSB LSB CS9 CS8 CS7 CS6 CS5 CS4 CS3 CS2 CS1 CS0 0 0 CSEN ISTOP MEM RDY
CS9〜CS0:マッピングの終了アドレスの上位10ビット
CSEN:1=セレクト有効
ISTOP:1=終了アドレスの設定を無視し、最終アドレス(FFFFFH)まで割り当てる
MEM:0=I/O 1=メモリ にマッピング
RDY:1=ウェイト挿入
また、マッピングを行なった領域がオーバーラップするようにも設定できます。
ただしオーバーラップしているアドレスにアクセスした場合は複数のチップセレクトが同時にアクティブになるため、普通はこのような使い方はしないと思いますが。
終了アドレスは設定値-1が実際のアドレスとなります。
Z-1/FX-890PでメモリとI/Oがどのように使用されているかというと、
メモリマップ
I/Oマップ
このようになっています。
メモリマップにおいてメモリが32KBの場合はRAM32KB、同64KBの場合はRAM64KBのところまでRAMが配置されています。
ここで未使用またはユーザー開放と書かれている部分にマッピングを行なうのが良いでしょう。
では実際にどのようにして設定を行なうのかをプログラムで示します。
例)
カードエッジのCS1を使用し、CS1に割り当てるアドレスの範囲は01000Hで、これをメモリアドレスB0000H〜に割り当てる場合。
MOV AX,0B000H # 開始アドレスはB0000Hでウェイト数は0 OUT 90H,AX # GCS4(CS1) Startに設定 MOV AX,0B10AH # 終了アドレスはB1000H-1でメモリ空間にマッピングしウェイトは無効 OUT 92H,AX # GCS4(CS1) Stopに設定 IRET
Z-1/FX-890Pは電源を入れる度にシステムの設定が初期化されるため、これらの設定は毎回実行してやる必要があります。
カードエッジに出ているINTを使用することでポケコン側に任意のタイミングで割り込みを発生させることができます。
この時発生する割り込みは外部割込み4で、これに関連しているのが割り込みコントロールレジスタI4CON(I/O:16H)とベクタ11H(メモリアドレス:00044H)です。外部割込み4が発生するとベクタ11Hで指定されたルーチンに処理が移行されます。
- 割り込みコントロールレジスタI4CON (I/O:16H)
MSB LSB 0 0 0 0 0 0 0 0 0 0 0 LVL MSK PM2 PM1 PM0
LVL:0=LOW→HIのエッジ 1=HIレベル で割り込み発生
MSK:0=割り込み許可 1=割り込み禁止
PM2〜PM0:割り込み優先度 (ただしカードエッジ割り込みでは7に設定すること)
割り込みルーチン内での注意点は、
- ルーチンの終了時には全てのレジスタを元に戻しておくこと。
- 割り込みルーチンに処理が移行した時点では割り込み禁止になっているため、他の割り込みは実行されない。
他の割り込みを受け付けたい場合は「STI」を実行するべし。- 必ず最後に割り込み終了(I/Oの02Hに8000Hを送る)をすること。
- ルーチンの終了には「IRET」を使うこと。
では実際にどのようにして設定を行なうのかをプログラムで示します。
例)
カードエッジ割り込みで処理を行なうルーチンをCARDINTとし、INTがLOW→HIに変化した時に割り込みを行なう場合。
CLI # 割り込みを禁止する MOV BX,0044H # ベクタ11Hに対応するベクタアドレス MOV WORD PTR [BX],OFFSET CARDINT # 処理ルーチンのオフセットアドレスを設定 ADD BX,2 MOV WORD PTR [BX],SEGMENT CARDINT # 処理ルーチンのセグメントアドレスを設定 MOV AX,0007H # 優先度7でエッジモードで割り込み許可 OUT 16H,AX # I4CONにパラメータ設定 STI # 割り込みを許可する 例)
カードエッジ割り込みを禁止するとき。
CLI # 割り込みを禁止する MOV AX,000FH # カードエッジ割り込みは禁止 OUT 16H,AX # I4CONにパラメータ設定 STI # 割り込みを許可する
6.本書について
本書は「Z-1/FX-890P活用研究(工学社)」に記載されていたカードエッジコネクタ関連の記事を編集し直したものです。
なお、本書の内容について工学社およびCASIOに問い合わせる事はおやめください。
NIFTY-Serve YHW02344
村中 昭雄(STEAR)