オペレーティングシステム開発のチュートリアルでは、VGAやEGA、スーパーVGAに直接書き込むことで画面データに到達することをピンポイントで説明していますが、私が理解していないのは、ディスプレイ用の固定アドレスに書き込むことと、オンボードまたはリムーバブルのいずれかのビデオカードに直接書き込むことの間の本当の違いは何なのでしょうか?私はちょうど私の問題についてのこの上の私の混乱の基本的な明確化が欲しいです
そして、カード、コネクティビティインターフェース、バス、アーキテクチャ、システムオンチップ、組み込みシステムなどの変数でそんな単純なケースではないので、この考え方を100%理解するのは難しいと感じています。固定アドレスは、ハイエンドのGPUとローエンドのオンボードGPUでは違うのだろうか?なぜ、そしてなぜそうではないのか?
カーネルをホストしてオペレーティングシステムを作ることは、私のプログラミングの目標の一つであり、夢のような話です。専門用語を理解していないと、いくつかの分野で邪魔になるだけでなく、ハードウェアの話題では愚かに見えてしまいます
EXTRA: これらの現在の回答のいくつかは、16ビットでプロセッサの最大アドレス指定可能なメモリを使用することについて話しています。問題は、これらの他の発生する問題のいくつかです
1.カード自身のメモリは?それだと画面データ自体にシステムRAMは必要ないでしょう
2.高ビットモードではどうでしょうか?また、リアルモード(x86)ではBIOSを無視して、ALを介してメモリをアドレスすることはできないのでしょうか?
3.多数のレジスタを持ち、実際のマイクロプロセッサ以上の性能を持つGPUでは、固定アドレスへの書き込みの概念はどのように変わるのでしょうか?
30 None 2013-01-24
技術的にはVGAとは、Video Graphics Arrayの略で、1987年に導入された640×480のビデオ規格です。当時は、特にカラーディスプレイとしては相対的に高い解像度でした
VGA が導入される前には、hercules のような他にもいくつかのグラフィック規格がありましたが、これはテキスト (80 行 25 文字) または相対的に高精細なモノクログラフィック (720×348 ピクセル) を表示します
当時の他の規格としては、CGA(Colour graphic adapter)があり、これも640×200ピクセルまでの解像度で最大16色までの色を使用することができました。その結果は次のようになります
最後に、注目すべきPCの規格として、640×350、64色までの解像度が可能な拡張グラフィックスアダプタ(EGA)がありました
(私はこれを相対的に短くするために、PC以外の標準を無視しています。もし私がAtariやAmigaの規格を追加し始めたら – 当時は4096色まで! – その時はかなり長くなるでしょう)。)
そして1987年、IBMはPS2コンピュータを発表しました。それは、マウスとキーボード用の新しいポート(それまでのマウスは25ピンのシリアルポートか、マウスを持っている場合は9ピンのシリアルポートを使用していました)、標準の3.5インチドライブ、高解像度と多色の新しいグラフィックアダプタなど、前身と比べていくつかの注目すべき違いを持っていました
このグラフィックス規格は、Video Graphics Arrayと呼ばれていました。これは、アナログ信号をモニタに転送するために3列15ピンのコネクタを使用していました。このコネクタは、それがそのようなDVIやディスプレイポートなどの優れたデジタル規格に置き換えられた数年前まで続いています
After VGA
進歩はVGA規格にとどまりませんでした。VGAの新規格が導入されて間もなく、同じコネクタを使用した800×600 S uper VGA (SVGA)のような新しい規格が生まれました。ヘラクレス、CGA、EGAなどはすべて独自のコネクタを持っていました。CGAモニターをVGAカードに接続することはできませんでした。)
それ以来、我々ははるかに高い解像度のディスプレイに移行しましたが、最も頻繁に使用される名前はVGAのままです。正しい名称はSVGA、XVGA、UXGAなどであるにもかかわらず
グラフィック提供:Wikipedia)
VGA」と呼ばれるもう一つのものは、オリジナルのVGAカードで使用されているDE15コネクタです。この通常青いコネクタは、アナログの「VGA信号」をモニターに転送する唯一の方法ではありませんが、それは最も一般的です
左:DB5HD 右。代替VGAコネクタ、通常はより良い品質のために使用されます)です
第三の方法 ‘VGA’は、そのカードがVGAとは全く異なる解像度を生成するかもしれないにもかかわらず、グラフィックスカードを説明するために使用されています。この使い方は技術的に間違っているか、少なくとも「VGA互換カード」でなければなりませんが、一般的な言葉ではそのような違いはありません
それはVGAへの書き込みを残す
これはIBM XTのメモリが分割されていたことに由来する。CPUは最大1MiB(1024KiB)のメモリにアクセスすることができます。下の512KiBはRAM、上の512KiBはアドインカードやROMなどのために確保されていた
この上の領域はVGAカードのメモリがマッピングされた場所です。ここに直接書き込むことができ、結果はディスプレイに表示されます
これはVGAだけでなく、同世代の代替品にも使われていました
G = Graphics Mode Video RAM M = Monochrome Text Mode Video RAM C = Color Text Mode Video RAM V = Video ROM BIOS (would be "a" in PS/2) a = Adapter board ROM and special-purpose RAM (free UMA space) r = Additional PS/2 Motherboard ROM BIOS (free UMA in non-PS/2 systems) R = Motherboard ROM BIOS b = IBM Cassette BASIC ROM (would be "R" in IBM compatibles) h = High Memory Area (HMA), if HIMEM.SYS is loaded. Conventional (Base) Memory: First 512KB (or 8 chunks of 64KiB). Upper Memory Area (UMA): 0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG 0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 0C0000: VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0E0000: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr 0F0000: RRRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRR
65 Hennes 2013-01-24
固定アドレス」への書き込みは、基本的にはビデオカードに直接書き込むことでした。すべてのビデオISAビデオカード(CGA、EGA、VGA)は、基本的にCPUのメモリとI/Oスペースに直接マップされたRAM(とレジスタ)を持っていました
つまり、あるメモリの場所にバイトを書き込むと、その文字(テキストモードでは)がすぐに画面に表示されるということです
特に今日のビデオカードはVGAと呼ばれることがあります(1990年代の「真の」VGAカードに似ています)ので、これは非常に混乱しているように見えます。しかし、現代のカードでさえ、これらの古いデザインの機能の一部をエミュレートしています(ほとんどの現代のPCでDOSを起動し、ビデオメモリに直接書き込むDOSプログラムを使用することができます)。もちろん、今日では、ビデオカードのファームウェアですべてエミュレートされています
10 haimg 2013-01-24
ビデオメモリのアドレスに書き込みをしている場合は、ハードウェアがビデオカードに転送します
あなた自身のオペレーティングシステムを書いている場合、あなたはおそらくあなたが望む方法でそのメモリをマップするためにグラフィックカードを取得するには、PCIバスをスキャンしてカードを見つけることから始めて、多くの作業をquteする必要があります
3 pjc50 2013-01-24
これまでの回答では、古いビデオカードは、ビデオメモリがプロセッサのアドレス空間にマッピングされていることで機能すると説明されていました。これはカード自身のメモリでした。ノースブリッジは、このマップされたメモリに対する要求をVGAデバイスにリダイレクトすることを知っています
その上に、VGA対応カードのための拡張機能や新モードが追加されました。これが、int 10h
を介して動作するVESA BIOS拡張(VBE)の作成につながった。これは、基本的な2Dアクセラレーション(BitBlt)、ハードウェアカーソル、ダブル/トリプルバッファリングなどをサポートしている。サポートされている任意の解像度(高解像度を含む)でフルカラー表示するための基本的な方式です。これは、通常はカード内部のメモリも使用し、ノースブリッジが古典的なVGAと同様にリダイレクトを実行します。これは、フルカラー/フル解像度グラフィックスを利用する最もシンプルな方法です
次に、バイオスを使わずにGPUに直接アクセスする方法ですが、これはVBEと同じ機能にアクセスすることができます。私の理解はここではかなり曖昧です。このインターフェイスはデバイス固有のものだと思いますが、私はそれを全く確信していません
次に、3D処理/GP-GPU計算などをサポートするGPUインターフェースがあります。これを完全に利用するにはメーカー提供のドライバや仕様書が必要で、同じメーカーのデバイスでも実質的な違いがあることが多い
2 Kevin Cathcart 2013-01-25