视频图形阵列

视讯图形阵列（Video Graphics Array，缩写：VGA）是IBM的一个使用类比讯号的电脑显示标准，在1987年随IBM PS/2系列计算机推出。VGA是大多数PC制造商所遵循的最后一个IBM图形标准，几乎1990年后的所有PC图形硬件都最低支持VGA。

当用VGA来表示分辨率时，通常是指640×480。

## 颜色显示

VGA除了扩充为256色的EGA式色版外，这256种颜色是可以改变的。可以透过VGA DAC，任意的指定为任何一种颜色。这就程度上改变了原本EGA的色版规则。因为在CGA上，只有16种无法改的色彩。在EGA上虽然仍只能显示16种色彩，但这16种色彩其实是从64彩色盘中挑选出的。EGA分配给每个色频（RGB）两个位元，$2^2$=4种变化，$4^3$个色频=64种色彩。而VGA在指定色版颜色时，一个颜色频道有6个bit，红、绿、蓝各有64种不同的变化，因此总共有262,144种颜色。在这其中的任何256种颜色可以被选为色版颜色（而这256种的任何16种可以用来显示CGA模式的色彩）。

这个方法最终仍然使了VGA模式在显示EGA和CGA模式时，能够使用前所未有的色彩，因为VGA是使用模拟的方式来绘出EGA和CGA画面。提供一个色版转换的例子：要把文字模式的字元颜色设定为暗红色，暗红色就必须是CGA 16色集合中的一种颜色（譬如说，取代CGA预设的7号灰色），这个7号位置将被指定为EGA色版中的42号，然后VGA DAC将EGA #42指定为暗红色。则画面上的原本的CGA七号灰色，都会变成暗红色。这个技巧在256色的VGA DOS游戏中，常常被用来表示载入游戏的淡入淡出画面。

总结来说，CGA和EGA同时只能显示16种色彩，不过EGA有更多色盘可用。而VGA不但相容于CGA或EGA模式，更可以使用Mode 13h模式一次显示256色版中的所有色彩，而这256种颜色是从262,144种颜色（18-bit）中挑出的。

## 内存定址

VGA所使用的视讯内存，透过一个窗口对应于PC的主内存，它们的真实位址为0xA000和0xC000之间的内存。典型地来说位址的开始点是：

- 0xA000使用于EGA/VGA图型模式（4 KB）
- 0xB000单色文字模式（2 KB）
- 0xB800彩色文字模式和CGA相容模式（2 KB）

由于使用的区段皆不相同，在同一部机器上装置一个单色显卡（MDA）和另一个彩色显卡（VGA、EGA或CGA）是不冲突的。在1980年代初，这种典型的搭配方式用于Lotus 1-2-3试算表上，一部高解析单色萤幕用来显示文字，而另一部低解析的CGA萤幕用来显示图表。许多程序员也用这种配置来开发软件，一部萤幕显示debug细节，另一部萤幕则显示真正的软件运行画面。许多商业的除错软件都支援这种配置，例如Borland的Turbo Debugger、由Alan J. Cox开发的D86、微软的CodeView等，Turbo Debugger和CodeView可以甚至可拿来debug微软的Windows软件。也有DOS驱动程式如ox.sys模拟一个终端机来接受Windows的debug讯息，而不用真正接上另一个终端机。在DOS底下使用“单色模式”指令，使其输出转向单色也是可能的。另外，假如电脑上并无单色显卡，那么可以使用EMM386.EXE程序让其他程式可以使用B000-B7FF这一段内存。（于config.sys档案中加入"DEVICE=EMM386.EXE I=B000-B7FF"）

## 程序技巧

一个未被纪录但十分广泛使用的技术称作Mode X（由Michael Abrash导入），使程序员能够使用在Mode 13h之下无法做到的分辨率。他将256 KiB连续的视讯内存“解开”并分成四个层次，因此在256色模式时全部256 KiB的内存都可以使用。技术上这将使得处理变得更复杂，并且效能降低。但在一些特殊情况下，效能损失的情况可以被弥补：

- 单色的多边形填色增快，因为一次写入可以设定四个像素。
- VGA可以用来协助视讯内存之间的拷贝，有些时候会比使用8088或80286等慢速CPU更快。
- 提供更高的分辨率：16色可使用704×528、736×552、768×576、甚至800×600。诸如Xlib（1990年代早期的C图形函式库）和ColoRIX（256色的图形程式）支援256色下的各种分辨率调和：直行256、320和360个像素，以及水平行200、240、256、400和480个像素的组合（上限的640×400几乎用掉256 KiB中每一个byte）。不过，320×240仍然是最常被使用的，因它为典型的4:3比例，为方形像素。
- multiple video pages让程序员能够使用双重缓冲（所有的16色模式都可），这在Mode 13h无法办到。

有时候，显示器必须降低更新频率来满足这些模式，这会造成眼睛的疲劳这样的低分辨率虽然在PC市场早已淡出，但在Pocket PC和PDA市场，它正逐渐成为标准。它也常被用来指称15针的D型接头，这种接头仍然用来传输各式各样分辨率的类比讯号。

VGA曾经被IBM官方宣布使用XGA标准所取代，但在历史上，它其实是被其他的OEM制造商用所谓的SVGA标准所取代。

## 技术性细节

VGA中的A指的是“阵列(array)”而非“转换器(adapter)”，因为它从一开始就被设计为一个单一的整合芯片，用来取代Motorola 6845和数十个离散的逻辑芯片组合而成的ISA母版，这种设计是之前的MDA、CGA和EGA所使用的。VGA的这个特性允许它轻易的植入PC的主板之中，只需要额外的视讯内存、振荡器和一个RAMDAC，就具备显示功能。IBM PS/2电脑系列就是采用将VGA放置于主板上的设计。

VGA的规格表如下：

- 256 KiB的Video RAM
- 16色和256色模式
- 总共262,144种颜色的色版（红、绿、蓝三色各6bit，总共$(2^6)^3$种）
- 选择性的25.2 MHz或28.3 MHz处理频率
- 最多720个水平像素
- 最多480条线
- 最高70 Hz的更新频率
- Vertical Blanking interrupt（不是所有卡都支援）
- 平面模式：最多16色（4bit面板）
- Packed-pixel模式：256色(Mode 13h)
- 顺畅卷动画面的能力
- Some "Raster Ops" support
- Barrel shifter
- 支援分割画面

VGA支援可单独操控像素的APA(All Points Addressable)模式，也支援字母与数字的文字模式。标准的图形模式如下：

- 640×480×16色
- 640×350×16色
- 320×200×16色
- 320×200×256色(Mode 13h)

它也支援用模拟的方式画出向下兼容的分辨率：EGA、CGA和MDA。

## 标准文字模式

标准的VGA文字模式使用80×25或40×25个字母或数字组成的平面。每个字元的块状区域可以选择16种前景色和8种背景色；8种背景色来自bit容量较低的集合（以今天的标准来说，例如ffffff或者是000000）。而字元本身也可设定是否闪烁，而字元的闪烁动作都是同时的。画面的闪烁功能和选择背景颜色的功能是可交换的，换句话说两者只能择一。以上这些选项和IBM先前生产的CGA转换器是相同的。

VGA虽然支援黑白和彩色的文字模式，但黑白模式很少使用。大多的VGA在显示黑白模式时使用彩色模式，即是将灰色字画在黑色背景上。而使用VGA的单色显示器也能很好的支援这样的彩色模式。现代显示器和显卡若连接不当，偶尔会导致显卡的VGA部分侦测显示器为单色的，而这将使BIOS开机显示为黑白模式。通常在载入操作系统和适当的驱动程式以后，显卡的设定被覆盖，显示器就会变回彩色。

在彩色的文字模式中，每个字元其实由两个byte代表。较低的一个byte用来显示字元，而较高的byte就用来代表彩色、闪烁等等属性。这种成对的byte模式是从CGA就一直传续下来的。

## VGA色版

VGA的色彩系统可以向前相容于EGA和CGA转换器，而它在其上又新增了一种设定。CGA可以显示16种色彩，EGA则将其扩充成从64种颜色色版选出的16色模式（即红绿蓝各2 bits）。VGA则更将其扩充成256种颜色色版，但为了向前相容，一次只能选择256种之中的64种（例如第一个64种颜色集合、第二个...）。所以一个。它们也不相容于较老旧的显示器，将造成诸如overscan、闪烁、垂直滚动、缺乏水平同步等等缺点。因为如此，多数的商业软件使用的VGA调适都限制在显示器的“安全界线”之下，例如320×400（双倍分辨率，2 video pages）、320×240（方形像素，3 video pages）和360x480（最高的相容分辨率，1 video page）。