Vga

**視訊圖形陣列**（英語：**V**ideo **G**raphics **A**rray，縮寫：**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）。

## 參考文獻

## 延伸閱讀

* J. D. Neal. VGA Chipset Reference. Hardware Level VGA and SVGA Video Programming Information Page. 1997 [2007-06-27]. （原始內容存檔於 2013-06-27）.
* Jordan Brown and John Kingman. CHRP™ VGA Display Device Binding to IEEE 1275-1994 Standard for Boot（Initialization, Configuration）Firmware. 1.0. 1996-05-06 [2007-06-27]. （原始內容存檔於 2006-09-09）.