Video Graphics Array(ビデオ グラフィックス アレイ、略称:VGA)は、IBMがEGAの後継として、1987年に発表した表示回路規格である。代表的な表示モードに 640×480 ピクセル・16色がある。転じて、640×480 ピクセルの画面解像度を俗に「VGA」と呼ぶようにもなった。

## 歴史

1987年にIBMのパーソナルコンピューターであるIBM PS/2に初めて搭載された。PS/2ではマザーボード上に搭載されていたが、その後、PC/AT用にATバス用VGAカードも発売された。各社のPC/AT互換機でも、VGAおよびSVGA(VGA上位互換の表示回路規格の総称)が普及し、事実上の標準となった。

## 機能

VGAは英数テキストモードおよびAPA(All Points Addressable、全点アドレス割り当て可能)グラフィックモードをサポートする。

### グラフィックモード

標準のグラフィックモードは次の4つが存在する。このうち、640×480の縦横比は当時のテレビの縦横比に近く、マルチメディアを想定した設計と言われている。

- 640×480ドット、16色またはモノクロ。(後者はIBM MCGA規格と同等。)
- 640×350または640×200ドット16色またはモノクロ(EGA互換モード)
- 320×200ドット、4色または16色
- 320×200ドット、256色(モード13h)

640×480ドット16色および320×200ドット256色モードは完全に再定義可能なパレットを持ち、それぞれ18ビット(262,144色)のRGBテーブルから色を選択する。もっとも、高解像度モードはMicrosoft Windows上の固定パレットでの使用をきっかけに一般化した。他のカラーモードはEGAまたはCGA互換のパレット(プログラム用に64色テーブルから16色EGAパレットを再定義する機能を含む)に準じるが、VGA特有のプログラム手法を用いることで再定義することも可能である。

今日ではCGA/EGAとの互換機能は忘れ去られ、変換アダプタが用途不明の商品として出回っていたこともある。
なお、規格制定者の意図は不明だが9ピンのVGA端子とCGA/EGAはピンアサインが異なり変換アダプタも相互利用は出来ない。

### テキストモード

- 80字×25行、9×16ドットフォント、有効解像度は720×400ドット、16色またはモノクロ。後者は旧来のMDAベースのアプリケーションと互換性がある。
- 40字×25行、同じフォントサイズを持ち、有効解像度は360×400ドット。
- 80字×43行、80字×50行(8×8ドットフォント)16色、有効解像度は640×344(EGA互換)または640×400ドット。

この他にも画面解像度や画面モードをカスタマイズすることで様々な表示モードの画面信号を生成できる。

## 技術詳細

### 回路設計

VGAの"A"は従来の"adapter"に代わって"array"を指しており、初めからシングルチップ(ASIC)として実装された。これはMotorola 6845ビデオアドレス発生器だけでなくMDA、CGAおよびEGAのフルサイズISAボードの機能をカバーするいくつものディスクリート論理チップを置き換えるものであった。このシングルチップ実装によってVGA機能は、ビデオメモリ、タイミング発生器(クロック発振器)、外部RAMDACだけ用意すれば、PC本体のマザーボードに最小限の労力で搭載することができ、部品点数が減ったことで信頼性も向上した。その結果、最初のIBM PS/2モデルはマザーボード上にVGAが搭載された。これは、全てのIBM PCデスクトップモデル(PC、PC/XT、PC/AT)がモニターに接続するためにディスプレイアダプターをスロットに装着する必要があったことに比べると、対照的であった。

### 仕様

オリジナルのVGAの仕様は次の通りである。

- 256KBのビデオメモリ(初期のVGAカードは64KB、128KBのRAMを搭載し、いくつか、または全ての高解像度16色モードが省略された。)
- 16色および256色パレットの表示モード
- 262,144色グローバルパレット(赤・緑・青各色が6ビット・64階層のRAMDACを使用)
- 25.175MHzまたは28.322MHzから選択可能なマスターピクセルクロック
- 通常の水平同期周波数は31.469kHz固定
- 最大800水平ピクセル
- 最大600垂直ライン
- 最高70Hzのリフレッシュレート(垂直同期)
- 垂直ブランク割り込み(全ての互換カードがサポートしているわけではない。)
- プレーンモード、最高16色(4ビットプレーン)
- パックドピクセルモード、256色(モード13h)
- ハードウェアスムーススクロールサポート
- ハードウェアスプライトは非搭載
- ブリッターは非搭載だが、VGAラッチレジスタによる高速データ転送をサポート
- いくつかの"Raster Ops"をサポート
- バレルシフタをサポート
- 分割画面をサポート
- 0.7Vピーク電圧幅
- 75Ω二重終端インピーダンス

標準モードと同様に、VGAはそれまでのEGA、CGA、MDAの様々なモードをエミュレートするよう設定することができる。互換性はBIOSレベルで完全に持っているが、レジスタレベルでもなお高い互換性を持っている。VGAはIBM PCjrまたはHerculesの特殊な表示モードとは(解像度・色・リフレッシュレート・メモリが十分であっても)直接の互換性はなく、これらのモードのエミュレーションはソフトウェアによって代替された。

### 信号タイミング

VGAの水平同期周波数の標準値はNTSC-M表示システムで使われている数値のちょうど2倍である。これはVGAの開発時点ではオプションのテレビ出力機構やVGA-TV変換ボックスの提供を容易にする意図があった。VGA水平同期周波数の公式は (60 ÷ 1001) × 525 kHz = 4500 ÷ 143 kHz ≈ 31.4685 kHz。VGAカードで使われる全ての他の周波数はこの値の整数倍または分周数で供給される。水晶振動子の精度の限界により、実際のカードはこれより若干高く、あるいは低くなる。

全てのVGA供給タイミング(つまり、25.2MHzまたは28.3MHzのマスタクロックと31.5kHzの水平レートを使用するもの)はVGAファームウェアインターフェースを介さずにVGAハードウェアに直接アクセスすることで、ソフトウェアによって幅広く変化させることができた。多くのMS-DOSベースのゲームソフトがこれを行っていた。しかし、標準モードのみ、または最低でも標準モードの一つと同じ水平同期・垂直同期タイミングを使用しているモードのみが、1980年代後期から1990年代前期のオリジナルのVGAモニターで動作すると保証されていた。他のタイミングを使用すると、そのモニターに損傷を与える恐れがあり、故に基本的にソフトウェアメーカーはこれを避けていた。後のマルチシンクCRTモニターはより柔軟で、SVGAグラフィックカードとの組み合わせによって、完全に任意の同期周波数とピクセルクロック周波数でより幅広い解像度やリフレッシュレートを表示することができた。

最も一般的なVGAモード(640x480ドット、60Hzノンインターレース)について、水平同期タイミングは次のようになっている。

水平同期と空白時間の合計 = 6.356us、A=16、B=96、C=48、D=640で、1ライン=800ピクセル。

この画像に示されている図は正確ではなく、上の表とは完全には一致しない。

これらのタイミングは高周波数モードでも同じだが、全てのピクセルは9/8倍になる。つまり、アクティブ720ピクセル、1ラインあたり900ピクセル、バックポーチ54ピクセル。

垂直同期と空白時間の合計は1.43ms、A=10、B=2、C=33、D=480で、1フレーム=525ライン。

### コネクタ

VGAはDE-15コネクタを使用している。

VGA機器と接続する別の方法として、信号品質を維持できるBNCコネクタがある。これは赤、緑、青、水平同期、垂直同期の5本のケーブルをセットにして使う。BNCでは信号線が端から端まで完全にシールドされた状態になるので、クロストークや外部ノイズの影響を受けにくい。

しかしながら、BNCコネクタはDE-15コネクタに比べると場所を取ってしまう。また、各ケーブルのコネクタを正しいソケットに接続するように注意しなければならない。BNCコネクタではVESA DDCがサポートされないため、オペレーティングシステム側でモニターの情報を得ることができない。従って、ユーザーはモニターがサポートする画面モードを把握した上で、オペレーティングシステムに適切な設定を施す必要がある。

BNCコネクタがVESA DDCに対応出来ない問題を解決するため、カナレ電気など各社から変換ケーブルに専用のコネクタを設けて対応しているほか、EDIDエミュレータという機器を使うことで疑似的にVESA DDCと同じ信号を生成することで対処する。

### アドレス割り当ての詳細

VGAのビデオメモリはPCのリアルモードアドレス空間のセグメント0xA0000 - 0xBFFFF(セグメント:オフセット表記でA000:0000 - B000:FFFF)間の範囲にウィンドウとして割り当てられる。一般的に、これらの開始セグメントは次のようになっている。

- 0xA0000 - EGA/VGAグラフィックモード(64KB)
- 0xB0000 - モノクロテキストモード(32KB)
- 0xB8000 - カラーテキストモードおよびCGA互換グラフィックモード(32KB)

各モードで異なるアドレス割り当てを使用しているため、同じシステムに装着したモノクロアダプター(MDAまたはHercules)およびVGA、EGA、CGAカラーアダプターは共存できた。1980年代初めは、これはモノクロディスプレイで高解像度テキストにLotus 1-2-3シートを表示すると同時に低解像度CGAディスプレイ上に関連するグラフィックを表示するために使われた。多くのプログラマーは、他のカードのグラフィックモードでプログラムを動かしている間、モノクロカードでデバッグ情報を表示させるといった構成を利用することもあった。ボーランドのTurbo Debugger、D86、およびマイクロソフトのCodeViewといったデバッガはデュアルモニター構成で動作させることができた。Turbo DebuggerまたはCodeViewはWindowsのデバッグにも使われていた。それらにはWindowsをデバッグするために使うox.sys(モノクロディスプレイ上のシリアルインターフェースシミュレーション機能を実装している)というDOSデバイスドライバが存在し、実際の端末を使わずともデバッグ版Windowsからクラッシュメッセージを受け取ることができた。また、DOSプロンプトで「MODE MONO」コマンドを使うと出力をモノクロディスプレイにリダイレクトすることができた。モノクロアダプターが使われていないとき、0xB000-0xB7FFアドレス空間は他のプログラム用の追加メモリとして使うことができた。(例えば、CONFIG.SYSに`DEVICE=EMM386.EXE I=B000-B7FF`を加えると、プログラムはこのメモリをアッパーメモリブロックとして使用することができた。)

## 影響

### 世界

当時のPC/ATおよびPC/AT互換機では、CADやLotus 1-2-3などの表計算など、高解像度が必要とされる用途のために、IBM自身の8514/Aの他、EGAに独自の画面モードを追加した各種グラフィックチップや、EGAと共存できる高解像度グラフィックチップ(Herculesなど)が発売されていた。これらは独自の画面モード間の互換性は無く、それぞれ専用の(DOSまたはWindowsの)ドライバが必要だった。

VGAの登場により、VGA互換およびVGA上位互換のグラフィックチップ (Super VGA、SVGAとも言う) が普及し、VGAはPC/AT互換機での事実上の業界標準となった。

このため、各種のOSでもVGAを最小要件としたものが多い。また、表示関連の問題が発生した場合でもメーカーや機種を問わず表示できる共通画面モードのため、インストール時や非常用の画面で使われている。

PC/AT互換機用のWindowsをセーフモードやVGAモードで起動すると、VGAの640×480ピクセル 16色画面モードで表示が行われる。

しかしディスプレイの高精細化が進んだこともあり、Windows XP以上はSVGAにより表示される。パソコン用ディスプレイとしては最低1024×768ピクセル、いわゆるXGA相当の画面解像度が、最低ラインとして一般化した。PDAのような小型の端末にもVGAと同等の画素数を搭載する例が見られる。携帯電話端末ではSoftBank 904SHを皮切りとして、高級機種を中心に高精細な液晶ディスプレイが搭載されている。

### 日本

日本ではDOS/Vの登場まではPC/AT互換機自体が普及しておらず、VGAもDOS/Vと共に普及した。なお「DOS/V」の「V」は「VGA」から来ている。

日本語をグラフィック表示するDOS/Vや、日本語Windowsの標準機能では、VGAの640×480ピクセル 1677万7216色中16色の表示モードを利用している。

この際に「PC-9800シリーズなどの大半は640×400ピクセルだが、DOS/Vは640×480なので、DOS画面では行間が開き、Windows上でも画面が広い」という比較が盛んに行われた。また、日本では最初からVGAが普及したため、DOS/V登場以前よりAT互換機に触っていたユーザーを除けば、VGAが下位の各種の画面モードを持っている事は余り知られていない。

東芝のJ-3100・ダイナブックや、AX協議会の各社AXパソコン(JEGAボードを搭載)は、当初はEGAをベースに独自に日本語化していたが、後にVGAを採用し、更にPC/AT互換機に移行した。

## 一般化した誤用

転じて、画面解像度として640×480ピクセル表示のことをVGAと言うようになった。これは、誤用が一般化したものである。

例えば、日本電気 (NEC) のPC-9821シリーズや富士通のFM TOWNSも、640×480ピクセルの解像度のモードを持っていたが、これらは別規格であり、「VGA」とは言わない。

また本来のVGAでは640×480画素での表示色数は16色のため、「640×480 256色」などは「VGA互換画面モード」と呼ぶのも正確ではなく、単に「VGAと同じ解像度」「VGA互換画素数表示」などと呼ぶのが妥当である。

ビデオカード一般を「VGAカード」と称するなど、コンピューターの画面出力=VGAという誤用も散見される。VGAはあくまで、複数の画面モードを持っている、特定の画面表示規格であり、「VGAカード」という語は(本来であれば)その規格に沿っており、それらの画面モード(のみ)を持つビデオカード、を特に指して使われるべきである。