Color Graphics Adapter
The Color Graphics Adapter, originally also called the Color/Graphics Adapter or IBM Color/Graphics Monitor Adapter, introduced in 1981, was IBM's first graphics card and first color display card for the IBM PC. For this reason, it also became that computer's first color computer display standard.
The standard IBM CGA graphics card was equipped with 16 kilobytes of video memory and could be connected either to a dedicated direct-drive CRT monitor using a 4-bit digital RGBI interface, such as the IBM 5153 color display, or to an NTSC-compatible television or composite video monitor via an RCA connector. The RCA connector provided only baseband video, so to connect the CGA card to a standard television set required a separate RF modulator unless the TV had a composite video input, although doing so with the former combined with an amplifier was sometimes more practical, since one could then hook up an antenna to the amplifier and get wireless video.
Built around the Motorola 6845 display controller, the CGA card featured several graphics and text modes. The highest display resolution of any mode was 640×200, and the highest color depth supported was 4-bit.
Output capabilities
CGA supports:
- 320×200 in 4 colors from a 16 color hardware palette. Pixel aspect ratio of 1:1.2.
- 640×200 in 2 colors. Pixel aspect ratio of 1:2.4
- 40×25 with 8×8 pixel font
- 80×25 with 8×8 pixel font
- 160×100 16 color mode
- Artifact colors using a NTSC monitor
Color palette
Despite varying bit depths among the CGA graphics modes, CGA processes colors in its palette in four bits, yielding 24 = 16 different colors. The four color bits are arranged according to the RGBI color model: the lower three bits represent red, green, and blue color components; a fourth "intensifier" bit, when set, increases the brightness of all three color components. In graphics modes, colors are set per-pixel; in text modes, colors are set per-character, with an independent foreground and background color for each character.With an RGBI monitor
These four bits are passed on unmodified to the DE-9 connector at the back of the card, leaving all color processing to the RGBI monitor connected to it. With respect to the RGBI color model described above, the monitor would use approximately the following formula to process the digital four-bit color number to analog voltages ranging from 0.0 to 1.0:red := 2/3×/4 + 1/3×/8
green := 2/3×/2 + 1/3×/8
blue := 2/3×/1 + 1/3×/8
Color 6 is treated differently; when using the formula above, color 6 would become dark yellow, as seen to the left, but in order to achieve a more pleasing brown tone, special circuitry in most RGBI monitors, starting with the IBM 5153 color display, makes an exception for color 6 and changes its hue from dark yellow to brown by halving the analogue green signal's amplitude:
if colorNumber = 6 then green := green / 2
It is this "RGBI with tweaked brown" palette, shown in the complete palette to the right, that all later PC graphics standards such as EGA and VGA have retained for compatibility as a power-on default setting of their internal palette registers and/or DAC registers.
With a composite color monitor/television set
For the composite output, these four-bit color numbers are encoded by the CGA's onboard hardware into an NTSC-compatible signal fed to the card's RCA output jack. For cost reasons, this is not done using an RGB-to-YIQ converter as called for by the NTSC standard, but by a series of flip-flops and delay lines. Consequently, the hues seen are lacking in purity; notably, both cyan and yellow have a greenish tint, and color 6 again looks dark yellow instead of brown. The relative luminances of the colors produced by the composite color-generating circuit differ between CGA revisions: they are identical for colors 1-6 and 9-14 with early CGAs produced until 1983, and are different for later CGAs due to the addition of additional resistors.As noted however, this method only works on NTSC television sets, PAL TVs do not display the colors as expected when connected to the composite output, as PAL's superior color separation prevents artifacting from occurring.
RGBI monitor availability
When the CGA was introduced in 1981, IBM did not offer an RGBI monitor. Instead, customers were supposed to use the RCA output with an RF modulator to connect the CGA to their television set. The IBM 5153 Personal Computer Color Display would not be introduced until March 1983. Resulting from the lack of available RGBI monitors in 1981 and 1982, many users would use simpler RGB monitors, reducing the number of available colors to eight, and displaying both colors 6 and 14 as yellow. This is relevant insofar as if an application or game programmer used either one of these configurations, they will have expected color 6 to look dark yellow instead of brown.Standard text modes
CGA offers four BIOS text modes :- 40×25 characters in up to 16 colors. Each character is a pattern of 8×8 dots. The effective screen resolution in this mode is 320×200 pixels, though individual pixels cannot be addressed independently. The choice of patterns for any location is thus limited to one of the 256 available characters, the patterns for which are stored in a ROM chip on the card itself. The display font in text mode is therefore fixed and cannot be changed. The card has sufficient video RAM for eight different text pages in this mode. BIOS Modes 0 & 1 select 40 column text modes. The difference between these two modes can only be seen on a composite monitor; mode 0 disables the color burst, making colors appear in grayscale. Mode 1 enables the color burst, allowing for color. Mode 0 and Mode 1 are functionally identical on RGB monitors and on later adapters that emulate CGA without supporting composite color output.
- 80×25 characters in up to 16 colors. Each character is again an 8×8 dot pattern, in a pixel aspect ratio of 1:2.4. The effective screen resolution of this mode is 640×200 pixels. Again, the pixels cannot be individually addressed. Since there are twice as many characters on the screen in this mode, the card has enough video RAM for just four different text pages. BIOS Modes 2 & 3 select 80 column text modes. As with the 40-column text modes, Mode 2 disables the color burst in the composite signal and Mode 3 enables it.
Notably, the GW-BASIC and, later, Microsoft QBASIC programming language interpreters included with MS-DOS supported all the text modes of the CGA with full color control, but did not provide a normal means through the BASIC language to switch the CGA from blink mode to 16-background-color mode, though it would be possible by directly programming the hardware registers using the OUT statement of the BASIC language. In BASIC, foreground text color numbers 16-31 are the blinking versions of colors 0-15, respectively, but background colors 8-15 are identical to colors 0-7 respectively.
Standard graphics modes
CGA offers graphics modes in two resolutions:- 320×200 pixels, as with the 40×25 text mode. In the graphics mode, however, each pixel can be addressed independently. The tradeoff is that only four colors can be displayed at a time. Also, only one of the four colors can be freely chosen from the 16 CGA colors. The 1:1.2 pixel aspect ratio needs to be taken into account when drawing large geometrical shapes on the screen.
As with Modes 0 and 2, Mode 5 disables the color burst bit to allow colors to appear in grayscale on Composite monitor. Unlike the text modes, disabling the composite color burst bit affects the colors displayed on an RGB monitor with the IBM CGA card and true compatibles. Some programmers use Mode 5 as an unofficial third palette on RGB monitors: cyan/red/white and the background color. The intense versions of these colors can also be used and the background color may be changed, but the palette cannot be switched to palettes 0 or 1 without enabling the composite color signal again. Notably, it is not mentioned in the IBM Technical Reference manual, and some CGA clones may not support it.
- 640×200 pixels, as with the 80×25 text mode. All pixels can be addressed independently. This mode is monochrome with a pixel aspect ratio of 1:2.4. By default the colors are black and bright white, but the foreground color can be changed to any other color of the CGA palette. This can be done at runtime without refreshing the screen. The background color cannot be changed from black on a true IBM CGA card. BIOS Mode 6 sets up the 640×200 graphics mode. This mode disables the composite color burst signal by default. The BIOS does not provide an option to turn the color burst on in 640×200 mode, and the user must write directly to the mode control register to enable it.
Further graphics modes and tweaks
A number of official and unofficial features exist that can be exploited to achieve special effects.- In 320×200 graphics mode, the background color, which defaults to black on mode initialization, can be changed to any of the other 15 colors of the CGA palette. This allows for some variation, as well as flashing effects, as the background color can be changed without having to redraw the screen
- In text mode, the border color can be changed from its usual black to any of the other 15 colors.
- Through precision timing, it is possible to switch to another palette while the screen is being scanned, allowing the use of any one of the six palettes per scanline. The best example of this in use is the game California Games when run on a stock 4.77 MHz 8088. The same can be done with the background color, to create the river and road in Frogger. Another documented example of the technique is in Atarisoft's port of Jungle Hunt to the PC.
- Additional colors are often approximated using dithering, although the low resolution makes it very apparent. In particular, many Sierra games use palette 0 at low intensity and dark blue as the background color. This gives it the three primary RGB colors to work with.
160×100 16 color mode
Technically, this mode is not a graphics mode, but a tweak of the 80×25 text mode. The character cell height register is changed to display only two lines per character cell instead of the normal eight lines. This quadruples the number of text rows displayed from 25 to 100. These "tightly squeezed" text characters are not full characters. The system only displays their top two lines of pixels before moving on to the next row.Character 221. | |
221 with blue text and red background color. | |
221 with red text and blue background color. | |
Character 222. |
Character 221 of the CGA character set consists of a box occupying the entire left half of the character matrix.
Because each character can be assigned different foreground and background colors, it can be colored blue on the left and bright red on the right. This can be reversed by swapping the foreground and background colors.
Using either character 221 or 222, each half of each truncated character cell can thus be treated as an individual pixel—making 160 horizontal pixels available per line. Thus, 160×100 pixels at 16 colors, with an aspect ratio of 1:1.2, are possible.
Although a roundabout way of achieving 16-color graphics display, this works quite well and the mode is even mentioned in IBM's official hardware documentation.
More detail can be achieved in this mode by using other characters, combining ASCII art with the aforesaid technique.
Because the CGA has 16 KiB of graphics memory, not 16,000, it is just as easy to set the number of lines in this mode to 102 instead of 100 for a resolution of 160×102. This uses extra video memory that is normally unused. However, most games did not do this, perhaps out of fear it would only work on some monitors but not others- a fear that is not unfounded as it was later found that certain compatibles have cards that either glitch or ignore any attempt to put the device into this mode.
The same text cell height reduction technique can also be used with the 40×25 text mode. This only made sense when using ASCII art, because without it the resulting resolution would only have been 80×100.
Special effects on composite color monitors
Using the NTSC TV-out instead of an RGBI monitor not only made for less attractive colors, as described above, but as is common with NTSC composite video, the separation between luminance and chrominance is far from perfect, yielding cross-color artifacts. This is especially a problem with 80-column text:It is for this reason that each of the text and graphics modes described above exists twice: once as the normal "color" version and once as a "monochrome" version; the "monochrome" version of each mode would turn off the NTSC color decoding in the viewing monitor completely, resulting in a black-and-white picture, but also no color bleeding, hence, a sharper picture.
On RGBI monitors, the two versions of each mode are identical, with the exception of the 320×200 graphics mode, where the "monochrome" version produces the third palette, as described above.
However, programmers soon found out that this flaw could be turned into an asset, as distinct patterns of high-resolution dots would turn into consistent areas of solid colors, thus allowing the display of completely new artifact colors. Both the standard 320×200 four-color and the 640×200 color-on-black graphics modes could be used with this technique.
Internal operation
Direct colors are the normal 16 colors as described above under "The CGA color palette".Artifact colors are seen because the composite monitor's NTSC chroma decoder misinterprets some of the luminance information as color, as stated before. By carefully placing pixels in appropriate patterns, a skilled programmer can produce particular cross-color artifacts yielding the desired color; either from purely black-and-white pixels in 640×200 mode, or resulting from a combination of direct and artifact colors in 320×200 mode, as seen in these pictures.
Thus, with the choice between 320×200 vs. 640×200 mode, the choice between the two palettes, and one freely-selectable color, it is possible to use many different sets of artifact colors, making for a total gamut of over 100 colors.
Later demonstrations by enthusiasts have increased the maximum number of colors the CGA can display at the same time to 1024. Aside of artifacting, this technique involves a text mode tweak which quadruples the number of text rows, thus offering the benefit of 16 foreground and 16 background colors. Certain ASCII characters such as U and ‼ are then used to produce the necessary patterns, which result in non-dithered images with an effective resolution of 80×100 on a composite monitor.
Availability and caveats
The 320×200 variant of this technique is how the standard BIOS-supported graphics mode looks on a composite color monitor. The 640×200 variant, however, requires modifying a bit directly in the CGA's hardware registers, as a result, it is usually referred to as a separate "mode", often just as "the" composite color mode, since its more distinctive set of artifact colors led it to being more commonly used than the 320×200 variant.Being completely dependent on the NTSC encoding/decoding process, composite color artifacting is not available on an RGBI monitor, nor is it emulated by EGA, VGA or contemporary graphics adapters.
The modern, games-centric PC emulator DOSBox supports a CGA mode, which can emulate a composite monitor. The more common 640×200 composite mode and its artifact colors are supported since version 0.65 ; support for the more complex 320×200 variant has been added in 2012, and released in version 0.74-2.
Resolution and usage
Composite artifacting, whether used intentionally or as an unwanted artifact, reduces the effective horizontal resolution to a minimum of 160 pixels, more for black-on-white or white-on-black text, without changing the vertical resolution. The resulting composite video display with "artifacted" colors was thus sometimes described as a 160×200/16-color "mode", though technically it was a method, not a mode.The low resolution of this composite color artifacting method led to it being used almost exclusively in games. Many of the more high-profile titles optionally, sometimes exclusively, offering graphics optimized for composite color monitors. Ultima II, the first game in the game series to be ported to IBM PC, used CGA composite graphics. King's Quest I was innovative in its use of 16-color graphics on the PC, PCjr and Tandy 1000; even CGA owners could enjoy the 16-color graphics by using a composite color monitor or television, thanks to programmers exploiting the inaccuracies of composite NTSC chroma decoding. Selecting 'RGB mode' at the title screen would instead result in the usual CGA graphics mode limited to 4 colors. In this mode, dithering was employed to simulate extra colors.
High color depth
By taking advantage of the artifact colors, the NTSC color clock, and a method similar to that used in the [|16-color 160×100 pseudo-graphics mode], it's possible to display over 16 colors in composite monitors.160 cycles of the NTSC color clock occur during each line's output, so in 40 column mode each pixel occupies half a cycle and in 80 column mode each pixel uses a quarter of a cycle. Limiting the character display to the upper one or two scanlines, and taking advantage of the pixel arrangement in certain characters of the codepage 437, it is possible to display up to 1024 colors. This technique was used in the demo 8088 MPH.
Limitations, bugs and errata
Video timing on the CGA is provided by the Motorola 6845 video controller. This integrated circuit was originally designed only for character-based alphanumeric displays and can only address a maximum of 128 character rows. To realize graphics modes with 200 scanlines on the CGA, the MC6845 is programmed with 100 character rows per picture and two scanlines per character row. Because the video memory address output by the MC6845 is identical for each scanline within a character row, the CGA must use the MC6845's "row address" output as an additional address bit to fetch raster data from video memory. This implies that unless the size of a single scanline's raster data is a power of two, raster data cannot be laid out continuously in video memory. Instead, graphics modes on the CGA first put only the even-numbered scanlines continuously in a first block of video memory, then a second block of odd-numbered scanlines starting at video memory position 8,192. This arrangement results in additional overhead in graphics modes for software that manipulates video memory.Even though the MC6845 video controller can provide the timing for interlaced video, the CGA's circuitry aligns the synchronization signals in such a way that scanning is always progressive. Therefore, it is impossible to double the vertical resolution to 400 scanlines using a standard 15 kHz monitor.
The higher bandwidth used by 80-column text mode results in random short horizontal lines appearing onscreen if a program writes directly to video memory. The BIOS avoids the problem by only accessing the memory during horizontal retrace, or by temporarily turning off the output during scrolling; while causing the display to blink, IBM decided that doing so was better than snow. The "snow" problem does not occur on any other video adapter, or on most CGA clones.
In the 80-column text mode, the pixel clock frequency is doubled, and all synchronization signals are output for twice the number of clock cycles in order to last for their proper duration. The composite output's color burst signal circuit is an exception: because it still outputs the same number of cycles now at the doubled clock rate, the color burst signal produced is too short for most monitors, yielding no or unstable color. Hence, IBM documentation lists the 80-column text mode as a "feature" only for RGBI and black-and-white composite monitors. Stable color can still be achieved by setting the border color to brown, which happens to produce a phase identical to the correct color burst signal and serves as a substitute for it.
Software support
CGA was widely supported in PC software up until the 1990s. Some of the software that supported the board was:- Windows 3.0
- OS/2 1.1
- Graphics Environment Manager
Competing adapters
CGA had two main competitors:
- For business and word processing use, IBM announced its Monochrome Display Adapter at the same time as CGA. MDA was much more popular than CGA at first. The author of an internal IBM publication stated in October 1981 that he had planned to purchase the CGA adapter but changed his mind after seeing it and MDA display text, observing that "you stare at text a whole lot more than you stare at color graphics". MDA produced a higher resolution text display in 80×25 mode, rendering each character in a box of 9×14 pixels, of which 7×11 were the character itself. This produced sharper and more clearly separated characters than the CGA's 8×8 dots text character matrix allowed. Because of this, MDA was the preferred choice for business use. Also, IBM initially manufactured the MDA card as a printer port/MDA combo card. This meant that users wishing to connect printers to their original IBM PC would have to pay for the MDA card anyway, while the CGA card could be left out to save money. While including the CGA card and connecting an existing TV set for use as a monitor allowed users to forgo the purchase of a monitor, this was not significantly cheaper than buying a monochrome monitor and leaving out the CGA card. Also, 80-column text was almost unusable on color composite displays, and the IBM model 5153 CGA color video display that was required to fully exploit the CGA card's capabilities was even more expensive. Since a great many PCs were sold to businesses, the sharp, high-resolution monochrome text was more desirable for running applications.
- In 1982, the non-IBM Hercules Graphics Card was introduced, the first third-party video card for the PC. In addition to an MDA-compatible text mode, it offered a monochrome graphics mode. With a resolution of 720×348 pixels, it had a higher resolution than that produced by CGA. The Hercules' combination of sharp monochrome text and graphics capabilities made it ideal for running software such as Lotus 1-2-3 that supported business graphics. Some games also had Hercules support, and most others could be made to work with HGC via SimCGA, a TSR which would reformat the CGA graphics memory to HGC format in the background.
- The IBM PCjr and the compatible Tandy 1000 featured onboard "extended CGA" video hardware that extended video RAM beyond 16 kB, thus allowing 16 colors at 320×200 resolution and four colors at 640×200 resolution. Because the Tandy 1000 long outlived the PCjr, the video modes became known as "Tandy Graphics Adapter" or "TGA", and were very popular for games during the 1980s. Similar but less widely used was the Plantronics Colorplus.
- In 1984, IBM also introduced the Professional Graphics Controller, a high-end graphics solution intended for e.g. CAD applications. It was mostly backwards compatible with CGA. The PGC did not see widespread adoption due to its $4,000 price tag, and was discontinued in 1987.
- Paradise Systems introduced in 1984 the first successful CGA-compatible card for MDA monitors. It displayed CGA's 16 colors in shades of monochrome. Because it was hardware-compatible with CGA, the Paradise card did not need special software support or additional drivers.
- Another extension in some CGA-compatible chipsets is a doubled vertical resolution. This gives a higher quality 8×16 text display and an additional 640×400 graphics mode.
Specifications
Connector
The Color Graphics Adapter uses a standard DE-9 connector for direct-drive video. The connector on the card is female and the one on the monitor cable is male.Pin | Function |
1 | Ground |
2 | Ground |
3 | Red |
4 | Green |
5 | Blue |
6 | Intensity |
7 | Reserved |
8 | Horizontal Sync |
9 | Vertical Sync |