オペレーティングシステム開発のチュートリアルでは、VGA、EGA、またはSuper VGAに直接書き込むことで画面データに到達することが正確に示されていますが、表示されない固定アドレスへの書き込みと、オンボードまたはビデオカードへの直接書き込みの実際の違いは何ですか。または取り外し可能ですか?私の問題に関するこれについての私の混乱の基本的な明確化が欲しいだけです
また、カード、接続インターフェース、バス、アーキテクチャ、システムオンチップ、組み込みシステムなどの変数を使用した単純なケースではないため、この100%の背後にあるアイデアを理解する方法を見つけるのは難しいと思います。固定アドレスは、ハイエンドGPUとローエンドオンボードGPUで異なりますか?その理由とそうでない理由
カーネルをホストしてオペレーティングシステムを作成することは、プログラミングにおける私の目標の1つです。用語の理解に失敗すると、一部の領域で私を妨げるだけでなく、ハードウェアのテーマについて愚かに見えます。
追加:これらの現在の回答のいくつかは、16ビットの仕様でプロセッサの最大アドレス可能メモリを使用することについて語っています。問題はこれらの他の発生する問題のいくつかです:
1.カード自体のメモリはどうですか?画面データ自体には、システムRAM=は必要ありません。
2.高ビットモードではどうですか?また、リアルモード(x86)でBIOSを無視しても、ALを介してメモリをアドレス指定できませんか?
3.固定アドレスへの書き込みの概念は、実際のマイクロプロセッサー以上の多数のレジスタとパフォーマンスを備えたGPUでどのように変更されませんか?
技術的には、VGAは Video Graphics Array の略で、1987年に導入された640x480ビデオ標準です。当時は、特にカラーディスプレイの場合、比較的高解像度でした。
以前VGAが導入されたとき、 Hercules などのいくつかのグラフィック標準があり、どちらのテキスト(25文字の80行)も表示されました)または比較的高解像度のモノクログラフィックス(720x348ピクセル)。
当時のその他の標準はCGA( カラーグラフィックアダプター )で、最大640x200ピクセルの解像度で最大16色を使用できました。その結果は次のようになります。
最後に、注目に値するPC標準は、64色で最大640×350の解像度を可能にする拡張グラフィックスアダプター(EGA)でした。
(PC以外の標準を無視して、これを比較的短くしています。AtariまたはAmiga標準を追加し始めた場合-一度に最大4096色!-これはかなり長くなります。)
その後、1987年にIBMはPS2コンピュータを発表しました。マウスとキーボードの新しいポートを含む以前のバージョンと比較して、いくつかの注目すべき違いがありました(以前のマウスは25ピンシリアルポートまたは9ピンシリアルポートを使用していました)ifあなたはまったくマウスを持っていた);標準の3½インチドライブと、高解像度と多くの色の両方を備えた新しいグラフィックアダプター。
このグラフィック標準は Video Graphics Array と呼ばれていました。 3列の15ピンコネクタを使用して、アナログ信号をモニターに転送しました。このコネクタは、DVIやディスプレイポートなどの優れたデジタル規格に置き換えられて数年前まで続きました。
VGAの後
進歩はVGA標準で止まりませんでした。 VGAの導入直後、800x600[〜#〜] s [〜#〜]のような新しい標準が使用されました。同じコネクタ。 (ヘラクレス、CGA、EGAなどはすべて独自のコネクタを備えていました。十分に低い解像度を表示しようとしても、CGAモニターをVGAカードに接続できませんでした)。
それ以来、より高い解像度のディスプレイに移行しましたが、最もよく使用される名前はVGAのままです。正しい名前はSVGA、XVGA、UXGAなどですが.
(ウィキペディアの画像提供)
「VGA」と呼ばれるもう1つのものは、元のVGAカードで使用されていたDE15コネクタです。この通常青いコネクタは、アナログ「VGA信号」をモニターに転送する唯一の方法ではありませんが、最も一般的な方法です。
左:DB5HD右:代替VGAコネクタ、通常はより良い品質のために使用されます)
「VGA」が使用される3番目の方法は、グラフィックスカードを記述することです。ただし、そのカードはVGAとはまったく異なる解像度を生成する可能性があります。使い方は技術的に間違っているか、少なくとも「VGA互換カード」である必要がありますが、一般的な発言では違いはありません。
VGAへの書き込みを残します
これは、IBMのメモリの方法に由来しますXTが分割されました。CPUは最大1MiB(1024KiB)のメモリにアクセスできました。下の512KiBはRAM用に予約され、上の512 KiBは追加用に予約されました-inカード、ROMなど.
この上部の領域は、VGAカードのメモリがマップされた場所です。直接書き込むことができ、結果がディスプレイに表示されます。
これはVGAだけでなく、同じ世代の代替にも使用されました。
G =グラフィックモードビデオRAM M =モノクロテキストモードビデオRAM C =カラーテキストモードビデオRAM V =ビデオROM BIOS(PS/2では "a"になります) a =アダプタボードROMおよび専用RAM(無料UMAスペース) r =追加のPS/2マザーボードROM BIOS(PS/2以外のシステムでは無料のUMA) R =マザーボードROM BIOS b = IBMカセットBASIC ROM(IBM互換では「R」になります) h =ハイメモリ領域(HMA)、 HIMEM.SYSが読み込まれている場合。 従来の(ベース)メモリ: 最初の512KB(または8チャンクの64KiB)。領域(UMA): 0A0000:GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG [.____。】0B0000:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC [.____。】0C0000:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [.____。】0D0000:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa a 0E0000:rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr 0F0000:RRRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRR
( ソース ASCIIマップ)の)。
「固定アドレス」への書き込みwas基本的に、ビデオカードに直接書き込みます。これらのすべてのビデオISAビデオカード(CGA、EGA、VGA)は、本質的にいくつかのRAM(およびレジスタ)がCPUのメモリおよびI/Oスペースに直接マップされていました。 。
そのため、特定のメモリ位置にバイトを書き込んだ場合、実際にはビデオカードにあるメモリに書き込み、ビデオカードがそのメモリを使用したため、その文字(テキストモード)がすぐに画面に表示されました。
特に、今日のビデオカードがVGAと呼ばれることもある(そして、1990年代の「真の」VGAカードに類似している)ことを考えると、これは今日非常に混乱しています。ただし、最近のカードでさえ、これらの古いデザインの一部の機能をエミュレートします(ほとんどの最近のPCでDOSを起動して、ビデオメモリに直接書き込むDOSプログラムを使用できます)。もちろん、今日ではすべてビデオカードのファームウェアでエミュレートされています。
実際には違いはありません。ビデオメモリのアドレスに書き込んでいる場合、ハードウェアはそれをビデオカードにルーティングします。
独自のオペレーティングシステムを作成している場合は、PCIバスをスキャンしてカードを見つけることから始めて、グラフィックカードにメモリを適切にマッピングさせるために、多くの作業を行う必要があります。
これまでの回答では、古いビデオカードは、プロセッサのアドレス空間にマップされたビデオメモリを持っていることで機能すると説明しました。これはカード自身のメモリでした。ノースブリッジは、このマップされたメモリに対する要求をVGAデバイスにリダイレクトすることを認識しています。
その上に、VGA互換カード用のamny拡張と新しいモードがありました。これにより、int 10h
を通じて動作するVESA BIOS Extensions(VBE)が作成されました。これは、基本的な2Dアクセラレーション(BitBlt)、ハードウェアカーソル、ダブル/トリプルバッファリングなどをサポートします。これは、サポートされている解像度(高解像度を含む)でのフルカラー表示の基本的な方法です。これは通常、カード内部のメモリも使用し、ノースブリッジはクラシックVGAと同様にリダイレクトを実行します。これは、フルカラー/フル解像度のグラフィックを利用する最も簡単な方法です。
次に、BIOSを使用せずにGPUに直接アクセスするいくつかの方法があります。これにより、VBEと同じ機能にアクセスできるようになり、場合によっては追加の機能にアクセスできます。私の理解はここではかなりあいまいです。このインターフェースはデバイス固有のものだと思いますが、それはよくわかりません。
次に、3Dアセレーション/ GP-GPU計算などをサポートできるGPUインターフェイスがあります。これには、メーカーが提供するドライバーまたは仕様を完全に使用することが必ず必要であり、同じメーカーのデバイス間でも実質的な違いがあることがよくあります。