CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

I/Oアドレスデコーダ

ループの繰返し周期は2.7usでした。
現在付けている水晶は20MHz。クロックジェネレータで3分周されるので
システムクロックは6.67MHzとなり18クロックサイクルでループしていることになります。
JMP$には15クロックサイクル必要となっているのでフェッチサイクルを足すとこんなものでいいようです。、
 
CPU周りが動いていそうなので周辺デバイスの確認に入っていきます
先ずはGALのロジックにアドレスデコーダを追加したのですが
 
イメージ 2

ここでまたまたポカミス発見
GALのアドレス入力にA19~A12までしか引き込んでいませんでした!
8086のI/O空間は16ビット64kBありますがGALに入力されたアドレスラインで利用できるのはA15~A12までしかありません。
つまりフルデコードしても1つのデバイス当たり4KBという広大なI/O空間が割り当てられイメージだらけになってしまいます。これは非常にもったいない使い方です。
もっともボード上ではこれ以上I/Oの増やしようは無いし、拡張バスへはリザーブされた2本のチップセレクトと全アドレスが出力されているのでそっちでローカルなデコードをすればいいわけで特に支障はありませんが・・・
 
デコーダはこんなざっくりした内容になります
 
イメージ 1

本来は下位8ビットをフルデコードしてI/O空間を$00~$FFに収めてやれば

IN/OUT命令のアドレス指定に8ビット即値を使うこともできる利点がありました。