Z80 マイコンシステムを作ろう(その5)
なかなか時間が取れず,久しぶりの更新です。前回は,V9958 という VDP で画面出力できるようにしました。
さて,ここまでで以下のような構成になっています。
- CPU に Z80 を使用
- キーボードインターフェースとバンク切り替えに i8255 を使用
- 画面表示 に V9958 を使用
この構成,何かに似ていますよね…。
そうです!どこのご家庭にも普通にある MSX パソコンです。ここまで来たら,もうこの方向性で似せてしまいましょう!
…と言うことで,今回は,メモリーボードを作ってみたいと思います。
スロット
MSX ユーザーの方には,説明の必要もないのですが,以前作った i8255 によるアドレスのバンク切り替えについて,もう少し説明したいと思います。
i8255 の出力ポートの 1 つをバンク切り替えのレジスタに割り当てていますが,そこに設定する 8bit のデータを 2bit ずつ 4 つに分け,それぞれをページと呼ぶことにします。各ページのアドレス範囲は以下のようになります。
ページ0 | 0000H〜3FFFH |
ページ1 | 4000H〜7FFFH |
ページ2 | 8000H〜BFFFH |
ページ3 | C000H〜FFFFH |
この出力ポートの各ページに 2bit の値を設定できますが,これが,MSX で言うところのいわゆるスロット番号になります。
2bit なので,0〜3 のスロットを割り当てることができます。
ただ,このスロットそれぞれは,物理的に独立していて,64KB のアドレス空間を持っています。
あるページに対してあるスロットを割り当てると,そのスロットの同じページ位置が Z80 のアドレス空間に割り当てられるという仕組みになっています。
実際は,それぞれのスロットに対して,さらに 4 つのスロットをぶら下げることができ,上位のスロットを基本スロット,下位のスロットを拡張スロットと呼んだりするのですが,まぁ,この辺りの説明はまた今度で…。
ちなみに,大抵の MSX は,ロムカートリッジなどを挿すことのできるカートリッジスロットが二つくらいあると思いますが,概ね,それらはスロット#1 とスロット#2 になっています。
メモリマッパー
…んで,今回作るのは,MSX のメモリマッパーと呼ばれる機能によく似た(笑)メモリーボードです。
メモリマッパーという仕組みも,スロットと似ていて,16KB の各ページに対して,16KB のセグメントと呼ばれるメモリの一部を割り当てることができます。
スロットと違うのは,大きなメモリの塊(256KB とか 512MB,それ以上など)から好きなセグメントを好きなページに割り当てることができるということです。同じセグメントを異なるページに割り当てることもできたりします(…よね?)
スロットは各ページ 2bit の値しか設定できませんでしたが,メモリマッパーは各ページに 8bit の値を設定できます。
すなわち,各ページに対して 256 セグメントのうちの一つを割り当てることができることになります。セグメントの最大数が 256 ですので,メモリの最大容量は 16KB * 256 = 4MB ということになりますが,メモリーマッパーも前述のスロットに割り当てられるんです。
各スロットに最大 4MB のメモリーマッパーを割り当てられるので,実際は,4MB 以上のメモリを接続できるのですが,スロット切り替えに加えて,メモリーマッパーのセグメント切り替えをして,ページにメモリが割り当てられるんです。ややこしいですね。
マッパーボード
…という名前で作った基板です。
1Mbit の SRAM を 8 個載せていますので,合計 1024KB です。Z80 のプログラムが使うメモリとしては,多すぎです(笑)。多分そのほとんどは RAM-DISKぐらいしか用途がない気がします。
この SRAM,表面実装用を使うと面積と容量とコストをだいぶ稼ぐことができるのですが,今回は,全体を DIP(Dual Inline Package)部品で作ることにこだわってみました。また,DRAM を使うとより大容量にできそうなのですが,Z80 をリセットしている間のメモリリフレッシュとか面倒だったので,やめました(笑)。
動作確認
毎回,1 枚ずつ基板が増えていってますが,今回で 5 階建てです。
メモリの動作確認ですが,テストプログラムを書いてチェックしてもいいのですが,一番わかり易い方法がありました。
CPU ボードに載せている SRAM に,MSX の BIOS イメージを転送してみます。
どうなるでしょうか?(笑)
ロゴの色があまり見慣れない漢字ですが,気にしないでください。RTC(リアルタイムクロック)を載せていないのでデフォルトでオレンジになってしまうためです。
メモリ容量が,1024KB になっているので,期待通りに動いているようです。
さて,なんとか MSX の BASIC が動作したので,キーボードから実際にプログラムを打つことができるようになりました。Z80 マイコンシステムとしての当初の目的は何となくクリア出来たのですが,せっかく MSX っぽくなったので,もう少し MSX っぽくしてみましょう。
MSX1(…という規格はないのですが,MSX2 より前の MSX という意味で)の機能としては,あとサウンド機能が足りません。
…と言うことで,次回は,サウンドボードを作っていきます。