VGAとは何ですか?また、VGAとビデオカードの違いは何ですか?


30

オペレーティングシステム開発のチュートリアルでは、VGAまたはEGAまたはSuper VGAに直接書き込むことで画面データに到達することを特定していますが、表示されない固定アドレスへの書き込みと、オンボードでのビデオカードへの直接書き込みの本当の違いは何ですかまたは取り外し可能?私の問題に関するこれに対する混乱の基本的な明確化が欲しいだけです

そして、カード、接続インターフェース、バス、アーキテクチャ、システムオンチップ、組み込みシステムなどの変数のような単純なケースではないので、この100%の背後にあるアイデアを理解する方法を見つけるのは難しいと思います。固定アドレスは、ハイエンドGPUとローエンドのオンボードGPUで異なりますか?なぜですか?

カーネルをホストしてオペレーティングシステムを作成することは、プログラミングにおける私の目標の1つであり、まさに夢のようなものです。用語を理解しないと、一部の分野で私が邪魔されるだけでなく、ハードウェアのテーマについて私が愚かに見えるようになります。

追加:これらの現在の回答のいくつかは、16ビットの仕様でプロセッサの最大アドレス可能メモリを使用することについて語っています。問題はこれらの他の発生する問題のいくつかです:

1.カードのメモリはどうですか?画面データ自体にシステムRAMは必要ありません。

2.上位ビットモードではどうですか?また、リアルモード(x86)でBIOSを無視しても、ALを介してメモリをアドレス指定することはできませんか?

3.実際のマイクロプロセッサ以上のレジスタとパフォーマンスを備えたGPUでは、固定アドレスへの書き込みの概念はどのように変わりませんか?


:少し歴史的背景については、関連の質問に私の答えをチェックアウトsuperuser.com/questions/357328/...
ラッセルBorogove

ディスプレイカード技術/プロトコルに言及することに加えて、この用語は特定の電気規格とディスプレイ解像度を指定するようになったことに注意する必要があります。それも、適用されている意味を推測するのは難しいときあなたは「コンテキスト内」という用語を参照してください。
ダニエルRヒックス

回答:


65

技術的には、VGAは1987年に導入された640x480ビデオ標準であるVideo Graphics Arrayの略です。当時は、特にカラーディスプレイの場合、比較的高解像度でした。

VGAが導入された我々のようないくつかの他のグラフィックス規格であったヘラクレス(720x348ピクセルで)のいずれかのテキスト(25文字の80行)または相対高精細モノクログラフィックスを表示します。

当時の他の標準はCGA(カラーグラフィックアダプター)で、最大640x200ピクセルの解像度で最大16色を使用できました。その結果は次のようになります。

ここに画像の説明を入力してください

最後に、注目に値するPC標準はEnhanced Graphics Adapter(EGA)で、これは64色で最大640×350の解像度を可能にしました。

(この比較的短いものを維持するために、非PC標準を無視しています。AtariまたはAmiga標準を追加し始めると(最大4096色まで!)、これはかなり長くなります。)

その後、1987年にIBMはPS2コンピューターを発表しました。以前のバージョンと比較して、マウスとキーボード用の新しいポートを含むいくつかの注目すべき違いがありました(以前は、マウスがあれば、マウスは25ピンシリアルポートまたは9ピンシリアルポートを使用していました)。標準の3½インチドライブと、高解像度と多くの色の両方を備えた新しいグラフィックアダプタ。

このグラフィック標準はVideo Graphics Arrayと呼ばれていました。アナログ信号をモニターに転送するために、3列、15ピンのコネクターを使用しました。このコネクタは数年前まで存続し、DVIやディスプレイポートなどの優れたデジタル標準に置き換えられました。

VGAの後

VGA規格の進歩は止まりませんでした。VGAの導入後まもなく、同じコネクタを使用した800x600 S uper VGA(SVGA)などの新しい標準が生まれました。(Hercules、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用、上部の512KiBはアドインカード、​​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カセットベーシックROM(IBM互換機では「R」になります)
  h = HIMEM.SYSがロードされている場合、高メモリ領域(HMA)。

コンベンショナル(ベース)メモリ:   
最初の512KB(または64KiBの8つのチャンク)。 

上位メモリ領域(UMA):

0A0000:GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
0C0000:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0D0000:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0E0000:rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
0F0000:RRRRRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRR

(ASCIIマップのソース)。


1
Nitコメント:「DB15」コネクターではありません。DB15コネクタには、2列のピンしかありません(DB9およびDB25と同様)。VGAコネクタには3列のピンがあり、多くの場合「HD15」(DBと比較して高密度のHD)と呼ばれます(「HD15」は正式名称ではないと断言する人もいます)。
おがくず

2
Nitコメント#2:元のIBM PCは512/512スプリットでリリースされた可能性がありますが、すぐに640/384スプリットに変更されました(ソースページで参照されています)。グラフィックメモリは640Kマーク(16進数0A0000)から始まります。「640K境界」が最終的に有名な問題になったように、「512K境界」に本当に気付いた人はいないと思います。
ヘリオン

2
@sawdust:HD15は間違いなく正式な名前ではありません(しかし、最近のように優れています)。Dx-nnコネクタファミリー、xシェルの大きさ、nnピンの数です。シェルBは、パラレルポート(または古い、完全実装の25ピンシリアルポート)と同じサイズです。シェルEは、シリアルポートと同じサイズです。だから、技術的には、VGA 15ピンコネクタは、DE-15になりますが、これは、コネクタの元のラインアップの一部ではなかったです。知る限りでは、IBMがPS / 2 MCGA、VGAおよび8514 / aで使用するまで存在しませんでした。ウィキペディアには良い説明があります:en.wikipedia.org/wiki/D-subminiature
Alexios

3
私は解像度の最高のインフレーションが大好きです:超ワイド超拡張ハイパークワッドグラフィックスアレイ。いつかそうなることはないので、それを高解像度と呼ぶことはできません!
aidan

2
@LackingConfidenceカードが提供できるパフォーマンスが必要な場合は、個々の専用インターフェイスを使用する必要があります。パフォーマンスを気にしない場合は、VESAフレームバッファをセットアップするVGA BIOSがあります。詳細については、Linuxのvesafb.txtをご覧ください(もちろん、Linuxのソースコードも)。
デロバート

10

「固定アドレス」に書き込みをして、本質的に直接ビデオカードに書き込みます。これらすべてのビデオISAビデオカード(CGA、EGA、VGA)には、基本的にCPUメモリとI / Oスペースに直接マップされたRAM(およびレジスタ)がありました。

そのため、特定のメモリ位置にバイトを書き込むと、その文字(テキストモード)がすぐに画面に表示されます。実際には、ビデオカードにあるメモリに書き込み、ビデオカードはそのメモリを使用しただけです。

特に今日のビデオカードはVGAと呼ばれることもあり、1990年代の「真の」VGAカードに似ていることを考えると、これは今日非常に混乱しているように見えます。ただし、最新のカードでさえ、これらの古いデザインの機能の一部をエミュレートします(最新のPCでDOSを起動し、ビデオメモリに直接書き込むDOSプログラムを使用できます)。もちろん、今日ではすべてがビデオカードのファームウェアでエミュレートされています。


それでは、オンボードのビデオカードではどうでしょうか。カードがVGAの指示に従っていない場合、VGAがどのように追加されるかはまだわかりません。

1
ビデオカードが統合されている場合でも、PCIe、PCI、AGP、ISAなどのバスを介してシステムの残りの部分に接続されます。これらのバスは外部コンポーネントをマザーボードに接続し、内部コンポーネントを接続できますチップセット内(SATA、ビデオなど)
haimg

1
しかし、バスはアドレスをどうするかをどのように知るのでしょうか?これは、PCIカードとオンボードカード、GPU、または統合グラフィックマイクロプロセッサ間で異なります。

1
ワイヤがPCIコネクタに配線されているかどうか、またはすべての接続がノースブリッジ内にあるかどうかにかかわらず、まったく違いはありません。en.wikipedia.org/wiki/Conventional_PCI#PCI_address_spaces
haimg

3

実際には違いはありません。ビデオメモリのアドレスに書き込む場合、ハードウェアはそれをビデオカードにルーティングします。

独自のオペレーティングシステムを作成している場合は、PCIバスをスキャンしてカードを見つけることから始めて、グラフィックカードにメモリを希望どおりにマップさせるためにかなりの作業を行う必要があります。


グラフィックスカードはノースブリッジに搭載されており、PCI接続されていません。Intel GMAだと思います。

3
お使いのグラフィックプロセッサはPCI スロットを占有しない場合がありますが、確かにシステムのバスの1つに座っています...マザーボード上にある場合でも、システムオンチップの一部として直接統合されている場合でもです。マザーボードのSATAコントローラと同じ方法、またはUSBコントローラ、または...十分なベアボーンPCIバスを使用している場合、PCI IDとともにオンボードGPU(およびSATA、USBなどのコントローラ)が表示されます。 OSの検査ツール。Linuxでは、コマンドラインでは単に「lspci」です。Windowsの場合、Gabriel Topalaの「SIW」が好きです。Mac ...「lspci」もありますか?
FeRD

そのような場合、OSは重要ではありません。なぜなら、ハードウェアアーキテクチャとプラットフォームが重要だからです。OSはその上に構築されたばかりであり、カーネルがサービスをサポートするすべてのハードウェアと対話するための主要なエントリポイントです。アーキテクチャandnits仕様は、あなたがインターフェイスしているものです。ハードウェアを判別するには、マザーボードをオンラインで検索するだけです。それはかなり簡単なスタートです。

PCIバスをスキャンしてカードを見つけることから始めて+1。
n611x007

2

これまでの回答では、古いビデオカードは、ビデオメモリをプロセッサのアドレス空間にマップすることで機能すると説明しました。これはカード独自のメモリでした。ノースブリッジは、このマップされたメモリの要求をVGAデバイスにリダイレクトすることを知っています。

それに加えて、VGA互換カードの拡張機能と新しいモードがありました。これにより、を通じて動作するVESA BIOS拡張(VBE)が作成されint 10hます。これは、基本的な2Dアクセラレーション(BitBlt)、ハードウェアカーソル、ダブル/トリプルバッファリングなどをサポートします。これは、サポートされている解像度(高解像度を含む)でのフルカラー表示の基本的な方法です。これは通常、カード内部のメモリも使用し、ノースブリッジは従来のVGAと同様にリダイレクトを実行していました。これは、フルカラー/フル解像度のグラフィックスを利用する最も簡単な方法です。

次に、BIOSを使用せずにGPUにアクセスするいくつかの直接的な方法により、VBEと同じ機能へのアクセスを提供します。ここでの私の理解はかなり曖昧です。このインターフェイスはデバイス固有のものだと思いますが、それについてはまったくわかりません。

次に、3Dアセレーション/ GP-GPU計算などをサポートできるGPUインターフェイスがあります。これには、完全に使用するためにメーカー提供のドライバーまたは仕様が必ず必要です。


devceドライバーは、オペレーティングシステムでのみ必要です。すべてのハードウェアは、アーキテクチャ上で直接アクセスできます。

1
確かに、3D部分への直接アクセスの問題は、プロトコルの実質的な部分が主要なGPUメーカーの一部によって企業秘密と見なされるため、リバースエンジニアリングまたは非開示契約が署名されない限り、既に含まれているドライバー知識が必要だという。
ケビンキャスカート

カードに依存します。nVidiaまたはAMDの場合、独自仕様になります。オンボードのIntel GMAは、nVidia GEForceよりもはるかに簡単です。

1
問題の行を更新して、「ダイバーまたは仕様」を要求しました。仕様を入手できれば十分です。これは、最近の多くのIntelグラフィックスソリューションのケースです。
ケビンキャスカート

1
価値のあるものとして、すべての最新のIntelおよびほとんどのAMDグラフィックスカードには、プログラミング仕様の非常に大きな範囲が公開されています。Nvidiaはこの問題についてまだ沈黙していますが、Nouveauオープンソースグラフィックスドライバーには、Nvidiaグラフィックスカードのプログラミングに関する多くのドキュメント(ソースコードの形式)が含まれています。Intel / AMD / Nvidiaは、最近では独自仕様のARM ASICよりもオープンです。組み込み/モバイルチップがすべての秘密です。
-allquixotic
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.