2011年10月12日

8255と8049の設計(1)

 ペリフェラルの8255 とサブCPU の8049 に取り掛かりました。

 8255 は単純かと思ったら、MODE2 を使っていたので、結構面倒です。

 PC-6001では、グループA(PA7-0、PC7-3)は、MODE2 で使用。グループB(PB7-0、PC2-0)は、MODE0 で使用しています。

 8255 は他にMODE1 というモードもあるのですが、使わない(というか周りのハードの状況で使えない)ため実装はせずに、PC-6001 に特化したモードにします。

 よって、モード変更のコマンドは無視します。

 MODE0 の実装は簡単なので、特に問題はありませんでした。

 MODE2 の方は、8049 とのやり取りをするため、かなりややこしいです。

 以下に動作をまとめます。


 ・Z80 => 8255 => 8049 にデータを出力する時

 1)Z80 から、I/O アドレス 0x90 にデータを書き込む。8255 は書き込まれた値をラッチして、ポートAに出力する。
 2)8255 のOBFN が H → L になる。この信号は、8049 のINTN(割り込み入力)につながっている。
 3)8049 は割り込みを受けて、OBFN が L になった事を知る。
 4)8049 は、8049 の RDN を H → L → H とする。同時に、8255 のポートAから出力されている信号を読み込む。
 5)8049 の RDN は、8255 の ACKN とつながっている。ACKN が L になった事により、OBFN が L → H となる。
 6)読み出し完了。

 P60-BASIC の ROM ルーチンでは、この一連の処理の前に、以前の読み出しが完了しているかのチェックも行っています。


 ・8049 => 8255 => Z80 にデータを出力する時

 1)8049 は、8049 の T0(8255 の IBF)が L になっていて、書き込みが出来ることを確認する。
 2)8049 は、8049 の WRN(8255 のSTBN)を H → L → H とする。この時、ポートAに対して、書き込むデータを出力する。
 3)8255 は、STBN が L の時の値をポートAにラッチする。また、IBF を H にして、データが書き込まれた事を示す。
 4)Z80 は、IBF が H の時に、I/O アドレス 0x90 (ポートA)からデータを読み出す。
 5)8255 は、IBF を L にして、データが読み込まれた事を示す。
 6)読み出し完了。

 P60-BASIC の ROM ルーチンでは、この一連の処理の前に、以前の書き込みが完了しているかのチェックも行っています。


 ちなみに割り込みの後では、8255 の CSN、A(1:0) をすべてLにして、M1N = L、IORQN = L の時に、RDN = L となるようにして、データの読み出し(割り込みベクタの下位8ビット)を読み出しています。


posted by えすび at 19:18| Comment(0) | P6解析:サブCPUと8255 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。