2

C言語を使って画面上の文字を変更する方法を教えてください。dos.hヘッダファイルを使ったTSRプログラムです。

4

1 に答える 1

1

私は私の初期の学部生のことを覚えていることから部分的に助けることができるかもしれません。

DOSでは、アドレス0xB8000000(コメントで正しく指摘されているsegment:offsetとして0xB800:0)は、テキストモードビデオメモリの開始アドレスです(0xA8000000はグラフィックス用です)。この領域に書き込まれたものはすべて、vgaカードに直接コピーされます。これで、画面上のすべての文字が2バイトで構成されます。最初のバイトはASCII文字で、2番目は色でした。

したがって、効果的には、16ビットcのfarポインターを取得し(通常のnearポインターでは機能しないため)、上記のアドレスを割り当てます。次に、画面サイズ(25 * 80)またはその他* 2を想定すると、画面全体に表示される1バイトアドレスの総数になります。

上記を使用して、簡単なprintf関数に相当するものを作成したことを覚えています。

問題に戻ると、上記のアドレスから画面サイズまですべての偶数アドレスをループするコードを作成する必要があります。奇数は色を表すため、偶数アドレス。そこで、割り当てられた文字が有効なASCIIであるかどうかをチェックし、必要に応じて加算または減算します。たとえば、「A」+32は「a」を取得します。

上記のプログラムがいつこれを行うかについては疑問が残ります。dos.hには、画面の文字が変更されるたびにトリガーされる割り込みなどが発生する可能性があると思います。しかし、この部分は私の記憶ではあまり明確ではありません。

それがあなたのために働くかどうか見てください。

于 2012-10-10T18:42:59.667 に答える