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(グラフィック)モードの実装だ。本当に苦労するのはここからかもな。


※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい。コメントはスパム防止フィルターによる承認制のため、投稿してもすぐに反映されない場合があります。

管理人 : Akamaki (akm)

は、PCとVTuberに夢中になっている電気技術者です。

私はレトロコンピューティングの愛好家ですが、そのようなリグはもう収集していません。

私の活動はトップページで見ることができます。読んでくれてありがとう!