CPU実験室

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

I/Oアドレス空間

この点がどうも引っかかってたので結構調べてみました。
Intel 8080/8085 Assembly Language Programming」のIN/OUT命令の説明に

イメージ 1
とあります。
I/O空間は256バイトだが16ビット空間に配置するために下位8ビットを上位8ビットへ複製する、というようなことが書いてあります。
これホントなんでしょうか?
I/O空間で使用しない(Don't Careな)上位8ビットは0か不定だと思ってました。
 
Z80でもIN/OUT命令で例えばOUT(C),A では使用しないアドレス上位8ビットにはBレジスタ内容が出力されていて、これもデコードすれば実はZ80も16ビットのI/O空間を持っている・・・・
という仕様外仕様?裏技?があったのでその類かもしれません。
(※これはLD(BC),Aと同じ内部処理による副作用とも言えますが)
 
ともあれ8155の内部レジスタは例えば「8X」でアクセスしてやればアドレスバスには「8X8X」が出力され最上位アドレスA15=1となり8155がアクティブになる。内部レジスタが見えるでメデタシメデタシです。
 
8155の内部レジスタが80以降になるとみなした場合のメモリマップは以下のようになります

イメージ 2