240709 PS/55エミュ製作 [36]ROMのメモリー・エンコーディングを修正
DOS J4.0が起動しない問題は、DOSの動作中にメモリーの割り当て方法を設定するI/Oポート・レジスターが書き換えられて、ディスプレイ・アダプターの属性バッファーが配置されていたE0000-E0FFFhがシステムメモリー (RAM) に再割り当てされていたことが原因だった。
メモリー・エンコーディング・レジスター 1(16進 00E1)
Bit | Function
----|-----------------
7 | -Card 2 EN 2
6 | -Card 2 EN 1
5 | -Card 1 EN 2
4 | -Card 1 EN 1
3 | -ENSPLIT
2 | -640
1 | ROMEN
0 | Reserved
ビット1:このビットは、アドレス16進000E0000~000FFFFFがどのように割り当てられるかを決定します。このビットを1にセットすると、ROMがイネーブルされ、読み出しアクセス・アドレスがROMに割り当てられ、書き込みアクセス・アドレスはRAMに割り当てられます。このビットを0にセットすると、ROMがディセーブルされ、読み出しアドレスがRAMに割り当てられます。ROMがディセーブルされている間、書き込みアドレスはディセーブルされています。(注意:このビットを1にセットすると、システムの性能が低下します。ROMへのアクセスが8ビットであり、サイクルが長いためです。)
POSTはメモリー・エンコーディング・レジスターのビット1 (ROMEN) に1をセットして、BIOS ROMのデータをRAMにコピーし終わると、0をセットしてROMを無効にする。これは、注意書きにあるとおり、BIOSをRAMに再配置した方がレスポンスが改善するからだろう。しかし、まさかDOSの動作中にこのビットが書き換えられているとは思わなかった。
これで文字モードの実装はほぼ終わったので、あとはAPA(グラフィック)モードの実装だ。本当に苦労するのはここからかもな。