VGAについて

VGAとは、1987年にIBMのIBM PS/2のビデオとして採用された、画面表示の規格です(VGAはVideo Graphics Arrayの省略となります。)。

VGAを使用することでディスプレイに画像または文字を描画することができます。

IBMが1987年に開発したEGAの後継規格で、1987年にIBMのパソコンであるIBM PS/2に初めて搭載されました。PS/2ではマザーボード上にありましたが、その後PC/AT用にVGAカードも発売されました。各社のPC/AT互換機でも採用されデファクトスタンダードとなった規格となります。

VGA以前にはISA基板のMDA、CGA、EGAがありました。

現在のグラフィックカードにもVGA規格互換のモードがありますので、現在のパソコンでVGAを制御することも可能です。

VGAの概要

VGAでは次の解像度・色数で画像や文字を描画することができます。

ビデオメモリー

VGAのビデオメモリーは64KBのメモリーが4つあり、合計256KBの容量となります。

解像度

320×200から720×400までとなります。
(使用するディスプレイやVGAの設定により異なります)。

色数

2色(モノクロ)から最大256色まで同時に表示できます。
また、VGAにはテキストモードとグラフィックモードがあります。

テキストモード

ビデオメモリーに対応したシステムメモリーにアスキーコードを書き込むとアスキーコードに対応した文字を描画するモードとなります。文字の描画に特化したモードとなりますので、グラフィックモードと比べて高速です。

グラフィックモード

画面上に自由に画像を描画することができるモードです。システムメモリーに色データを書き込むと対応するディスプレイ座標上に描画されます。基本的にゲームなどはこのモードで描画します。

そして、VGAにはディスプレイに描画するために次のようなコントローラーがあります。

  • CRTコントローラー
  • シーケンサー
  • グラフィックコントローラー
  • アトリビュートコントローラー
  • ビデオDAC(Digital to Analog Convertor)

VGAでは上記のコントローラーを動かすことでディスプレイに表示を行います。

構成についてはTipsのVGAその1 に詳細を載せております。

各コントローラーの役割は次のようになります。

CRTコントローラー

CRTとは CRTコントローラーはビデオ描画に関する様々なタイミングを生成する役割を担っています。

例えば、テキストモードで点滅表示をさせてたいときにはCRTコントローラーの設定を変えると文字を表示したり、消したりする時間を計ります(正確に言うと垂直同期クロックを分周します)。また、グラフィックカード関連で水平同期信号、垂直同期信号という言葉を見たことがあるかと思いますが、この信号を生成するのもCRTコントローラーとなります。

シーケンサー

VGAのグラフィックカードには64KBのRAMが4つあり合計256KBのビデオメモリーが載っています。CPUが普段使用しているシステムのメモリーとは別にグラフィックカードのメモリーとなりますので、CPUからは直接ビデオメモリーに書き込みまたは読み込みを行うことができません。(回路的に)。

そこで、CPUとビデオメモリーの間でデータのやり取りを取り持つ役割をシーケンサーが担当します。


CPUがビデオメモリーに書き込みたい値を対応するシステムのメモリーに書き込むとシーケンサーがシステムメモリーから値を読み出し対応するビデオメモリーに書き込みを行います。また、CPUがビデオメモリーの内容を読み出すときには、シーケンサーがビデオメモリーからデータを読み出し、システムメモリーに書き込みを行います。

基本的にシステムメモリーの0x000B8000または0x000A0000に対してリード/ライトをすることでビデオメモリーの読み書きができます。

グラフィックコントローラー

グラフィックコントローラーは描画処理に関係する演算を主に担当します。

例えば現在使用しているグラフィックカードでは、ポリゴンなどの3D描画の演算をグラフィックコントローラーが行います。3Dの演算をCPUで処理することももちろんできますが、専用のハードウェアで処理を行った方が処理速度は速くなります。

(ハードウェアで演算機能を実装すると一般的に値段が高くなりますが、処理速度は原則的にハードウェアで行う方が速くなります。そして、コントローラーに処理をまかせることでCPUは別の処理を行うことができます。VGA規格内で言えば昔のグラフィックカードは逆に遅い例があるようです)。VGAでは3D描画専用の回路はありません。

ここでは身近な説明としてとりあげただけとなりますのであしからず。

また、テキストモード、グラフィックモードの切り替え設定などもここで行います。

アトリビュートコントローラー

アトリビュートコントローラーは基本的に色の管理を担当するコントローラーとなります。

DACに格納されているパレットの選択や、テキストモード時の文字を点滅設定などを行います。16色までのモードでは、ビデオDACに格納されている”パレット(色)”のなかでどの”パレット”を使用するのかを指定する16個のパレットレジスターを持っています。

ビデオDAC

DACとはDigital to Analog Converterの略で、デジタルデータをアナログ信号に変換する回路です。

VGAでは、CPUが指定した画像データ(色情報)をアナログRGB信号(R:赤色、G:緑色、B:青色の光の3原色)に変換します。ビデオDACでは、6ビットのDACとなりますので、Rが6ビット、Gが6ビット、Bが6ビットの合計18ビットの色情報を”パレット”データとして持っています。18ビットの色情報ですので表現できる色数は262144色となりますが、一度にこれだけの色を同時に表示することはできません。ビデオDACは”パレット”上の色だけを画面に表示することができます。

”パレット”は絵を描くときに使うパレットと概念的には同じで描きたい絵の色を赤色パレットに赤色絵具、緑色絵具、青色絵具を出して好きな色を作ります。(但し光の3原色です)。作った色はパレットにありますが、合計256個までしかパレットはありませんので注意してください。同時に画面に表示できるのはパレットの個数で決まりますので、最大で256色まで同時描画できることになります。

ビデオモード

VGAで使用するビデオモードは次のモードとなります。このモードは基本的にBIOSのビデオサービス ビデオモード設定 でモードを設定することができますが、VGAのレジスターを直接設定することでもモードを切り替えることができます。このサイトではBIOSを使わずにVGAを制御します。また、直接VGAを制御することで下記ビデオモード以外のパラメーターの設定も可能です。

BIOSビデオモード
モード
HEX
Type 色数 文字表示数 VRAM開始アドレス ボックスサイズ 最大ページ 周波数 解像度
0, 1 テキスト 16 40×25 0x000B8000 8 x 8 8 70Hz 320×200
0*, 1* テキスト 16 40×25 0x000B8000 8 x14 8 70Hz 320×350
0+, 1+ テキスト 16 40×25 0x000B8000 9 x16 8 70Hz 360×400
2, 3 テキスト 16 80×25 0x000B8000 8 x 8 8 70Hz 640×200
2*, 3* テキスト 16 80×25 0x000B8000 8 x14 8 70Hz 640×350
2+, 3+ テキスト 16 80×25 0x000B8000 9 x16 8 70Hz 720×400
4, 5 グラフィック 4 40×25 0x000B8000 8 x 8 1 70Hz 320×200
6 グラフィック 2 80×25 0x000B8000 8 x 8 1 70Hz 640×200
7 テキスト 80×25 0x000B0000 9 x14 8 70Hz 720×350
7+ テキスト 80×25 0x000B0000 9 x16 8 70Hz 720×400
D グラフィック 16 40×25 0x000A0000 8 x 8 8 70Hz 320×200
E グラフィック 16 80×25 0x000A0000 8 x 8 4 70Hz 640×200
F グラフィック 80×25 0x000A0000 8 x14 2 70Hz 640×350
10 グラフィック 16 80×25 0x000A0000 8 x14 2 70Hz 640×350
11 グラフィック 2 80×30 0x000A0000 8 x16 1 70Hz 640×480
12 グラフィック 16 80×30 0x000A0000 8 x16 1 70Hz 640×480
13 グラフィック 256 40×25 0x000A0000 8 x 8 1 70Hz 320×200