CPU実験室

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

パラレルI/O実装

モニタが載れば後のハードデバッグ作業は格段に楽になります。続いてNSC800ファミリのRAM/IO/TIMER複合ペリフェラルIC:NSC810Aを取り付けました。

f:id:O3I:20211130160605j:plain

このデバイスのチップセレクトはアドレス0xC000-0xFFFFでアクティブになるようにしています。アドレスの下位8ビットはマルチプレクスデータバスで供給されるので内蔵SRAM128byteはメモリ空間0xC000-0xC07Fに見えることになります。一方26本ある内蔵レジスタはI/O空間0xC0-0xD9でアクセスすることになります(この時アドレスバスには0xC0C0-0xD9D9が出力されNSC810Aがセレクトされる)

 

これはうまいことやったかもしれません。マッピングのためアドレスの上位ビットが欲しいメモリ領域と細分化のため下位ビットが欲しいIIO領域が上位ビットをデコードすることでデコーダを共用できた、とも言えます。最初からそれを意図して設計したかといわれると忘れましたが。

f:id:O3I:20211130160631j:plain

とここまでは調子よかったのですが、いざパラレルポートをアクセスしようとしても全く動作しないのです。もちろんメモリも見えません。

まだ何かやらかしていそうなので回路図を再度チェック。

チップイネーブルCEは正論理なので74HC139の負論理出力をちゃんとインバータで反転してるし・・・と見ていたらIOとメモリを区別するIOT/Mピンに何やらZ80風の信号/IORQを接続しています。/IORQはCPUが出力するIO/Mを反転したものなのでこちらはわざわざインバータを挿入して反転してしちゃったようです。

これではIOもメモリもアクセスできないわけです