各文字のピクセルを操作して新しいフォントや記号を作成できる DOS の文字テーブルのアドレスは?
BIOS 割り込みで変更することはわかっていますが、直接アクセスするには、DOS の文字テーブルのメモリ アドレスだけが必要です。
それがどのように行われたかはもう覚えていません (私は 20 年前にこのようなことをしました) が、FreeVGA プロジェクトを見たいと思うかもしれません。テキスト モードのドキュメントによると、自分でアドレスを選択できます(ちょっと、Character Map Select Register を参照してください)。そのレジスタへのアクセスについては、こちらで説明しています。
また、このトピックを扱っているこのプレゼンテーションも参照してください(おそらく理解しやすいでしょう)。
編集: これは、単一の文字を置き換える方法を説明する投稿です。彼はint 10h, ax=1100h (代替ドキュメント) を使用して文字を交換しますが、CX レジスターでは実際に交換すべき文字数を知ることができます。関数の非常に包括的なリストを次に示しint 10h
ます。
編集 2:別の素敵なドキュメントが見つかりました。
編集 3:最後のリンクされたドキュメントには、次のようなものがあります。
Character Generator RAM に直接アクセスするためのプログラミング
次のシーケンスは、キャラクタ ジェネレータ メモリにアクセスするための EGA と VGA をセットアップします。関連情報については、「EGA I/O ポート」を参照してください。
out 3c4H, 0402H Mask reg; enable write to map 2
out 3c4H, 0704H Memory Mode reg ; alpha, ext mem, non-interleaved
out 3ceH, 0005H Graphics Mode reg; non-interleaved access
out 3ceH, 0406H Graphics Misc reg; map char gen RAM to a000:0
out 3ceH, 0204H Graphics ReadMapSelect reg; enable read chargen RAM
これらの OUT の後、フォント データは a000:0 で始まり、文字のフォント データの最初のバイトは文字の ASCII 値 * 32 で始まります。 :
out 3c4H, 0302H Mask reg; disable write to map 2
out 3c4H, 0304H Memory Mode reg; alpha, ext mem, interleaved
out 3ceH, 1005H Graphics Mode reg; interleaved access
out 3ceH, 0e06H Graphics Misc reg; regen buffer to b800:0
out 3ceH, 0004H Graphics ReadMapSelect reg; disable read chargen RAM
私の記憶が正しければ、グラフィック カードがあまり変更されていない場合 (15 年以上前に最後にプレイしたとき)、フォント情報は特定のメモリ アドレスになく、グラフィック カード メモリにロードされます。