211217 PS/55エミュ製作 [11]画面モード3の実装とバグ修正して開発完了
DOS J5.0がディスケットから起動し、セットアップが起動して、ハードディスクへインストールでき、シェルが起動する。そして、SWITCHでDOS/Vモードへ切り替わる。ここまでできれば、もう十分満足。当初の目標は十分達成したため、これで開発完了。もう今年はVisual Studioを二度と開けることないな。
USRFNTユーティリティーで外字RAMの未使用部分?が一時領域として使用されていることが判明したため、文字コードから外字RAMへのアドレス変換範囲を修正。
画面モードの切り替えルーチンをVGA上位互換にして、DOS J5.0のDOS/Vモードへの切り替えに対応。PS/55グラフィック機能がVGAの上位互換になった。
単色文字モードでの属性の扱いが未だによくわかっていない。レジスタの設定値を使用するとカーソルや罫線が黒くなって見えなくなるが、数字のビットをいじると今度はカラー文字モードで整合性が合わなくなる。なので、単色モードでは文字色同様パレット値は2(緑)で固定している。
画面モード3hでDBCSの切り替えに対応。B0000hからの128KB分をビデオメモリにしちゃって、描画処理内でアドレスに8000hを加えるという荒技で対応。このモード中に外字RAMへのアクセスが発生するとメモリハンドラがおかしくなりそうだが、そこのつじつま合わせは必要だろうか。
最後の最後で重大なバグを発見した。USRFNTユーティリティーが終了時に暴走することがあるのであれこれ調べていたら、CHKDSKコマンドでコンベンショナルメモリが640KBではなく641KBとして報告されていた。これではビデオメモリや外字RAMの領域であるA0000h以降が勝手に書き換わってしまう。日本語DOSがブート時にBIOS Data Areaの0x413 (Number of Contiguous Memory Blocks) をインクリメントしていることが分かったので、DOSBox起動時は639として書き込むように修正。
DOSVAX 変更点 (4467AX13 → 4467PS01)
- 日本IBM PS/55モデル5550-S/T/V相当のエミュレーション機能を追加。使用方法はREADME_PS55.txtを参照。
ダウンロード
- radioc.dat内Filesを参照
- https://radioc.web.fc2.com