Z80 マイコンシステムを作ろう(その3)

三回目です。前回は,Z80 ボードを作り,取り敢えずコンピュータとして動作するようになりました。

Z80 マイコンシステムを作ろう(その2)

今回は,メモリアドレス空間のバンク切り替え機能と,キーボードインターフェース部分を作りたいと思います。

やっぱり,プリント基板は,手配線をしなくても良いので,出来上がるスピードが違いますね。なんか,こんな感じでプリント基板を作り続けていると,手配線に戻れなくなりそうです。

PPI 基板

まずは出来上がってきた基板です。

そして部品を実装した状態です。

今回のボードの主役は,パラレルインターフェース用デバイスである i8255 互換チップです。40 ピン の一番大きいチップですね。

ご存じの方もいると思いますが,Z80 ファミリーには,パラレルインターフェース用デバイスである,Z80-PIO というものがあります。Z80 の割り込み機能を有効に使えて,機能的には,8255 よりも進んでいる気もするのですが,この 8255,ポート数が Z80-PIO より多かったり,セカンドソースも多く生産されたこともあり,一般的には,8255 の方がよく使われていたように思います。

i8255 って何?

3 組の 8bit ポートを持つプログラム可能な入出力インターフェースで,別名 PPI (Programmable Peripheral Interface)と呼ばれることもあります。

動作モードが 3 種類あって,ハンドシェークによる双方向入出力もできたりするのですが,もっぱら,ポート単位で入出力を行う,モード 0 が一番良く使われたと思います。

PC-8801 シリーズは,ディスクインターフェースで,サブ CPU の Z80 と,この 8255 を介して通信していましたね。

今回は,モード 0 を使い,アドレス空間のバンクレジスタ機能と,キーボードの入出力を行います。

アドレス空間のバンク切り替え

Z80 のアドレスバスは,16bit で,そのアドレス空間は,64KB です。物理的に,64KB 以上のメモリをアクセスするために,このアドレス空間を 16KB ごとに分けて,それぞれを物理的なメモリの好きな部分にに接続できるようにします。

野球に例えると,ベンチ入りしているメンバーは,15 人いるとして,これが,物理的なメモリのアドレス空間になります。そして,野球で試合に出場できるのは 9 人ですよね。これが,Z80 のアドレス空間です。(同時に 15 人全員は使えません)

試合中に,ベンチ入りしているメンバーを有効活用しようと思ったら,途中で選手を交代しますよね。

これと同じような感じで,16KB に分けられたアドレス空間に,物理メモリやデバイスのどれを割り当てるか,を指定できるようにするわけです。これを,8255 の三つあるポートの一つに割り当てます。

キーボードインターフェース

キーボードは,市販の PS/2 インターフェースのものを使います。昨今,USB 接続が一般的になりましたので,あまり,お店でも見かけなくなりましたね。

この PS/2 インターフェース,キーが押されると,クロックに合わせてシリアルでその押されたキーのスキャンコードと呼ばれるデータが送られてきます。Z80 が直接受け取ることはできないので,このシリアルデータを受け取るデバイスが必要です。

結論としては,このシリアルデータ受信に AVR マイコンを使います。「Z80 マイコンシステム」なのに,他のマイコン使っちゃってますが…,まぁ,キーボードをインターフェースすることに特化しているので,気にしないでください(笑)。

Z80 からは,キーボードデータを,8255 を介して,マトリックス上のビットデータとして取得するようにしますので,AVR マイコンは,シリアル受信した後,マトリックス上の該当するビット情報を更新して,8255 へ渡せるようにします。

Z80 からリクエストするマトリックスの行データに,ポートの一つ,8255 から取得する列データに,残りのポートを割り当てます。

そして,また上に乗せます

3階建てになりました。(そして,この先,まだ続くと思います)

動作確認

とりあえず,マトリクスの適当な行を発光ダイオードに出力してみました。

mpeg4, 750kbps, 3.5MB

押されたキーのマトリックスのビットが更新されているのがわかります。

 

 

さて,今回はこんな感じです。

アドレス空間のバンク切り替えは,接続するデバイスが,今のところメモリくらいしかないので,その効果を発揮できるのはもう少し先になりそうです。キーボードは,問題なく使えそうなので,なんかパソコンっぽい感じにもなりそうですね。

今回で,なにかしら入力できるようになりましたので,次回は,画面出力周りに取り掛かれれたらな〜と思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA