8049 の動作について、調べた結果、以下のようで動きそうです(文章に書くと分かりづらいですね)。
1)CMT LOAD
1−1)0x1E 受信(1200baud) または 0x1D 受信(600baud)
1−2)0x19 受信
1−3)ポートP1 bit4 に L を出力(入力セレクタの切り換え)
1−4)ポートP2 bit3 のデータ(受信)を解析
1−5)エラーがあれば、0x12 送信 + ポートP1 bit7 に L を出力して終了(割り込み発生)。
1−6)1バイトまとまったら、0x08 送信 + ポートP1 bit7 を L を出力(割り込み発生)、その後、受信データを出力。
1−7)1−4)〜1−6)の間に、STOP キーの状態をポーリングする。キーの調査の方法は、3−2)のキー調査と同じ。
1−8)STOP キーが押されてたら、0x10 送信 + ポートP1 bit7 に L を出力して終了(割り込み発生)。
1−9)0x1A 受信したら、終了。
1−10)1−4)に戻る。
2)CMT SAVE
2−1)0x3E 受信(1200baud) または 0x3D 受信(600baud)
2−2)0x39 受信
2−3)0x38 受信したら、次の受信データを待つ(これがCMT に送信するデータ)
2−4)2−3)のデータをテープデータにして、ポートP1 bit5 に出力する。
2−5)2−3)〜2−5)の間に、STOP キーの状態をポーリングする。キーの調査の方法は、3−2)のキー調査と同じ。
2−6)STOP キーが押されてたら、0x0E 送信 + ポートP1 bit7 に L を出力して終了(割り込み発生)。
2−7)0x1A 受信したら、終了。
2−8)2−3)に戻る。
3)ゲーム用キー調査
3−1)0x06 受信
3−2)キーの調査を行う。ポートP1 bit4 に H を出力し、ポートP1 bit3-0 に"0000"〜"1001" を出力する。
3−3)ポートP2 bit7-0 の値で、どのキーが押されたかを判断する。
3−4)ゲーム用キーが押されているビットだけ1を立てて、出力データを作る。
3−5)0x16 送信 + ポートP1 bit7 を L を出力(割り込み発生)、その後、3−4)のデータを出力。
3−6)終了。
4)キーボードポーリング
4−1)ポーリングにより、タイマが満了したら、4−2)以下を行う。
4−2)キーの調査を行う。キーの調査の方法は、3−2)のキー調査と同じ。
4−3)押されたキーの状態により、出力データを作る。
4−4)グラフィックキー、ファンクションキー、STOP の場合は、4−5)、それ以外は、4−6)に。
4−5)0x14 送信 + ポートP1 bit7 を L を出力(割り込み発生)、その後、4−3)のデータを出力して終了。
4−6)0x02 送信 + ポートP1 bit7 を L を出力(割り込み発生)、その後、4−3)のデータを出力して終了。
5)RxRDYポーリング
5−1)ポーリングにより、タイマが満了したら、5−2)以下を行う。
5−2)RxRDY の状態の調査を行う。ポートP1 bit4 に L を出力する。ポートP2 bit3 に RxRDY が入力される。
5−3)RxRDY が H → L になった時、以下を実行する。それ以外の場合は終了。
5−4)0x04 送信 + ポートP1 bit7 を L を出力(割り込み発生)して終了。
一連の処理をしている間は、8255(Z80) から入力されるコマンドは、受信しても廃棄します。
また、同時に発生した場合は、番号が小さい物から実行します。
ポーリングは、とりあえず 500μs にしておきます。
2011年10月15日
この記事へのコメント
コメントを書く

