Z80Hで使用している128KBのメモリをすべて利用する工夫をしました
未使用だった128KBメモリの残り半分を使用できるように回路を変更してみました。
これが製作した第2版の基板です。
|
完成したZ80H第2版
|
しかし、そのために128KBのメモリの半分は使用されないという勿体ないことになっていました。
このカードはCP/Mを使用しない場合は64KBの拡張メモリとして使用できるように設計されています。
せっかく128KBのRAMを積んでいるのですから、これを有効活用したいところですがメモリマップを見る限り、拡張できるのは$20000~$2FFFFの64KBのみのようです。(40Pコネクタに出ているアドレスラインもA15までです。)
|
FM77AVのメモリマップ |
ということで、128KBのメモリを有効活用するためには拡張RAM空間にバンクメモリという形で置くしかないようです。
|
拡張RAMの配置 |
実際にどのようにバンク切り替えを実現するかですが、Z80Hでは$FD64というアドレスのREAD/WRITEでZ80Hの動作を切り替えているのですが、その切り替えに使用しているLS138を利用してBANK0とBANK1を切り替えられると考えました。
|
バンク切り替え回路 |
具体的には、上記回路のようにLS74を追加すれば、その出力で128KBのメモリのA16端子を制御することで、$FD65のWRITEでBANK0、READでBANK1のように切り替えることができるはずです。
しかし、2020年12月19日のブログの画像でお判りのように、10cmx8cmの基板にICを追加する余裕はありません。そこで、DIP型のSRAMをSOP型に置き換えることで74LS74を置くスペースを確保することにしました。さらに、基板の高さが8cmではカバーとの間に余裕がなかったので高さを1mm低くして79mmにしました。
基板の設計にはKiCad、自動配線にはfreeroutingを使用しているのですが、前回の基板でもfreeroutingはかなり苦労して(!)配線してくれていましたが、今回はさらにICが増え、しかも高さも1mm低くしたためかfreeroutingによる自動配線が終了しないため、配線の混んでいる付近のIC等の配置をほんの少し移動して試してみるという作業を何度も繰り返すことでようやく配線を完了することができました。
出来上った基板を示します。追加・変更箇所は左上のLS74とSRAMだけなのですが、その他の部分も位置を細かく調整しています。
|
密度の高い基板 |
実際に切り替わっているかどうかを、Z80Hの動作確認用に用意されているTiny Monitorを書き換えて作成したテストプログラムを使用して確認してみました。
確認に使用したプログラムは下記のものです。
MMRを用いて拡張メモリの$20000~$20FFFの領域をCPU空間の$6000~$6FFFにマッピングし、そのうちの$6800からの16バイトにBANK0に$31~を、BANK1に$41~を書き込んだ後にそれぞれを読み出してみました。
その結果、簡単なテストではありますが、画像のようにそれぞれのBANKメモリに正しく書き込めて読み出せていることが確認できました。
|
実行結果 |
実際にどのような形でこのBANKメモリを活用できるかについては、これから考えることになるのですが、とりあえず、128KBのメモリをすべて使用できるようになりました。