14

各文字のピクセルを操作して新しいフォントや記号を作成できる DOS の文字テーブルのアドレスは?

BIOS 割り込みで変更することはわかっていますが、直接アクセスするには、DOS の文字テーブルのメモリ アドレスだけが必要です。

4

2 に答える 2

8

それがどのように行われたかはもう覚えていません (私は 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
于 2011-05-30T16:00:58.403 に答える
1

私の記憶が正しければ、グラフィック カードがあまり変更されていない場合 (15 年以上前に最後にプレイしたとき)、フォント情報は特定のメモリ アドレスになく、グラフィック カード メモリにロードされます。

于 2011-05-30T15:56:59.930 に答える