Jump to content

Video Graphics Array: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
m fmt.
Undid revision 602151737. There is an ongoing discussion at WT:MOSNUM regarding pixel array representation formats. Please make no changes like this until that is concluded. Currently, WP:MOS requires units on all numbers when using "×" as "by".
Line 1: Line 1:
{{About|the computer display standard|the 640 × 480 resolution|display resolution|the 15-pin video connector|VGA connector|a full list of display resolutions|Graphic display resolutions|other uses|VGA (disambiguation)}}
{{About|the computer display standard|the 640x480 resolution|display resolution|the 15-pin video connector|VGA connector|a full list of display resolutions|Graphic display resolutions|other uses|VGA (disambiguation)}}


'''Video Graphics Array''' ('''VGA''') refers specifically to the display hardware first introduced with the [[IBM Personal System/2|IBM PS/2]] line of computers in 1987,<ref>{{cite web|title= Chronology of IBM Personal Computers|author=Ken Polsson|url=http://www.islandnet.com/~KPOLSSON/ibmpc/ibm1987.htm|accessdate=2010-11-18}}</ref> but through its widespread adoption has also come to mean either an [[analogue electronics|analog]] [[computer display standard]], the 15-pin [[D-subminiature]] [[VGA connector]] or the [[Display resolution#Computer monitors|640 × 480]] resolution itself. While this resolution was superseded in the [[personal computer]] market in the 1990s, mobile devices have only caught up in the last few years.
'''Video Graphics Array''' ('''VGA''') refers specifically to the display hardware first introduced with the [[IBM Personal System/2|IBM PS/2]] line of computers in 1987,<ref>{{cite web|title= Chronology of IBM Personal Computers|author=Ken Polsson|url=http://www.islandnet.com/~KPOLSSON/ibmpc/ibm1987.htm|accessdate=2010-11-18}}</ref> but through its widespread adoption has also come to mean either an [[analogue electronics|analog]] [[computer display standard]], the 15-pin [[D-subminiature]] [[VGA connector]] or the [[640x480]] resolution itself. While this resolution was superseded in the [[personal computer]] market in the 1990s, mobile devices have only caught up in the last few years.


VGA was the last graphical standard introduced by IBM that the majority of [[IBM PC compatible|PC clone]] manufacturers conformed to, making it today (2013) the [[lowest common denominator]] that almost all post-1990 [[Personal computer|PC]] graphics hardware can be expected to implement. For example, the [[Microsoft Windows]] [[splash screen]], in versions prior to Windows Vista, appears while the machine is still operating in VGA mode, which is the reason that this screen always appears in reduced resolution and color depth. Windows Vista and newer versions can make use of the [[VESA BIOS Extension]] support of newer graphics hardware to show their splash screens in a higher resolution than VGA allows.
VGA was the last graphical standard introduced by IBM that the majority of [[IBM PC compatible|PC clone]] manufacturers conformed to, making it today (2013) the [[lowest common denominator]] that almost all post-1990 [[Personal computer|PC]] graphics hardware can be expected to implement. For example, the [[Microsoft Windows]] [[splash screen]], in versions prior to Windows Vista, appears while the machine is still operating in VGA mode, which is the reason that this screen always appears in reduced resolution and color depth. Windows Vista and newer versions can make use of the [[VESA BIOS Extension]] support of newer graphics hardware to show their splash screens in a higher resolution than VGA allows.
Line 18: Line 18:
===Output capabilities===
===Output capabilities===
The VGA supports both [[All Points Addressable]] graphics modes, and alphanumeric [[text mode]]s. Standard graphics modes are:
The VGA supports both [[All Points Addressable]] graphics modes, and alphanumeric [[text mode]]s. Standard graphics modes are:
*[[Display resolution|640 × 480]] in 16&nbsp;colors or [[monochrome]] <ref>{{cite web|last=Hinner|first=Martin|title=VGA Timings|url=http://martin.hinner.info/vga/timing.html|accessdate=7 November 2012}}</ref>
*[[Display resolution|640x480]] in 16&nbsp;colors or [[monochrome]] <ref>{{cite web|last=Hinner|first=Martin|title=VGA Timings|url=http://martin.hinner.info/vga/timing.html|accessdate=7 November 2012}}</ref>
*640 × 350 in 16&nbsp;colors ([[Enhanced Graphics Adapter|EGA]] compatibility mode)
*640x350 in 16&nbsp;colors ([[Enhanced Graphics Adapter|EGA]] compatibility mode)
*320 × 200 in 16&nbsp;colors
*320x200 in 16&nbsp;colors
*320 × 200 in 256&nbsp;colors ([[Mode 13h]])
*320x200 in 256&nbsp;colors ([[Mode 13h]])
With all display colors individually chosen from an 18-bit palette.
With all display colors individually chosen from an 18-bit palette.


Standard VGA text mode uses an 80 × 25 character display, rendered with a 9 × 16 pixel font, for an effective resolution of 720 × 400 in 16 colors.<ref>{{cite web|last=Abrash|first=Michael|title=How 360x480 in 256 color mode works|url=http://www.phatcode.net/res/224/files/html/ch32/32-05.html|work=Graphics Programming Black Book|accessdate=7 November 2012}}</ref> 16-color 80 × 50 (8 × 8 font grid), 40 × 25 (360 × 400 resolution) modes are also available.
Standard VGA text mode uses an 80x25 character display, rendered with a 9x16 pixel font, for an effective resolution of 720x400 in 16 colors.<ref>{{cite web|last=Abrash|first=Michael|title=How 360x480 in 256 color mode works|url=http://www.phatcode.net/res/224/files/html/ch32/32-05.html|work=Graphics Programming Black Book|accessdate=7 November 2012}}</ref> 16-color 80x50 (8x8 font grid), 40x25 (360x400 resolution) modes are also available.


The original VGA specifications are as follows:
The original VGA specifications are as follows:
Line 39: Line 39:
*Hardware [[scrolling|smooth scrolling]] support
*Hardware [[scrolling|smooth scrolling]] support
*No hardware sprites,
*No hardware sprites,
*No Blitter, but supports very fast data transfers via "VGA latch" registers.
*No Blitter, but supports very fast data transfers via 'VGA latch' registers.
*Some "[[Raster graphics|Raster]] Ops" support
*Some "[[Raster graphics|Raster]] Ops" support
*[[Barrel shifter]]
*[[Barrel shifter]]
*[[Split screen (computer graphics)|Split screen]] support
*[[Split screen (computer graphics)|Split screen]] support
*0.7&nbsp;[[Volt|V]] [[Amplitude|peak-to-peak]]<ref>{{cite web|title=VGA Electrical FAQ|url= http://www.microvga.com/faq/electrical}}</ref>
*0.7&nbsp;[[Volt|V]] [[Amplitude|peak-to-peak]]<ref>{{cite web|title=VGA Electrical FAQ|url= http://www.microvga.com/faq/electrical}}</ref>
*75&nbsp;[[ohm]] double-terminated [[Electrical impedance|impedance]] (18.7&nbsp;mA, 13&nbsp;mW)
*75&nbsp;[[ohm]] double-terminated [[Electrical impedance|impedance]] (18.7&nbsp;mA 13&nbsp;mW)


As well as the standard modes, VGA can be configured to emulate many of the modes of its predecessors (EGA, CGA, and MDA), including their reduced global color palettes (with particular pre-set colors chosen from the VGA palette for text and 4- or 16-color, 200-line modes) 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 [[Hercules Graphics Card|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.
As well as the standard modes, VGA can be configured to emulate many of the modes of its predecessors (EGA, CGA, and MDA), including their reduced global color palettes (with particular pre-set colors chosen from the VGA palette for text and 4- or 16-color, 200-line modes) 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 [[Hercules Graphics Card|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===
===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. The formula for the VGA horizontal frequency is thus (60 / 1001) × 525&nbsp;kHz = 4500 / 143&nbsp;kHz ≈ 31.4686&nbsp;kHz. All other frequencies used by the VGA card are derived from this value by integer multiplication or division. Since the exactness of quartz oscillators is limited, real cards will have slightly higher or lower frequency.
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. The formula for the VGA horizontal frequency is thus (60 ÷ 1001) × 525&nbsp;kHz = 4500 ÷ 143&nbsp;kHz ≈ 31.4686&nbsp;kHz. All other frequencies used by the VGA card are derived from this value by integer multiplication or division. Since the exactness of quartz oscillators is limited, real cards will have slightly higher or lower frequency.


All VGA timings can be varied widely by software that bypasses the VGA firmware interface and talks directly to the VGA hardware, as many MS-DOS based games did. However, only the standard modes, or modes that at least use exactly the same horizontal and vertical 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. Later "multisync" CRT monitors were usually much more flexible.
All VGA timings can be varied widely by software that bypasses the VGA firmware interface and talks directly to the VGA hardware, as many MS-DOS based games did. However, only the standard modes, or modes that at least use exactly the same horizontal and vertical 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. Later "multisync" CRT monitors were usually much more flexible.


For most common VGA mode 640 × 480 "60 Hz" [[progressive scan|non-interlaced]] the horizontal timings are:<ref name="epanorama_net-vga_timing">{{cite web|title=ePanorama.net - Circuits|url= http://www.epanorama.net/documents/pc/vga_timing.html}} 090425 epanorama.net</ref><ref>HP D1194A Super VGA Display & HP D1195A Erognomic Super VGA Display Installation Guide, Hewlett Packard</ref>
For most common VGA mode 640x480 "60 Hz" [[progressive scan|non-interlaced]] the horizontal timings are:<ref name="epanorama_net-vga_timing">{{cite web|title=ePanorama.net - Circuits|url= http://www.epanorama.net/documents/pc/vga_timing.html}} 090425 epanorama.net</ref><ref>HP D1194A Super VGA Display & HP D1195A Erognomic Super VGA Display Installation Guide, Hewlett Packard</ref>


{| class="wikitable"
{| class="wikitable"
Line 79: Line 79:


(Total horizontal sync time 6.60&nbsp;µs)
(Total horizontal sync time 6.60&nbsp;µs)
{{Wide image|VGA 640x480 H-Timing.png|1004px|VGA horizontal timings for 640 × 480}}<!-- There's an .svg online version, but I just don't get it to display properly. -->
{{Wide image|VGA 640x480 H-Timing.png|1004px|VGA horizontal timings for 640x480}}<!-- There's an .svg online version, but I just don't get it to display properly. -->


The vertical timings are:
The vertical timings are:
Line 103: Line 103:
(Total vertical sync time 1.43&nbsp;ms)
(Total vertical sync time 1.43&nbsp;ms)


640 × 400 @ 70&nbsp;Hz is video mode used for booting most [[x86]] [[personal computer]]s.<ref name="epanorama_net-vga_timing"/>
640x400 @ 70&nbsp;Hz is video mode used for booting most [[x86]] [[personal computer]]s.<ref name="epanorama_net-vga_timing"/>


640 × 480 @ 60&nbsp;Hz is the default MS-Windows graphics mode with 16&nbsp;colors.<ref name= "epanorama_net-vga_timing" />
640x480 @ 60&nbsp;Hz is the default MS-Windows graphics mode with 16&nbsp;colors.<ref name= "epanorama_net-vga_timing" />


320 × 200 @ 70&nbsp;Hz, the most common mode for VGA-era PC games, uses exactly the same timings as the 640 × 400 mode, just halving the dot clock and [[line doubler|displaying each line of pixels twice]].
320x200 @ 70&nbsp;Hz, the most common mode for VGA-era PC games, uses exactly the same timings as the 640x400 mode, just halving the dot clock and [[line doubler|displaying each line of pixels twice]].


The actual timings vary slightly. For example, for 640 × 480 @ 60&nbsp;Hz, a 25.17&nbsp;µs active video time with a pixel frequency of 25.174&nbsp;MHz gives 633&nbsp;pixels rather than the expected 640.
The actual timings vary slightly. For example, for 640x480 @ 60&nbsp;FPS, a 25.17&nbsp;µs active video time with a pixel frequency of 25.174&nbsp;MHz gives 633&nbsp;pixels rather than the expected 640.


===Connectors===
===Connectors===
Line 119: Line 119:
An alternative method of connecting VGA devices that maintains very high signal quality 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.
An alternative method of connecting VGA devices that maintains very high signal quality 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.


However, BNC is large and bulky, and some attention is needed to make sure each cable goes to the correct socket. Additionally, extra signal lines such as +5 V, DDC, and DDC2 are not supported using BNC connectors.
However, BNC is large and bulky, and some attention is needed to make sure each cable goes to the correct socket. Additionally, extra signal lines such as +5 volt, DDC, and DDC2 are not supported using BNC connectors.
{{clear}}
{{clear}}


Line 125: Line 125:
{{See also|VGA compatible text mode}}
{{See also|VGA compatible text mode}}


The [[BIOS]] offers some [[text mode]]s for a VGA adapter, which have 80 × 25, 40 × 25, 80 × 43 or 80 × 50 text grid. Each cell may choose from one of [[#Color palette|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 (computers)|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&nbsp;colors for background. All of these options are the same as those on the CGA adapter as introduced by IBM.
The [[BIOS]] offers some [[text mode]]s for a VGA adapter, which have 80x25, 40x25, 80x43 or 80x50 text grid. Each cell may choose from one of [[#Color palette|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 (computers)|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&nbsp;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 C0<sub>hex</sub> to DF<sub>hex</sub>, where all horizontally connecting characters are found in [[Codepage 437]] and its most common derivatives. The same column-repeating trick was already used on the older MDA hardware with its 9 × 14 pixel gylphs, but on VGA it can be turned off when loading a font in which those character numbers do not represent box drawing characters.<ref>{{cite web|url=http://www.osdever.net/FreeVGA/vga/vgatext.htm#fonts|title=Hardware Level VGA and SVGA Video Programming Information|year=1998| author=J. D. Neal|publisher=FreeVGA Project|accessdate=2010-11-18}}</ref><ref>{{cite web|url= http://www.irccity.ru/linux/console/console.html|title=VGA console basics and Linux console-tools, VGA-compatible text screen features and restrictions|author=Innocenti Maresin|accessdate= 2010-11-18}}</ref>
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 80x25 mode are normally made of 9x16 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 C0<sub>hex</sub> to DF<sub>hex</sub>, where all horizontally connecting characters are found in [[Codepage 437]] and its most common derivatives. The same column-repeating trick was already used on the older MDA hardware with its 9x14 pixel gylphs, but on VGA it can be turned off when loading a font in which those character numbers do not represent box drawing characters.<ref>{{cite web|url=http://www.osdever.net/FreeVGA/vga/vgatext.htm#fonts|title=Hardware Level VGA and SVGA Video Programming Information|year=1998| author=J. D. Neal|publisher=FreeVGA Project|accessdate=2010-11-18}}</ref><ref>{{cite web|url= http://www.irccity.ru/linux/console/console.html|title=VGA console basics and Linux console-tools, VGA-compatible text screen features and restrictions|author=Innocenti Maresin|accessdate= 2010-11-18}}</ref>


===Monochrome modes===
===Monochrome modes===
Line 134: Line 134:


===Addressing details===
===Addressing details===
[[File:Torak.gif|thumb|256px|Examples of VGA images in 640 × 480 × 16 (top) and 320 × 200 × 256 modes (bottom). [[Dither]]ing is used to mask color limitations.]]
[[File:Torak.gif|thumb|256px|Examples of VGA images in 640x480x16 (top) and 320x200x256 modes (bottom). [[Dither]]ing is used to mask color limitations.]]


The video memory of the VGA is mapped to the PC's memory via a window in the range between segments [[Hexadecimal|0xA0000]] and 0xBFFFF in the PC's [[real mode]] address space (A000:0000 and B000:FFFF in segment:offset notation). Typically, these starting segments are:
The video memory of the VGA is mapped to the PC's memory via a window in the range between segments [[Hexadecimal|0xA0000]] and 0xBFFFF in the PC's [[real mode]] address space (A000:0000 and B000:FFFF in segment:offset notation). Typically, these starting segments are:
Line 141: Line 141:
*0xB8000 for color text mode and CGA-compatible graphics modes (32&nbsp;KB)
*0xB8000 for color text mode and CGA-compatible graphics modes (32&nbsp;KB)


Due to the use of different address mappings for different modes, it is possible to have a monochrome adapter (i.e. [[IBM Monochrome Display Adapter|MDA]] or [[Hercules Graphics Card|Hercules]]) and a color adapter such as the VGA, [[Enhanced Graphics Adapter|EGA]], or [[Color Graphics Adapter|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]], [[A86 (software)|D86]] (by Alan J. Cox) 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 <tt>ox.sys</tt>, 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 (for example by adding the line "DEVICE=EMM386.EXE I=B000-B7FF" into <tt>config.sys</tt>, this memory would be made available to programs that can be "loaded high", that is loaded into [[high memory]].)
Due to the use of different address mappings for different modes, it is possible to have a monochrome adapter (i.e. [[IBM Monochrome Display Adapter|MDA]] or [[Hercules Graphics Card|Hercules]]) and a color adapter such as the VGA, [[Enhanced Graphics Adapter|EGA]], or [[Color Graphics Adapter|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]], [[A86 (software)|D86]] (by Alan J. Cox) 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 <tt>ox.sys</tt>, 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 (for example by adding the line "DEVICE=EMM386.EXE I=B000-B7FF" into <tt>config.sys</tt>, this memory would be made available to programs that can be "loaded high" loaded into [[high memory]].)


==Color palette==
==Color palette==
Line 159: Line 159:
*Single-color polygon filling could be accelerated due to the ability to set four pixels with a single write to the hardware.
*Single-color polygon filling could be accelerated due to the ability to set four pixels with a single write to the hardware.
*The video adapter could assist in copying video RAM regions, which was sometimes faster than doing this with the relatively slow CPU-to-VGA interface.
*The video adapter could assist in copying video RAM regions, which was sometimes faster than doing this with the relatively slow CPU-to-VGA interface.
*Several higher-resolution display modes were possible: at 16&nbsp;colors, 704 × 528, 736 × 552, 768 × 576, and even 800 × 600. Software such as Xlib and ColoRIX (a 256-color graphics program), also supported tweaked 256-color modes on standard adaptors using many combinations of widths of 256, 320, and 360&nbsp;pixels, and heights of 200, 240, 256, 400, and 480&nbsp;lines. However, 320 × 240 was the best known and most-frequently used, so much so that "Mode X" itself became synonymous with "320x240x8", since it was a typical 4:3 aspect ratio resolution with square pixels.
*Several higher-resolution display modes were possible: at 16&nbsp;colors, 704x528, 736x552, 768x576, and even 800x600. Software such as Xlib and ColoRIX (a 256-color graphics program), also supported tweaked 256-color modes on standard adaptors using many combinations of widths of 256, 320, and 360&nbsp;pixels, and heights of 200, 240, 256, 400, and 480&nbsp;lines. However, 320x240 was the best known and most-frequently used, so much so that "Mode X" itself became synonymous with "320x240x8", since it was a typical 4:3 aspect ratio resolution with square pixels.
*The use of multiple video pages in hardware allowed the programmer to perform [[double buffering]], [[triple buffering]] or [[split screens]], which, while available in VGA's 320 × 200 16-color mode, was not possible using stock [[Mode 13h]].
*The use of multiple video pages in hardware allowed the programmer to perform [[double buffering]], [[triple buffering]] or [[split screens]], which, while available in VGA's 320x200 16-color mode, was not possible using stock [[Mode 13h]].


Sometimes the monitor's vertical [[refresh rate]] had to be reduced to accommodate these modes within the very limited horizontal scan-rate range of a standard VGA monitor, increasing [[Asthenopia|eye strain]]. They were also incompatible with some older monitors, producing display problems such as picture detail disappearing into [[overscan]], [[Flicker (screen)|flicker]]ing, vertical roll, and lack of [[Horizontal scan rate|horizontal sync]] depending on the mode being attempted. Because of this, most VGA tweaks used in commercial products were limited to "monitor-safe" combinations, such as 320 × 240 (square pixels, three video pages, 60&nbsp;Hz), 320 × 400 (double resolution, two video pages, 70&nbsp;Hz), and 360 × 480 (highest resolution compatible with both standard VGA monitors and cards, one video page, 60&nbsp;Hz).
Sometimes the monitor's vertical [[refresh rate]] had to be reduced to accommodate these modes within the very limited horizontal scan-rate range of a standard VGA monitor, increasing [[Asthenopia|eye strain]]. They were also incompatible with some older monitors, producing display problems such as picture detail disappearing into [[overscan]], [[Flicker (screen)|flicker]]ing, vertical roll, and lack of [[Horizontal scan rate|horizontal sync]] depending on the mode being attempted. Because of this, most VGA tweaks used in commercial products were limited to "monitor-safe" combinations, such as 320x240 (square pixels, three video pages, 60&nbsp;Hz), 320x400 (double resolution, two video pages, 70&nbsp;Hz), and 360x480 (highest resolution compatible with both standard VGA monitors and cards, one video page, 60&nbsp;Hz).
Currently, the two highest known tweaked VGA resolutions are 400 × 600 × 256 (400 × 600 pixel by 256 colors), used in the DOS version of [[Fractint]], and 640 × 400 × 256 (however the timings that create this mode require a monitor that can scan to low horizontal frequencies, as the mode is programming unconventionally from a typical SVGA mode of the same resolution).
Currently, the two highest known tweaked VGA resolutions are 400x600x256 (400x600 pixel by 256 colors), used in the DOS version of [[Fractint]], and 640x400x256 (however the timings that create this mode require a monitor that can scan to low horizontal frequencies, as the mode is programming unconventionally from a typical SVGA mode of the same resolution).


==See also==
==See also==

Revision as of 20:59, 31 March 2014

Video Graphics Array (VGA) refers specifically to the display hardware first introduced with the IBM PS/2 line of computers in 1987,[1] but through its widespread adoption has also come to mean either an analog computer display standard, the 15-pin D-subminiature VGA connector or the 640x480 resolution itself. While this resolution was superseded in the personal computer market in the 1990s, mobile devices have only caught up in the last few years.

VGA was the last graphical standard introduced by IBM that the majority of PC clone manufacturers conformed to, making it today (2013) the lowest common denominator that almost all post-1990 PC graphics hardware can be expected to implement. For example, the Microsoft Windows splash screen, in versions prior to Windows Vista, appears while the machine is still operating in VGA mode, which is the reason that this screen always appears in reduced resolution and color depth. Windows Vista and newer versions can make use of the VESA BIOS Extension support of newer graphics hardware to show their splash screens in a higher resolution than VGA allows.

VGA was officially followed by IBM's Extended Graphics Array (XGA) standard, but it was effectively superseded by numerous slightly different extensions to VGA made by clone manufacturers that came to be known collectively as Super VGA.

Today, the VGA analog interface is used for high definition video including 1080p and higher. While the VGA transmission bandwidth is high enough to support even higher resolution playback, there can be picture quality degradation depending on cable quality and length. How discernible this quality difference is depends on the individual's eyesight and the display; when using a DVI or HDMI connection, especially on larger sized LCD/LED monitors or TVs, quality degradation, if present, is prominently visible. Blu-ray playback at 1080p is possible via the VGA analog interface, if Image Constraint Token (ICT) is not enabled on the Blu-ray disc.[citation needed]

Technical details

Circuitry design

VGA compared to other standard resolutions.

VGA is referred to as an "Array" instead of an "adapter" because it was implemented from the start as a single chip (an ASIC), replacing the Motorola 6845 and dozens of discrete logic chips that covered the full-length ISA boards of the MDA, CGA, and EGA. Its single-chip implementation also allowed the VGA to be placed directly on a PC′s motherboard with a minimum of difficulty (it only required video memory, timing crystals and an external RAMDAC), and the first IBM PS/2 models were equipped with VGA on the motherboard. (Contrast this with all of the "family one" IBM PC desktop models—the PC, PC/XT, and PC AT—which required a display adapter installed in a slot in order to connect a monitor.)

Output capabilities

The VGA supports both All Points Addressable graphics modes, and alphanumeric text modes. Standard graphics modes are:

With all display colors individually chosen from an 18-bit palette.

Standard VGA text mode uses an 80x25 character display, rendered with a 9x16 pixel font, for an effective resolution of 720x400 in 16 colors.[3] 16-color 80x50 (8x8 font grid), 40x25 (360x400 resolution) modes are also available.

The original VGA specifications are as follows:

  • 256 kB Video RAM (The very first cards could be ordered with 64 kB or 128 kB of RAM, at the cost of losing some or all high-resolution 16-color modes.)
  • 16-color and 256-color paletted display modes.
  • 262,144-color global palette (6 bits, and therefore 64 possible levels, for each of the red, green, and blue channels via the RAMDAC)
  • Selectable 25.175 MHz[4] or 28.322 MHz master clock
  • Maximum of 800 horizontal pixels[5]
  • Maximum of 600 lines[5]
  • Refresh rates at up to 70 Hz[6]
  • Vertical blank interrupt (Not all clone cards support this.)
  • Planar mode: up to 16 colors (4-bit planes)
  • Packed-pixel mode: 256 colors (Mode 13h)
  • Hardware smooth scrolling support
  • No hardware sprites,
  • No Blitter, but supports very fast data transfers via 'VGA latch' registers.
  • Some "Raster Ops" support
  • Barrel shifter
  • Split screen support
  • 0.7 V peak-to-peak[7]
  • 75 ohm double-terminated impedance (18.7 mA – 13 mW)

As well as the standard modes, VGA can be configured to emulate many of the modes of its predecessors (EGA, CGA, and MDA), including their reduced global color palettes (with particular pre-set colors chosen from the VGA palette for text and 4- or 16-color, 200-line modes) 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. The formula for the VGA horizontal frequency is thus (60 ÷ 1001) × 525 kHz = 4500 ÷ 143 kHz ≈ 31.4686 kHz. All other frequencies used by the VGA card are derived from this value by integer multiplication or division. Since the exactness of quartz oscillators is limited, real cards will have slightly higher or lower frequency.

All VGA timings can be varied widely by software that bypasses the VGA firmware interface and talks directly to the VGA hardware, as many MS-DOS based games did. However, only the standard modes, or modes that at least use exactly the same horizontal and vertical 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. Later "multisync" CRT monitors were usually much more flexible.

For most common VGA mode 640x480 "60 Hz" non-interlaced the horizontal timings are:[8][9]

Parameter Value Unit
Pixel clock frequency 25.175 MHz[10]
Horizontal frequency 31.4686 kHz
Horizontal pixels 640
Horizontal sync polarity Negative
Total time for each line 31.77 µs
Front porch (A) 0.94 µs
Sync pulse length (B) 3.77 µs
Back porch (C) 1.89 µs
Active video (D) 25.17 µs

(Total horizontal sync time 6.60 µs)

VGA horizontal timings for 640x480

The vertical timings are:

Parameter Value Unit
Vertical lines 480
Vertical sync polarity Negative
Vertical frequency 59.94 Hz
Front porch (E) 0.35 ms
Sync pulse length (F) 0.06 ms
Back porch (G) 1.02 ms
Active video (H) 15.25 ms

(Total vertical sync time 1.43 ms)

640x400 @ 70 Hz is video mode used for booting most x86 personal computers.[8]

640x480 @ 60 Hz is the default MS-Windows graphics mode with 16 colors.[8]

320x200 @ 70 Hz, the most common mode for VGA-era PC games, uses exactly the same timings as the 640x400 mode, just halving the dot clock and displaying each line of pixels twice.

The actual timings vary slightly. For example, for 640x480 @ 60 FPS, a 25.17 µs active video time with a pixel frequency of 25.174 MHz gives 633 pixels rather than the expected 640.

Connectors

A D-SUB connector (commonly known as VGA connector)

Initially, VGA only used a DE-15 connector on the back of the computer to connect to the monitor. DE-15 is sized to fit within the expansion slot gap provided for ISA expansion cards, but the connector has a number of limitations, mainly that it introduces noise into the analog signals due to the data lines intended to be coaxial and shielded from each other. It is not possible to maintain coaxial shielding within the DE-15 connector, and so crosstalk and ghosting can occur between data lines within the connector. Additionally, if the back shell of the connector is not shielded, external interference can enter the coaxial lines where they separate into pins in the connector.

VGA BNC connectors

An alternative method of connecting VGA devices that maintains very high signal quality 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.

However, BNC is large and bulky, and some attention is needed to make sure each cable goes to the correct socket. Additionally, extra signal lines such as +5 volt, DDC, and DDC2 are not supported using BNC connectors.

Standard text modes

The BIOS offers some text modes for a VGA adapter, which have 80x25, 40x25, 80x43 or 80x50 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 80x25 mode are normally made of 9x16 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 Codepage 437 and its most common derivatives. The same column-repeating trick was already used on the older MDA hardware with its 9x14 pixel gylphs, but on VGA it can be turned off when loading a font in which those character numbers do not represent box drawing characters.[11][12]

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 (intense, underline) 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 (for example, by continuing to boot into the operating system), they will override this detection and the monitor will return to color.

Addressing details

Examples of VGA images in 640x480x16 (top) and 320x200x256 modes (bottom). Dithering is used to mask color limitations.

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 (A000:0000 and B000:FFFF in segment:offset notation). Typically, these starting segments are:

  • 0xA0000 for EGA/VGA graphics modes (64 KB)
  • 0xB0000 for monochrome text mode (32 KB)
  • 0xB8000 for color text mode and CGA-compatible graphics modes (32 KB)

Due to the use of different address mappings for different modes, it is possible to have a monochrome adapter (i.e. MDA or Hercules) 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 (by Alan J. Cox) 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 (for example by adding the line "DEVICE=EMM386.EXE I=B000-B7FF" into config.sys, this memory would be made available to programs that can be "loaded high" – loaded into high memory.)

Color palette

VGA 256 default color palette

The VGA color system is backward compatible with the EGA and CGA adapters, and adds another level of configuration on top of that. CGA was able to display 16 fixed colors, and EGA extended this by allowing each of the 16 colors to be chosen from a 64-color palette (these 64 colors are made up of two bits each for red, green and blue: two bits × three channels = six bits = 64 different values). VGA further extends this scheme by increasing the EGA palette from 64 entries to 256. Two more blocks of 64 colors with progressively darker shades were added, along with eight "blank" entries that were set to black.[13] [dubiousdiscuss]

In addition to the extended palette, VGA adds a second level of indirection: Unlike EGA's fixed 64-color palette, each of VGA's 256 palette entries could be assigned an arbitrary color value through the VGA DAC. The EGA BIOS only allowed two bits per channel to represent each entry, while VGA allowed six bits to represent the intensity of each of the three primaries (red, blue and green). This provided 64 different intensity levels for each of red, green and blue, resulting in 262,144 possible colors, any 256 of which could be assigned to the palette (and in turn out of those 256, any 16 of them could be displayed in CGA video modes).

This method allowed new VGA colors to be used in EGA and CGA graphics modes, providing one remembered how the different palette systems are laid together. To set the text color to very dark red in text mode, for instance, it will need to be set to one of the CGA colors (for example, the default color, #7: light grey.) This color then maps to one in the EGA palette—in the case of CGA color 7, it maps to EGA palette entry 42. The VGA DAC must then be configured to change color 42 to dark red, and then immediately anything displayed on the screen in light-grey (CGA color 7) will become dark red. This feature was often used in 256-color VGA DOS games when they first loaded, by smoothly fading out the text screen to black. (The game Descent, from 1995, is an example.)

While CGA and EGA-compatible modes only allowed 16 colors to be displayed at any one time, other VGA modes, such as the widely used mode 13h, allowed all 256 palette entries to be displayed on the screen at the same time, and so in these modes any 256 colors could be shown out of the 262,144 colors available.

Programming tricks

An undocumented but popular technique nicknamed Mode X (first coined by Michael Abrash) or "tweaked VGA" was used to make programming techniques and graphics resolutions available that were not otherwise possible in the standard Mode 13h. This was done by "unchaining" the 256 KB VGA memory into four separate "planes", which would make all of VGA's 256 KB of RAM available in 256-color modes. There was a trade-off for extra complexity and performance loss in some types of graphics operations, but this was mitigated by other operations becoming faster in certain situations:

  • Single-color polygon filling could be accelerated due to the ability to set four pixels with a single write to the hardware.
  • The video adapter could assist in copying video RAM regions, which was sometimes faster than doing this with the relatively slow CPU-to-VGA interface.
  • Several higher-resolution display modes were possible: at 16 colors, 704x528, 736x552, 768x576, and even 800x600. Software such as Xlib and ColoRIX (a 256-color graphics program), also supported tweaked 256-color modes on standard adaptors using many combinations of widths of 256, 320, and 360 pixels, and heights of 200, 240, 256, 400, and 480 lines. However, 320x240 was the best known and most-frequently used, so much so that "Mode X" itself became synonymous with "320x240x8", since it was a typical 4:3 aspect ratio resolution with square pixels.
  • The use of multiple video pages in hardware allowed the programmer to perform double buffering, triple buffering or split screens, which, while available in VGA's 320x200 16-color mode, was not possible using stock Mode 13h.

Sometimes the monitor's vertical refresh rate had to be reduced to accommodate these modes within the very limited horizontal scan-rate range of a standard VGA monitor, increasing eye strain. They were also incompatible with some older monitors, producing display problems such as picture detail disappearing into overscan, flickering, vertical roll, and lack of horizontal sync depending on the mode being attempted. Because of this, most VGA tweaks used in commercial products were limited to "monitor-safe" combinations, such as 320x240 (square pixels, three video pages, 60 Hz), 320x400 (double resolution, two video pages, 70 Hz), and 360x480 (highest resolution compatible with both standard VGA monitors and cards, one video page, 60 Hz). Currently, the two highest known tweaked VGA resolutions are 400x600x256 (400x600 pixel by 256 colors), used in the DOS version of Fractint, and 640x400x256 (however the timings that create this mode require a monitor that can scan to low horizontal frequencies, as the mode is programming unconventionally from a typical SVGA mode of the same resolution).

See also

References

  1. ^ Ken Polsson. "Chronology of IBM Personal Computers". Retrieved 2010-11-18.
  2. ^ Hinner, Martin. "VGA Timings". Retrieved 7 November 2012.
  3. ^ Abrash, Michael. "How 360x480 in 256 color mode works". Graphics Programming Black Book. Retrieved 7 November 2012.
  4. ^ "VGA 640x350 Signal timing".
  5. ^ a b PS/2 Video Subsystem Technical Reference Manual 1992
  6. ^ "VGA Signal timings".
  7. ^ "VGA Electrical FAQ".
  8. ^ a b c "ePanorama.net - Circuits". 090425 epanorama.net
  9. ^ HP D1194A Super VGA Display & HP D1195A Erognomic Super VGA Display Installation Guide, Hewlett Packard
  10. ^ Article "Re: VGA specifications ,where ?" posted 19 November 1997 to sci.electronics.design newsgroup by Jeroen Stessen
  11. ^ J. D. Neal (1998). "Hardware Level VGA and SVGA Video Programming Information". FreeVGA Project. Retrieved 2010-11-18.
  12. ^ Innocenti Maresin. "VGA console basics and Linux console-tools, VGA-compatible text screen features and restrictions". Retrieved 2010-11-18.
  13. ^ Norton, Peter and Wilton, Richard (1988). The new Peter Norton programmer's guide to the IBM PC and PS/2.

Further reading

External links