Video Graphics Array


Video Graphics Array is a graphics standard for video display controllers first introduced with the IBM PS/2 line of computers in 1987, following CGA and EGA introduced in earlier IBM personal computers. Through widespread adoption, the term has also come to mean either an analog computer display standard, the 15-pin D-subminiature VGA connector, or the 640×480 resolution characteristic of the VGA hardware.
VGA was the last IBM graphics standard to which the majority of PC clone manufacturers conformed, making it the lowest common denominator that virtually all post-1990 PC graphics hardware can be expected to implement. It was officially followed by IBM's Extended Graphics Array standard but instead was effectively superseded by numerous slightly different extensions to VGA made by clone manufacturers, collectively known as Super VGA.
Today, the VGA analog interface is used for high-definition video, including resolutions of 1080p and higher. While the transmission bandwidth of VGA is high enough to support even higher resolution playback, there can be picture quality degradation depending on cable quality and length. How discernible this degradation is depends on the individual's eyesight and the display, though it is more noticeable when switching to and from digital inputs like HDMI, DVI or DisplayPort.

Output capabilities

The VGA supports both All Points Addressable graphics modes and alphanumeric text modes.

Standard graphics modes

Standard graphics modes are:
The 640×480 16-color and 320×200 256-color modes had fully redefinable palettes, with each entry selectable from within an 18-bit RGB table, although the high resolution mode is most commonly familiar from its use with a fixed palette under Microsoft Windows. The other color modes defaulted to standard EGA or CGA compatible palettes, but could still be redefined if desired using VGA-specific programming.

Higher-resolution and other display modes

Higher-resolution and other display modes are also achievable, even with standard cards and most standard monitorson the whole, a typical VGA system can produce displays with any combination of:
with heights of:
For example, high resolution modes with square pixels are available at 768×576 or 704×528 in 16 colors, or medium-low resolution at 320×240 with 256 colors; alternatively, extended resolution is available with "fat" pixels and 256 colors using, e.g. 400×600 or 360×480, and "thin" pixels, 16 colors and the 70 Hz refresh rate with e.g. 736×410 mode.
"Narrow" modes such as 256×224 tend to preserve the same pixel ratio as in e.g. 320×240 mode unless the monitor is adjusted to stretch the image out to fill the screen, as they are derived simply by masking down the wider mode instead of altering pixel or line timings, but can be useful for reducing memory requirements and pixel addressing calculations for arcade game conversions or console emulators.

Standard text modes

Standard text modes:
As with the pixel-based graphics modes, additional text modes are technically possible with an overall maximum of about 100×80 cells and an active area spanning about 88×64 cells, but these are rarely used as it usually makes much more sense to just use a graphics modewith a small, perhaps proportional fontif a larger text display is required. One variant that is sometimes seen is 80×30 or 80×60, using an 8×16 or 8×8 font and an effective 640×480 pixel display, which trades use of the more flickery 60 Hz mode for an additional 5 or 10 lines of text and square character blocks.

Technical details

Circuitry design

VGA is referred to as an "Array" instead of an "adapter" because it was implemented from the start as a single chipan application-specific integrated circuit which replaced both the Motorola 6845 video address generator and the dozens of discrete logic chips that covered the full-length ISA boards of the MDA and CGA. More directly, it replaced the five custom LSIs and many discrete logic chips on the EGA board. Its single-chip implementation allowed the VGA to be placed directly on a PC′s motherboard with a minimum of difficulty, which in turn increased the reliability of the video subsystem by reducing the number of component connections, since the VGA required only video memory, timing crystals and an external RAMDAC. As a result, the first IBM PS/2 models were equipped with VGA on the motherboard, in contrast to all of the "family one" IBM PC desktop modelsthe PC, PC/XT, and PC ATwhich required a display adapter installed in a slot in order to connect a monitor.

Specifications

The original VGA specifications are as follows :
As well as the standard modes, VGA can be configured to emulate many of the modes of its predecessors, including their reduced global color palettes and coarser text font grids. Compatibility is almost full at BIOS level, but even at register level, a very high value of compatibility is reached. VGA is not directly compatible with the special IBM PCjr or HGC video modes, despite having sufficient resolution, color, refresh rate and memory capabilities; any emulation of these modes has to be performed in software instead.

Signal timings

The intended standard value for the horizontal frequency of VGA is exactly double the value used in the NTSC-M video system, as this made it much easier to offer optional TV-out solutions or external VGA-to-TV converter boxes at the time of VGA's development; it is also at least nominally twice that of CGA, which itself used broadcast-frequency monitors, essentially tunerless televisions with more direct signal inputs. The formula for the VGA horizontal frequency is thus × 525 kHz = 4500 ÷ 143 kHz ≈ 31.4685 kHz, obtained in practice by the method common to all raster-based computer graphics of using a particular crystal oscillator or PLL frequency for the pixel clock and deriving all other horizontal and vertical frequencies by integer division. In this case, a 25.175 MHz or 28.322 MHz pixel clock, counting 800 or 900 pixels per line, arriving at 31.46875 or 31.46889 kHz ; the tiny mismatch is easily accounted for by, and is well within the limits of the retrace synchronisation system. In fact, CGA itself was further adrift, and the limited precision of quartz oscillators - and their tendency to drift slightly with temperature and supply voltage - means real cards will have slightly higher or lower frequencies whose variance vs the nominal figures can easily exceed the inherent mismatch.
All derived VGA timings can be varied widely by software that bypasses the VGA firmware interface and communicates directly with the VGA hardware, as many MS-DOS based games did. However, only the standard modes, or modes that at least use almost exactly the same H-sync and V-sync timings as one of the standard modes, can be expected to work with the original late-1980s and early-1990s VGA monitors. The use of other timings may in fact damage such monitors and thus was usually avoided by software publishers. Third-party "multisync" CRT monitors were usually much more flexible, and in combination with "super EGA", VGA, and later SVGA graphics cards using extended modes, could display a much wider range of resolutions and refresh rates at wholly arbitrary sync frequencies and pixel clock rates, commonly reaching 640x400 to 720x480, 752x410, 800x560 and 800x600 as standard or near-standard settings.
For the most common VGA mode, the horizontal timings are:
NB. The same general layout applies, merely at a lower frequency, for the vertical timings.
These timings are the same in the higher frequency mode, but all pixel counts are correspondingly multiplied by 9/8thsthus, 720 active pixels, 900 total per line, and a 54 pixel back porch.
The vertical timings are:
ParameterValueValueUnit
Vertical lines visible480400
Vertical lines total525449
Vertical sync polaritynegative?-
Vertical frequency59.9470.09Hz
Total time for each frame16.68314.400ms
Front porch 0.318?ms
Sync pulse length 0.064?ms
Back porch 1.048?ms
Active video 15.25312.588ms

These timings are somewhat altered in "70Hz" mode, as although it uses the same line rate, its frame rate is not quite exactly 7/6ths that of "60 Hz", despite 525 dividing cleanly into 7and, of course, 480/400 is itself a larger 6:5 ratio. Instead, it compromises on a 449-line frame, with the back porch extended to 34 lines, and the front porch to 13, with an unaltered 2-line sync pulseand the active image taking up 89% of the total scan period rather than 91%. The monitor is triggered into synchronising at the higher frame scan rate by use of a positive-polarity VSync pulse, versus the negative pulse of 60 Hz mode.
Depending on manufacturer, the exact details of active period and front/back porch widths, particularly in the horizontal domain, may vary slightly. This does not usually cause a problem as the porches are merely intended to act as blanked-video buffers offering a little overscan space between the active area and the sync pulse and thus can be safely overrun into by a certain amount when everything else is operating correctly. The relationship between the front and back porches can also be altered within certain limits, which makes possible special features such as software-based image alignment with certain graphics cards.
This buffer zone is typically what is exploited to achieve higher active resolutions in the various custom screen modes, by deliberately reducing porch widths and using the freed-up scan time for active pixels instead. This technique can achieve an absolute maximum of 704 pixels horizontally in 25 MHz mode and 792 at 28 MHz without altering the actual sync width, and as much as 523 or 447 lines at the standard 60 and 70 Hz refresh rates. Conveniently, the practical limits of these techniques are not quite high enough to overflow the available memory capacity of typical 256 KB cards, so the only concerns remain those of monitor compatibility.

Typical uses of selected modes

640×400 @ 70 Hz is traditionally the video mode used for booting those VGA-compatible x86 personal computers that show a graphical boot screen. This convention has been eroded in recent years, however, with POST and BIOS screens moving to higher, and often automatically adapted resolutions dependent on the connected monitor, taking advantage of EDID data and vector or other resizable graphics, along with use of PS/2 or USB mouse detection instead of relying on keyboard alone, to provide a visual experience much closer to that of a fully booted operating system. Should the detection fail, however, or the user cancel the high-quality graphics, the old standard mode is generally reasserted.
640×480 @ 60 Hz is the default Windows graphics mode, up to Windows 2000. It remains an option in XP and later versions via the boot menu "low resolution video" option and per-application compatibility mode settings, despite Windows now defaulting to 1024x768 and generally not allowing any resolution below 800x600 to be set. The need for such a low-quality, universally compatible fallback has diminished since the turn of the millennium, as VGA-signalling-standard screens or adaptors unable to show anything beyond the original resolutions have become increasingly rare, and are now most likely to be employed for specialist uses by enthusiasts - for example, arcade cabinet gaming PC conversions, or driving pico-projectors from wearable computers - instead of blithely connected up as a main desktop display by an unsuspecting casual user; however, as it retains such niche utility, the ability to deliberately set it, nowadays as a special rather than default mode, has been preserved.
320×200 @ 70 Hz is the most common mode for VGA-era PC games, using exactly the same timings as the 640×400 mode, but halving the pixel rate and displaying each line of pixels twice.
The actual timings vary slightly from the defined standard. For example, for 640×480 @ 60 Hz, a 25.17 µs active video time with a pixel frequency of 25.175 MHz gives 634 pixels, rather than the expected 640. Given the similarity of the frequency and line length, this may be due to typographical errors that were never detected or corrected; at the standard clock, the correct nominal active period should instead be 25.422µs. Otherwise, if the spec were true, that would imply a faster 39.328ns / 25.427 MHz dot clock. Further examination of the other timing details may better reveal where and how the discrepancy was introduced, as the master clock and fundamental dividers are well known and provide an easy reference to compare any other claim against.

Connectors

VGA uses a DE-HD15 connector. This connector fits on the mounting tab of an ISA expansion card.
An alternative method of connecting VGA devices that maintains very high signal quality even over extended cable runs is the BNC connector, typically used as a group of five connectors, one each for Red, Green, Blue, Horizontal Sync, and Vertical Sync. With BNC, the coaxial wires are fully shielded end-to-end and through the interconnect so that no crosstalk or external interference is possible, easily doubling standard VGA's maximum reliable distance of 15 metres, and reaching 40–50 metres with the aid of nothing more than a simple signal booster.
However, BNC connectors are relatively large compared to the 15-pin D-shell, and some attention is needed - vs the insertion of that single plug - to ensure each cable goes to the correct socket; although the core RGB lines are coloured appropriately, the sync wires can be various arbitrary colours and although standards do exist for these it is often unclear which is the correct arrangement at the point of connection and it can become a process of elimination. Additionally, extra lines such as +5V DC and DDC / DDC2 signals are not supported using BNC connectors.
Beyond around 50 metres, or 30 metres without any active amplification, cable capacitance can become a problem for the analogue signals, noticeably reducing horizontal image resolution and causing poor sync. In these cases, other methods such as using "SPI" digital codecs connected by shielded CAT5 network-grade cable, or even framegrabbing plus TCP/IP networking are employed to transmit the image long-distance, even though it may still travel the first and last few tens of centimetres as analogue VGA, or any of a variety of other standards that the codecs may support.

Standard text modes

The BIOS offers some text modes for a VGA adapter, which have 80×25, 40×25, 80×43 or 80×50 text grid. Each cell may choose from one of [|16 available colors] for its foreground and eight colors for the background; the eight background colors allowed are the ones without the high-intensity bit set. Each character may also be made to blink; all that are set to blink will blink in unison. The blinking option for the entire screen can be exchanged for the ability to use all 16 colors for background. All of these options are the same as those on the CGA adapter as introduced by IBM.
Like EGA, VGA supports having up to 512 different simultaneous characters on screen, albeit in only 8 foreground colors, by rededicating one color bit as the highest bit of the character number. The glyphs on 80×25 mode are normally made of 9×16 pixels. Users may define their own character set by loading a custom font onto the card. As character data is only eight bits wide on VGA, just as on all of its predecessors, there is usually a blank pixel column between any two horizontally adjacent glyphs. However, some characters are normally made nine bits wide by repeating their last column instead of inserting a blank column, especially those defining horizontally connected IBM box-drawing characters. This functionality is hard-wired to the character numbers C0hex to DFhex, where all horizontally connecting characters are found in code page 437 and its most common derivatives. The same column-repeating trick was already used on the older MDA hardware with its 9×14 pixel glyphs, but on VGA it can be turned off when loading a font in which those character numbers do not represent box drawing characters.

Monochrome modes

VGA adapters usually support both monochrome and color modes, though the monochrome mode is almost never used, and support for the full set of MDA text mode attributes is often missing. Black and white text on nearly all modern VGA adapters is drawn by using gray colored text on a black background in color mode. VGA monochrome monitors intended primarily for text were sold, but most of them will work at least adequately with a VGA adapter in color mode. Occasionally, a faulty connection between a modern monitor and video card will cause the VGA part of the card to detect the monitor as monochrome; this will cause the BIOS and initial boot sequence to appear in greyscale. Usually, once the video card's drivers are loaded, they will override this detection and the monitor will return to color.

Addressing details

The video memory of the VGA is mapped to the PC's memory via a window in the range between segments 0xA0000 and 0xBFFFF in the PC's real mode address space. Typically, these starting segments are:
Due to the use of different address mappings for different modes, it is possible to have a monochrome adapter and a color adapter such as the VGA, EGA, or CGA installed in the same machine. At the beginning of the 1980s, this was typically used to display Lotus 1-2-3 spreadsheets in high-resolution text on a monochrome display and associated graphics on a low-resolution CGA display simultaneously. Many programmers also used such a setup with the monochrome card displaying debugging information while a program ran in graphics mode on the other card. Several debuggers, like Borland's Turbo Debugger, D86 and Microsoft's CodeView could work in a dual monitor setup. Either Turbo Debugger or CodeView could be used to debug Windows. There were also DOS device drivers such as ox.sys, which implemented a serial interface simulation on the monochrome display and, for example, allowed the user to receive crash messages from debugging versions of Windows without using an actual serial terminal. It is also possible to use the "MODE MONO" command at the DOS prompt to redirect the output to the monochrome display. When a monochrome adapter was not present, it was possible to use the 0xB000–0xB7FF address space as additional memory for other programs

Color palette

The VGA color system is backward compatible with the EGA and CGA adapters, and adds another level of indirection to support 256 8-bit-colors.
CGA was able to display 16 fixed colors, and EGA extended this by using 16 palette registers, each containing a color value from a 64-color palette. The default EGA palette values were chosen to look like the CGA colors, but it's possible to remap each color. The signals from the EGA palette entries will drive a set of six signal lines on the EGA output, with two lines corresponding to one color.
VGA further extends this scheme by adding 256 color registers, 3×6 bit each for a total of 262,144 colors to choose from. These color registers are by default set to match the 64 default EGA colors. The values from these registers drive a DAC, which in turn drives three signal lines, one for red, green and blue.
Like EGA uses the CGA color value to address a palette entry, the VGA hardware will also use the palette entries not directly as signal levels but as indexes to the color registers. Therefore, in the 16-color modes, the color value from the RAM will reference a palette register and that palette register will select a color register. E.g. the default palette entry for brown + 2 ), contains 0x14 on the EGA palette. The corresponding VGA color register 0x14 is preset to.
In the 256-color modes, the palette registers are ignored and the DAC is set to combine four 2-bit color values, one from each plane, into the original 8-bit-value. The CPU interface combined the 4 planes in exactly the same way so that the pixel appeared to the CPU as a packed 8-bit value. This color number is exactly which color register is used. Since the colors 0... 15 are still supposed to result in the CGA colors, the color registers are not preset to contain the EGA palette; instead it contains the 16 CGA colors in the first entries. The other entries are 16 gray levels from black to white and 9 groups of 24 color values. The remaining 8 entries are black.
CGAEGAVGARGBWebExample
0x00x00,0,00,0,0#000000black
0x10x10,0,420,0,170#0000AAblue
0x20x20,42,00,170,0#00AA00green
0x30x30,42,420,170,170#00AAAAcyan
0x40x442,0,0170,0,0#AA0000red
0x50x542,0,42170,0,170#AA00AAmagenta
0x60x1442,21,0170,85,0#AA5500brown
0x70x742,42,42170,170,170#AAAAAAgray
0x80x3821,21,2185,85,85#555555dark gray
0x90x3921,21,6385,85,255#5555FFbright blue
0xA0x3A21,63,2185,255,85#55FF55bright green
0xB0x3B21,63,6385,255,255#55FFFFbright cyan
0xC0x3C63,21,21255,85,85#FF5555bright red
0xD0X3D63,21,63255,85,255#FF55FFbright magenta
0xE0x3E63,63,21255,255,85#FFFF55yellow
0xF0x3F63,63,63255,255,255#FFFFFFwhite

0x000x010x020x030x040x050x060x070x080x090x0A0x0B0x0C0x0D0x0E0x0F
0x100x110x120x130x140x150x160x170x180x190x1A0x1B0x1C0x1D0x1E0x1F
0x200x210x220x230x240x250x260x270x280x290x2A0x2B0x2C0x2D0x2E0x2F
0x300x310x320x330x340x350x360x370x380x390x3A0x3B0x3C0x3D0x3E0x3F

Programming

"Unchaining" the 256 KB VGA memory into four separate "planes" makes VGA's 256 KB of RAM available in 256-color modes. There is a trade-off for extra complexity and performance loss in some types of graphics operations, but this is mitigated by other operations becoming faster in certain situations:
Software such as Fractint, Xlib and ColoRIX also supported tweaked 256-color modes on standard adaptors using freely-combinable widths of 256, 320, and 360 pixels and heights of 200, 240 and 256 lines, extending still further to 384 or 400 pixel columns and 576 or 600. However, 320×240 was the best known and most frequently used, as it offered a standard 40-column resolution and 4:3 aspect ratio with square pixels. "320×240×8" resolution was commonly called Mode X, the name used by Michael Abrash when he presented the resolution in Dr. Dobb's Journal.
The highest resolution modes were only used in special, opt-in cases rather than as standard, especially where high line counts were involved. Standard VGA monitors had a fixed line scan rate"multisync" monitors being, at the time, expensive exoticaand so the vertical/frame refresh rate had to be reduced in order to accommodate them, which increased visible flicker and thus eye strain. For example, the highest 800×600 mode, being otherwise based off the matching SVGA resolution, reduced the refresh rate from 60 Hz to about 50 Hz.
These modes were also outright incompatible with some monitors, producing display problems such as picture detail disappearing into overscan, vertical roll, poor horizontal sync or even a complete lack of picture depending on the exact mode attempted. Due to these potential issues, most VGA tweaks used in commercial products were limited to more standards-compliant, "monitor-safe" combinations, such as 320×240, 320×400, and 360×480 in 256 colors, or double the H-rez in 16-color mode.

Hardware manufacturers

Several companies produced VGA compatible graphic board models.

Super VGA (SVGA)

Super VGA is a display standard developed in 1988, when NEC Home Electronics announced its creation of the Video Electronics Standards Association. The development of SVGA was led by NEC, along with other VESA members including ATI Technologies and Western Digital. SVGA enabled graphics display resolutions up to 800×600 pixels, 36% more than VGA's maximum resolution of 640×480 pixels.

Extended Graphics Array (XGA)

Extended Graphics Array is an IBM display standard introduced in 1990. Later it became the most common appellation of the 1024768 pixels display resolution.