23

約 15 年前、私はモニター上のテキストを直接変更する悪いコードを書いて、自分自身を楽しませたり、CS の先生を悩ませたりしていました。これは、VGA を搭載した PC 互換機で 0xB8000 のビデオ メモリにアクセスすることで簡単に実行できます。

今日まで早送りして、物理メモリを読み取るためのアクセスを提供するデバッグ ポートを介して、昔ながらのトリックを試してみることにしました。嬉しいことに、最初に試したプラットフォームでも動作しました。その後、がっかりしましたが、他の多くのシステムでは機能しないことがわかりました。すべてで動作しないシステムには、UMA (共有メモリ) グラフィックスがあるようです。

そこで、BIOS ライター、低レベル OS 担当者、およびビデオ ドライバーの専門家の皆さんに質問です。共有グラフィックス メモリを備えた PC 互換システムで通常の 80x25 カラー テキストモードを使用している場合、リアル モードで、 0xb8000 - 0xB8FFF はすべて 0xFF であり、画面に何が表示されているかを示す代わりに、画面バッファーはどこに移動したのでしょうか?

4

3 に答える 3

17

ああ、それが BIOS 画面なら、すべての賭けはオフです。グラフィックスが統合されたマザーボード上の BIOS であるという事実は、ビデオの奇妙さをさらに助長します。

おそらく、「従来の」VGA 機能は、すべての目的でエミュレートされます。外付けビデオ カードを使用すると、これは BIOS からは見えなくなります。それでも VGA ビデオ カードが認識されます。しかし、ビデオ カードにハードワイヤードされた BIOS は、画面にテキストを貼り付けるためだけに、偽の VGA レイヤーと古い学校の 20 ビット アドレス空間メモリ マッピングをセットアップする必要はありません。

代わりに、BIOS は、オペレーティング システムが実際に起動されるまで (独自のモードを介して) カードと直接やり取りすることができ、その時点でメモリ マッピング自体を行います。これには、メイン メモリを共有するカードの場合、RAM が正しくインストールされていない場合に起動時に空白の画面が表示されないという大きな利点があります (代わりに、ビデオ カード独自の BIOS モードは、通常は他の目的のために予約されているバッファを使用できます。 BIOS に入り、0MB の RAM がインストールされていることを確認できます)

于 2009-07-22T16:42:40.123 に答える
6

CGA ( Color Graphics Adapter) カードとMDA (Monochrome Display Adapter) カードは異なる地域を使用していました。1 つ (色) は0xB8000にあります。モノクロは0xB0000から始まります。マシン上で両方のディスプレイを同時にアクティブにすることができることを覚えておいてください。

DOS メモリ マップを参照してください(ただし、 CGAのオフセットにタイプミスがあります - 0800h ではなく 8000h にする必要があります)。

VGA (ビデオ グラフィックス アレイ) に関する限り、そのメモリは0xA0000の 640K 境界で低く始まり、64K まで続きますが、カードが最大 256K まで使用できるため、それを超える可能性があります。VGA プログラミングのサンプル コードはこちらにあります。しかし、複数のビデオ モードがあるため、それほど単純ではありません。ここで助けを求めるかもしれません。

VGA、VGA、XGA、Super-VGA ではありませんか? これらはすべてセマンティクスがわずかに異なります...しかし、それでも、それらのいずれかがテキストを0xB0000または0xB8000に配置する必要があると確信しています。どちらかを入力するとどうなるか

MODE MONO

また

モード CO80

――表示に影響はありますか?これらは、DOS の下で、1 つのアダプタ テキスト モードから別のアダプタ テキスト モードに切り替わります。

于 2009-07-22T14:03:51.653 に答える
3

その時点で仮想メモリが有効になっている可能性があります。

たとえば、iPXEコードベースでビデオ バッファに書き込もうとしたのですが、画面に反映されませんでした。調査した結果、関数を呼び出す必要があることに気付きました。

phys_to_virt(0xB8000);

ビデオバッファに直接書き込むことができます。

于 2014-09-14T05:43:28.340 に答える