161009 AXエミュ製作 [7]DBCSグラフィック表示とアトリビュート実装
変更点 (4000AX07 → 4000AX08)
グラフィックモードでDBCS(日本語文字列)の表示に対応。文字列出力で画面右端にDBCSが来た場合に折り返すようにした。基本アトリビュート、拡張アトリビュートの表示に対応。仮想テキストRAMとグラフィック画面でのアトリビュート取得(INT 10h/AH=08h)に対応。
ダウンロード
更新分をこちらに置きました。これが本当に最後の更新、たぶん。
- CELLA.DAT内Filesを参照
- https://radioc.web.fc2.com
JEGAテキストモード独自のアトリビュート装飾を実装
下の画面は基本アトリビュートをEGA互換モードで表示したときとJEGAモードで表示したときの比較。
次の画面は拡張アトリビュートの表示例。DBCS第2バイトのアトリビュートで横倍角、縦倍角、4倍角、ボールド(太字)を設定できる。
行間の余白で文字に隙間ができている。実機では縦倍角の表示開始位置をJEGAのレジスタで変更できるようになっているのだけど、それをやるとループ内のコードが余分に増えるのでこれで妥協した。ボールドはフォントを1ドットずつ右にずらして元のフォントとORしたものを表示。そうすると、本来なら一番右の列が隣のカラムに入るのでそちらのアトリビュートが適用されるはずだが、ここでは単にカラム単位でアトリビュートを処理しているので、そこまで再現していない。
コンソール出力で右端にDBCSが来るとSBCSとして折り返されてしまう問題を修正
分かりやすいプログラムミスだけど、日本語と英語の処理にこういう違いがあるのだと改めて気づかされた。