Image: 211131 PS/55エミュ製作 [5]外字のコード変換が複雑

画面がモノクロ表示になる原因はDOS起動時にビデオDACにモノクロディスプレイ用の色パレットが記憶されていたようで、ある非公開レジスタ (3E1h) で正しいビットを返すようにしたらカラーで表示されるようになりました。

属性の解釈については技術解説書に説明されているが、色のビットが反転していることが書かれていなかった点が不親切だった。こちらは比較的スムーズに単色文字モード、8色文字モードともに属性の解釈を実装。ANSI.SYSのテストが通るようになりました。PS/55のカラーテキストは文字単位で背景色を指定する仕組みがないので、これで正しいはず。

Image: PS/55 Emulator

DOS J5.0はEBDAのポインタと先頭にバイト数 (01) だけ入れたらその部分のエラーは解決しましたが、別の問題が浮上。それを解決したらまた別の問題と、そう簡単にさせてくれない。

かなり苦労したのが外字の仕様で、こちらはブラックボックスなのでステップ実行や逆アセンブルしたコードを追うしかなかった。I/O周りを見ても外字RAMへのアクセス手順が不明だったので困った。シフトJISから外字用コードに変換する処理も難解で、逆アセンブルしたコードを元に自分でコード変換をテストするプログラムを作り、ようやく全貌を掴めた。ただ、DOSBoxでメモリ空間上にRAMウィンドウを出す手順(PageHandler)がまだ把握できず、機能を実装できていない。

全角文字の外字については何とか仕様を把握できた一方、半角文字に拡張文字というのがあるらしいのだが、実機もともかく資料がないので詳しいことが分からない。DOS起動時にディスク上のフォントファイルからロードしている感じはするので、そこを解析すれば分かるだろうか。

カレンダー時計を読まない原因は、DOSがCMOSに直接アクセスするのではなく、BIOS ROMに処理を投げていることだと分かった。これは割り込み発生時の処理を解析して返す値を用意してやれば、何とかなりそう。

残るは外字の処理さえ実装できれば、ディスク起動ではまずまずのエミュレーションになるだろう。ディスク起動せず使う場合のエミュレーションは、属性の書き込みや2バイト文字の処理など作り直さないといけないので面倒くさい。


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

管理人 : Akamaki (akm)

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

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

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