211204 PS/55エミュ製作 [7]フォントのRAM配置と半角拡張文字
フォントデータのバイナリをビットマップに変換するプログラムを作ってフォントファイルやメモリダンプを解析した結果、色々分かってきた。
まず、半角拡張文字の字形はどことなく見覚えあるようなないようなと思っていたら、APLで使われる文字セットだった。APL以外で使われることはなさそう。
外字RAMをダンプして調べた結果、B4000h(内部アドレスは34000h)に通常の半角文字、BC000h(3C000h)に半角拡張文字がコピーされていると分かった。そして、USRFNTユーティリティーはここの一部を書き換えている、つまりカスタムフォントを使っていたため、文字化けしていたと分かった。
半角フォントを外字RAMから読み込むように作り替えて、画面は大体見えるようになった。でも、外字編集である場所にドットを打つと2箇所ドットが出る所があるので、まだ何かが変。
まあ、開発当初の表示はこんなだったのでだいぶ進歩した。
半角フォントを外字RAMから読み込むように作り替えたため、内蔵DOSで半角文字を表示できなくなった。DOSBox起動時にフォントを外字RAMへコピーする処理を入れる必要がある。そう難しいことではないけども面倒。
DOS J5.0が起動しない原因はBIOS内のアドレスにfar callして、そこにコードが実装されていないことが原因と分かった。PS/55のBIOS ROMは吸い出してあるのでその場所を軽く調べたが、ディスプレイ周りの初期化処理だろうか。よくわからない。
もう一つの謎は、USRFNTユーティリティーのフォント・マップ編集にある「常駐」と「オーバーレー」というのは何なのかよくわからない。全角文字のテキスト表示高速化?またはフォントの入れ替えか?