通常、キーがおされたとき、Sub CPUから、CPUへ、キー割り込みがかかってくるので、CPUが割り込みルーチンで、Sub CPUから、キーコードを受け取る。
しかし、割り込み禁止期間中は、割り込みが使えないので、CPUが、Sub CPUに、押されてないか聞きに行くことが出来るらしい。
押されていると、まず、発生するはずだった割り込みの、ベクタアドレスを返し、次にキーコードを返してくる。
ということなんだけど、
制御用のビット操作が、ちょっとややこしいな。。(汗)
最初は、b5 が0→1になるのを待ち、
次は、b5と、b3 がともに 0->1 に鳴るのをまつらしい。
ちなみに、CPUと、Sub CPUは、以下のようにしてつながっている。
CPU ------- 8255 --------- Sub CPU
- 8255にデータが来るまで待つ
- Sub CPU側から、データ(ベクタアドレス)を受け取る
- Sub CPUへ受信許可を申請する
- 8255にデータが来るまで待つ
- Sub CPUへ受信準備完了を知らせる
- Sub CPUから、キーコードを受け取る
というかんじなのかな?
聞くところによると、単純にビットを操作して、高速で受け渡しをしてもだめらしい。。
何回か、INPさせて、もったいぶらせてから、このタイミングというところで、ビット操作しないと行けないらしいですね。。(´・ω・`)
; ----------------------------------------------------------------- ; CPU <- SUB CPU データ受信 ; ----------------------------------------------------------------- ; ----------- 8255 にデータがくるまで待つ ----------- Z0739: IN A,(092H) ;35B3 DB 92 ロ.受信許可? AND 020H ;35B5 E6 20 . JR Z,Z0739 ;35B7 28 FA (. 8255 にデータが来るまで待つ IN A,(090H) ;35B9 DB 90 ロ. SUB CPUからデータ受けとり LD B,A ;35BB 47 G (CODE=16h(ゲーム用割り込み、02h 一般キー割り込み) 入るかも) ; ----------- 8049への受信許可申請 -------------------- ; ---------- (PORT Cの B6 をリセット LD A,0CH ;35BC 3E 0C >. OUT (093H),A ;35BE D3 93 モ.受信許可申請 ; ----------- 8255 にデータがくるまで待つ ----------- Z0745: IN A,(092H) ;35C0 DB 92 ロ. XOR 028H ;35C2 EE 28 .( AND 028H ;35C4 E6 28 .( JR NZ,Z0745 ;35C6 20 F8 . b5 b3 が両方1になるまで待つ ; ---------- 受信準備完了 ----------------------- ; ---------- PORT C の B6をセット RD? LD A,0DH ;35C8 3E 0D >.受信準備完了 OUT (093H),A ;35CA D3 93 モ. IN A,(090H) ;35CC DB 90 ロ. SUB CPUから、キーデータを受け取る LD C,A ;35CE 4F O LD A,B ;35CF 78 x CP 02H ;35D0 FE 02 .. CODE 02H (一般のキー割り込み)でなければ、ret RET NZ ;35D2 C0 タ LD A,C ;35D3 79 y CODE 02H (一般のキー割り込み)なら、キーデータを格納 LD (Z0744),A ;35D4 32 12 37 2.7 RET ;35D7 C9 ノ