Hubbry Logo
Color Graphics AdapterColor Graphics AdapterMain
Open search
Color Graphics Adapter
Community hub
Color Graphics Adapter
logo
8 pages, 0 posts
0 subscribers
Be the first to start a discussion here.
Be the first to start a discussion here.
Color Graphics Adapter
Color Graphics Adapter
from Wikipedia
Color Graphics Adapter
IBM CGA graphics card
Release date1981; 44 years ago (1981)
ArchitectureMotorola 6845, ATI CW16800
Cards
Entry-levelIBM Color Graphics Adapter, ATi Graphics Solution Rev 3, ATi Color Emulation Card, Tseng Labs ColorPAK,
Mid-rangeATi Graphics Solution plus, ATi Graphics Solution Plus SP, ATi Graphics Solution SR, Number Nine Graphics System
High-endATi Small Wonder Graphics Solution, Tseng Labs EVA/480
EnthusiastATi Small Wonder Graphics Solution with game port
History
Successor

The Color Graphics Adapter (CGA), originally also called the Color/Graphics Adapter or IBM Color/Graphics Monitor Adapter,[1] introduced in 1981, was IBM's first color graphics card for the IBM PC and established a de facto computer display standard.

Hardware design

[edit]

The original IBM CGA graphics card was built around the Motorola 6845 display controller,[2] came with 16 kilobytes of video memory built in, and 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 (16 colors).

The CGA card could be connected either to a direct-drive CRT monitor using a 4-bit digital (TTL) RGBI interface, such as the IBM 5153 color display, or to an NTSC-compatible television or composite video monitor via an RCA connector.[3] The RCA connector provided only baseband video, so to connect the CGA card to a television set without a composite video input required a separate RF modulator.[1]

IBM produced the 5153 Personal Computer Color Display for use with the CGA, but this was not available at release[4] and would not be released until March 1983.[5]

Although IBM's own color display was not available, customers could either use the composite output (with an RF modulator if needed), or the direct-drive output with available third-party monitors that supported the RGBI format and scan rate. Some third-party displays lacked the intensity input, reducing the number of available colors to eight,[4] and many also lacked IBM's unique circuitry which rendered the dark-yellow color as brown, so any software that used brown would be displayed incorrectly.

Output capabilities

[edit]

CGA offered several video modes.[6][7]

Graphics modes:

  • 160 × 100 in 16 colors, chosen from a 16-color palette, utilizing a specific configuration of the 80 × 25 text mode.
    • This used 4 bits per pixel, with a total memory use of (160 × 100 × 4) / 8 = 8 kilobytes.
  • 320 × 200 in 4 colors, chosen from 3 fixed palettes, with high- and low-intensity variants, with color 1 chosen from a 16-color palette.
    • This used 2 bits per pixel, with a total memory use of (320 × 200 × 2) / 8 = 16 kilobytes.
  • 640 × 200 in 2 colors, one black, one chosen from a 16-color palette.
    • This used 1 bit per pixel, with a total memory use of (640 × 200) / 8 = 16 kilobytes.

Some software achieved greater color depth by utilizing artifact color when connected to a composite monitor.

Text modes:

  • 40 × 25 with 8 × 8 pixel font (effective resolution of 320 × 200)
  • 80 × 25 with 8 × 8 pixel font (effective resolution of 640 × 200)

IBM intended that CGA be compatible with a home television set. The 40 × 25 text and 320 × 200 graphics modes are usable with a television, and the 80 × 25 text and 640 × 200 graphics modes are intended for a monitor.[2]

Color palette

[edit]

CGA uses a 4-bit RGBI 16-color gamut, but not all colors are available at all times, depending on which graphics mode is being used. In the medium- and high-resolution modes, colors are stored at a lower bit depth and selected by fixed palette indexes, not direct selection from the full 16-color palette.

When four bits are used (for low-resolution mode, or for programming color registers) they are arranged according to the RGBI color model:[8]

  • The lower three bits represent red, green, and blue color components
  • The fourth "intensifier" bit, when set, increases the brightness of all three color components (red, green, and blue).[9]
CGA palette internal bit arrangement (4-bit RGBI)[8]
Color I R G B Color I R G B
Black 0 0 0 0 Gray 2 1 0 0 0
Blue 0 0 0 1 Light Blue 1 0 0 1
Green 0 0 1 0 Light Green 1 0 1 0
Cyan 0 0 1 1 Light Cyan 1 0 1 1
Red 0 1 0 0 Light Red 1 1 0 0
Magenta 0 1 0 1 Light Magenta 1 1 0 1
Brown 0 1 1 0 Light Yellow 1 1 1 0
Gray 1 0 1 1 1 White 1 1 1 1

These four colour bits are then interpreted internally by the monitor, or converted to NTSC colours (see below).

With an RGBI monitor

[edit]

When using a direct-drive monitor, the four color bits are output directly to the DE-9 connector at the back of the card.

Within the monitor, the four signals are interpreted to drive the red, green and blue color guns. With respect to the RGBI color model described above, the monitor would translate the digital four-bit color number to some seven distinctive analog voltages in the range from 0.0 to 1.0 for each gun.[10]

dark yellow
6 #AAAA00

Color 6 is treated specially; normally, color 6 would become dark yellow, as seen to the right, but in order to achieve a more pleasing brown tone, special circuitry in most RGBI monitors, starting with the IBM 5153 color display,[11] makes an exception for color 6 and changes its hue from dark yellow to brown by reducing the analogue green signal's amplitude. The exact amount of reduction differed between monitor models: the original IBM 5153 Personal Computer Color Display reduces the green signal's amplitude by about one third,[12] while the IBM 5154 Enhanced Color Display internally converts all 4-bit RGBI color numbers to 6-bit ECD color numbers,[8] which amounts to halving the green signal's amplitude. The Tandy CM-2,[13] CM-4[14] and CM-11[15] monitors provide a potentiometer labelled "BROWN ADJ." to adjust the amount of green signal reduction.

This "RGBI with tweaked brown" palette was retained as the default palette of later PC graphics standards such as EGA and VGA, which can select colors from much larger gamuts, but default to these until reprogrammed.

Later video cards/monitors in CGA emulation modes would approximate the colors with the following formula:

red   := 2/3×(colorNumber & 4)/4 + 1/3×(colorNumber & 8)/8
green := 2/3×(colorNumber & 2)/2 + 1/3×(colorNumber & 8)/8
blue  := 2/3×(colorNumber & 1)/1 + 1/3×(colorNumber & 8)/8
if (color == 6)
   green := green * 2/3

which yields the canonical CGA palette:[10]

Full CGA 16-color palette
0 black
#000000
8 dark gray
#555555
1 blue
#0000AA
9 light blue
#5555FF
2 green
#00AA00
10 light green
#55FF55
3 cyan
#00AAAA
11 light cyan
#55FFFF
4 red
#AA0000
12 light red
#FF5555
5 magenta
#AA00AA
13 light magenta
#FF55FF
6 brown
#AA5500
14 yellow
#FFFF55
7 light gray
#AAAAAA
15 white
#FFFFFF

Note: Color hex values shown are 8-bit RGB equivalents, internally CGA is 4-bit RGBI

With a composite color monitor/television set

[edit]
CGA's 16 colors when using the NTSC output (post-1983 card revision)

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.[16][17]

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.[18]

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,[19] and are different for later CGAs due to the addition of additional resistors.[20]

Standard text modes

[edit]

CGA offers four BIOS text modes (Modes 0 to 3, called alphanumeric or A/N modes in IBM's documentation). In these modes, individual pixels on the screen cannot be addressed directly. Instead, the screen is divided into a grid of character cells, each displaying a character defined in one of two bitmap fonts, "normal" and "thin", included in the card's ROM. The fonts are fixed and cannot be modified or selected from software, only by a jumper on the board itself.

Fonts are stored as bitmaps at a color depth of 1-bit, with a "1" representing the character and a "0" representing the background. These colors can be chosen independently, for each character on the screen, from the full 16-color CGA palette. The character set is defined by hardware code page 437.

The font bitmap data is only available to the card itself, it cannot be read by the CPU. In graphics modes, text output by the BIOS operates by copying text from the font ROM bit-by-bit to video memory.

40 × 25 mode

[edit]

BIOS Modes 0 and 1 are both 40 columns by 25 rows text modes, with each character a pattern of 8 × 8 dots. The effective screen resolution in this mode is 320 × 200 pixels (a pixel aspect ratio of 1:1.2.) The card has sufficient video RAM for eight different text pages in this mode.

The difference between these two modes can only be seen on a composite monitor, where mode 0 disables the color burst, making all text 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 mode

[edit]

BIOS Modes 2 and 3 select 80 columns by 25 rows text modes, with each character still an 8 × 8 dot pattern, but displayed at a higher scan rate. The effective screen resolution of this mode is 640 × 200 pixels. In this mode, the card has enough video RAM for four different text pages.

As with the 40-column text modes, Mode 2 disables the color burst in the composite signal and Mode 3 enables it.

Textmode color

[edit]

Each character cell stored four bits for foreground and background color. However, in the card's default configuration, the fourth bit of the background color does not set intensity, but sets the blink attribute for the cell. All characters on the screen with this bit set will periodically blink, meaning their foreground color will be changed to their background color so the character becomes invisible. All characters blink in unison.

By setting a hardware register, the blink feature can be disabled, restoring access to high-intensity background colors.

All blinking characters on the screen blink in sync. The blinking attribute effect is enabled by default and the high-intensity background effect is disabled; disabling blinking is the only way to freely choose the latter eight-color indexes (8-15) for the background color.

Notably, the GW-BASIC and Microsoft QBASIC programming languages 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. This was still possible however by directly programming the hardware registers using the OUT statement of the BASIC language.

Standard graphics modes

[edit]

CGA offers graphics modes at three resolutions: 160 × 100, 320 × 200 and 640 × 200. In all modes every pixel on the screen can be set directly, but the color depth for the higher modes does not permit selecting freely from the full 16-color palette.

320 × 200

[edit]

In the medium-resolution 320 × 200 modes (Modes 4 and 5), each pixel is two bits, which select colors from a four-color palette. In mode 4, there are two palettes, and in mode 5 there is a single palette.

CGA hardware palettes on a RGBI monitor
# Mode 4 Mode 5
Palette 0 Palette 1 low intensity high intensity
low intensity high intensity low intensity high intensity
0 0 – background 0 – background 0 – background 0 – background 0 – background 0 – background
1 2 – green 10 – light green 3 – cyan 11 – light cyan 3 – cyan 11 – light cyan
2 4 – red 12 – light red 5 – magenta 13 – light magenta 4 – red 12 – light red
3 6 – brown 14 – yellow 7 – light gray 15 – white 7 – light gray 15 – white

Several choices can be made by programming hardware registers. First, the selected palette. Second, the intensity – which is defined for the entire screen, not on a per-pixel basis. Third, color 0 (the "background" color) can be set to any of the 16 colors.

The specific BIOS graphics mode influences which palettes are available. BIOS Mode 4 offers two palettes: green/red/brown and cyan/magenta/white.

As with the text modes 0 and 2, Mode 5 disables the color burst to allow colors to appear in grayscale on composite monitor. However, unlike the text modes, this also affects the colors displayed on an RGBI monitor, altering them to the cyan/red/white palette seen above. This palette is not documented by IBM, but was used in some software.

640 × 200

[edit]

In the high-resolution 640 × 200 mode (Mode 6), each pixel is one bit, providing two colors which can be chosen from the 16-color palette by programming hardware registers.

In this mode, the video picture is stored as a simple bitmap, with one bit per pixel setting the color to "foreground" or "background". By default the colors are black and bright white, but the foreground color can be changed to any entry in the 16-color CGA palette. The background color cannot be changed from black on an original IBM CGA card.

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

[edit]

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 also affects the border 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 (i.e. without changing the contents of the video RAM).
  • In text mode, the border color (displayed outside the regular display area and including the overscan area) can be changed from the default black to any of the other 15 colors.
  • Through precision timing, it is possible to switch to another palette while the video is being output, allowing the use of any one of the six palettes per scanline. An example of this is California Games,[21] when run on a stock 4.77 MHz 8088. Running on a faster computer does not produce the effect, as the method the programmers used to switch palettes at predetermined locations is extremely sensitive to machine speed. The same can be done with the background color, as is used to create the river and road in Frogger.[22] Another documented example of the technique is in Atarisoft's port of Jungle Hunt to the PC.
  • Additional colors can be approximated using dithering.
  • Using palette 0 at low intensity and dark blue as the background color provides the three primary RGB colors, as well as brown.

Some of these above tweaks can be combined. Examples can be found in several games.[23]

160 × 100 16 color mode

[edit]
A single big "pixel" in 160 × 100 mode. This is the two top rows of half of character 221. Note the eight constituent non-square pixels and the overall 1:1.2 aspect ratio.
Title screen of PakuPaku, a Pac-Man clone that uses 160 × 100 mode

Technically, this mode is not a graphics mode, but a tweak of the 80 × 25 text mode.[24] 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 (eight each) 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. (Character 222 consists of a box occupying the entire right half.)

Because each character can be assigned different foreground and background colors, it can be colored (for example) blue on the left (foreground color) and bright red on the right (background color). 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 a 16-color graphics display, this works quite well and the mode is even mentioned (although not explained) in IBM's official hardware documentation.[25] This mode was used as early as 1983 on the game Moon Bugs.[26][27][28]

More detail can be achieved in this mode by using other characters, combining ASCII art with the aforesaid technique. This was explored by Macrocom, Inc on two games: Icon: Quest for the Ring (released in 1984) and The Seven Spirits of Ra (released in 1987).[28][29][30]

The same text cell height reduction technique can also be used with the 40 × 25 text mode, yielding a resolution of 80 × 100.

Composite output

[edit]

Using the composite output instead of an RGBI monitor produced lower-quality video, due to NTSC's inferior separation between luminance and chrominance.[31] This is especially a problem with 80-column text:[32]

80-column text on RGB (left) vs. composite monitor (right)

For this reason, each of the text and graphics modes has a duplicate mode which disables the composite colorburst, resulting in a black-and-white picture, but also eliminating color bleeding to produce a sharper picture. On RGBI monitors, the two versions of each mode are usually identical, with the exception of the 320 × 200 graphics mode, where the "monochrome" version produces a third palette.

Extended artifact colors

[edit]

Programmers discovered 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

[edit]

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. By carefully placing pixels in appropriate patterns, a programmer can produce specific cross-color artifacts yielding a desired new 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 on the following pictures:

Thus, with the choice between 320 × 200 vs. 640 × 200 mode, the choice between the two palettes, and one freely-selectable color (the background in 320 × 200 modes and the foreground in 640 × 200 mode), it is possible to use many different sets of artifact colors, making for a total gamut of over 100 colors.

1024 colors in composite mode
1024 colors in composite mode

Later demonstrations by enthusiasts have increased the maximum number of colors the CGA can display at the same time to 1024.[33][34] This technique involves a text mode tweak which quadruples the number of text rows. 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.[33]

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.[33] This technique was used in the demo 8088 MPH.[34]

Availability and caveats

[edit]

The 320 × 200 variant of this technique (see above) is how the standard BIOS-supported graphics mode looks on a composite color monitor. The 640 × 200 variant, however, requires modifying a bit (color burst disable) directly in the CGA's hardware registers. As a result, it is usually referred to as a separate "mode".

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's color artifacting. Both 640 × 200 composite mode and the more complex 320 × 200 variant are supported.

Resolution and usage

[edit]

Composite artifacting, whether used intentionally or as an unwanted artifact, reduces the effective horizontal resolution to a maximum 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 is sometimes described as a 160 × 200 / 16-color "mode", though technically it was a technique using a standard mode.

The low resolution of this composite color artifacting method led to it being used almost exclusively in games. Many high-profile titles offered 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 also offered 16-color graphics on the PC, PCjr and Tandy 1000, but provided a 'RGB mode' at the title screen which would utilize only the ordinary CGA graphics mode, limited to 4 colors.

Limitations, bugs and errata

[edit]

Video timing on the CGA is provided by the Motorola 6845 video controller. This integrated circuit was originally designed only for character-based alphanumeric (text) displays and can 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 (i.e. the scanline within the character row) as an additional address bit to fetch raster data from video memory.[35]

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 store the even-numbered scanlines contiguously in memory, followed by 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. Consequently, 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 (known as "snow") if a program writes directly to video memory during screen drawing. The BIOS avoids the problem by only accessing the memory during horizontal retrace, or by temporarily turning off the output during scrolling. While this causes the display to flicker, IBM decided that doing so was better than snow.[2] 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.[36] 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.

Dual-head support

[edit]

The CGA was released alongside the IBM MDA, and can be installed alongside the MDA in the same computer. A command included with PC DOS permits switching the display output between the CGA and MDA cards.[37] Some programs like Lotus 1-2-3[38] and AutoCAD support using both displays concurrently.

Software support

[edit]

CGA was widely supported in PC software up until the early 1990s. Some of the software that supported the board was:

Competing adapters

[edit]

BYTE in January 1982 described the output from CGA as "very good—slightly better than color graphics on existing microcomputers".[4] PC Magazine disagreed, reporting in June 1983 that "the IBM monochrome display is absolutely beautiful for text and wonderfully easy on the eyes, but is limited to simple character graphics. Text quality on displays connected to the color/graphics adapter ... is at best of medium quality and is conducive to eyestrain over the long haul".[40]

In a retrospective commentary, Next Generation also took a negative view on the CGA, stating: "Even for the time (early 1980s), these graphics were terrible, paling in comparison to other color machines available on the market."[41]

CGA had several competitors:

  • For business and word processing use, IBM provided the Monochrome Display Adapter (MDA) at the same time as CGA. MDA was much more popular than CGA at first.[42] 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 (HGC) 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, higher than the CGA.
  • Also in 1982 the Plantronics Colorplus board was introduced, with twice the memory of a standard CGA board (32k, compared to 16k). The additional memory can be used in graphics modes to double the color depth, giving two additional graphics modes—16 colors at 320 × 200 resolution, or 4 colors at 640 × 200 resolution.
  • The IBM PCjr (1984) and compatible Tandy 1000 (1985) featured onboard "extended CGA" video hardware that extended video RAM beyond 16 kB, 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.

Other alternatives:

  • 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.[43]
  • Another extension in some CGA-compatible chipsets (including those in the Olivetti M24 / AT&T 6300, the DEC VAXmate, and some Compaq and Toshiba portables) is a doubled vertical resolution. This gives a higher quality 8 × 16 text display and an additional 640 × 400 graphics mode.

The CGA card was succeeded in the consumer space by IBM's Enhanced Graphics Adapter (EGA) card, which supports most of CGA's modes and adds an additional resolution (640 × 350) as well as a software-selectable palette of 16 colors out of 64 in both text and graphics modes.

Specifications

[edit]

DE-9 connector for RGBI monitor

[edit]
DE-9 connector seen when looking at the back of a PC

The Color Graphics Adapter uses a standard DE-9 connector for direct-drive video (to an RGBI monitor). The connector on the card is female and the one on the monitor cable is male.

CGA DE-9 connector pin assignments
Pin Function
1 Ground
2 Ground
3 Red
4 Green
5 Blue
6 Intensity
7 Reserved
8 Horizontal Sync
9 Vertical Sync
CGA TTL signal
Type Digital, TTL
Resolution 640h × 200v, 320h × 200v
H-freq 15699.8 Hz (14.318181 MHz/8/114)
V-freq 59.923 Hz (H-freq/262)
Colors 16

RCA connector for composite monitor or television

[edit]
Back of a CGA Video Adapter board, with the RCA composite output connector visible on the right

The Color Graphics Adapter uses a standard RCA connector for connection to an NTSC-compatible television or composite video monitor.[3] The connector on the card is female and the one on the monitor cable is male.

CGA analog signal
Type Analog composite NTSC compatible
Resolution 640h × 200v, 320h × 200v
H-freq 15699.8 Hz (14.318181 MHz/8/114)
V-freq 59.923 Hz (H-freq/262)
Colors 16, hundreds of artifact colors

See also

[edit]

References

[edit]
[edit]
Revisions and contributorsEdit on WikipediaRead on Wikipedia
from Grokipedia
The Color Graphics Adapter (CGA), introduced by in August 1981 as an optional for the original (model 5150), was the first color display standard for the platform, enabling both alphanumeric text and basic pixel-based graphics in color or . It represented a significant advancement over the contemporaneous Monochrome Display and Printer Adapter (MDA) by supporting vivid color output on compatible monitors or televisions, thus broadening the PC's appeal for business, gaming, and educational applications during the early personal computing era. The CGA card utilized a cathode-ray tube (CRT) controller chip, 16 KB of dual-ported video memory mapped to address B8000h, and an 8 KB ROM character generator supporting 256 characters in 8x8 pixel matrices, allowing for flexible display configurations. It offered four primary text modes—40×25 or 80×25 characters in either black-and-white or color (with 16 foreground and 8 background colors and blinking attributes; underline and reverse video effects were typically implemented in software)—and graphics modes including 320×200 pixels with 4 colors selected from a palette of 16 (with palette variants that could appear monochrome on certain outputs) and 640×200 pixels with 2 colors. These modes operated at a non-interlaced 60 Hz with a video bandwidth of up to 14 MHz, and the adapter's 16 KB memory could store up to eight 40×25 text screens or four 80×25 screens, facilitating smooth switching between displays. Physically, the CGA installed in one of the IBM PC's five expansion slots and featured multiple output options, including a 9-pin (DE-9) connector for direct RGBI (, , , Intensity) drive to color monitors, a phono jack for output, and an auxiliary for an optional to connect to standard televisions, along with a interface. Programming access was provided via I/O ports 3D0h–3DFh (or 3B0h–3BFh in emulation), interrupt level IRQ2, and BIOS routines starting at offset F000:FE6Eh, with user-definable character sets extendable through interrupt 1Fh. Despite its limitations—such as the restricted color palette and low resolution, which later prompted successors like the (EGA) in 1984—the CGA established foundational video standards for IBM-compatible PCs, influencing software development and hardware compatibility for over a decade.

History and Development

Release and Context

The Color Graphics Adapter (CGA) was introduced by in 1981 as an optional for the newly launched IBM Personal Computer (model 5150), marking the company's first foray into color graphics for personal computing. Priced at $300, the CGA was designed to plug into one of the PC's expansion slots, providing users with an affordable upgrade path from displays to support color output for both text and basic graphics applications. This release coincided directly with the IBM PC's debut on August 12, 1981, positioning the system as a versatile platform for business and emerging home computing needs. In the early personal computer market of the late 1970s and early 1980s, the IBM PC and its CGA option entered a landscape dominated by systems like the Apple II, which had offered color graphics since its 1977 launch and appealed strongly to hobbyists, educators, and gamers through vibrant visuals in software such as games and educational tools. IBM aimed to bridge the gap between professional business computing—previously limited to text-only monochrome displays like the Monochrome Display Adapter (MDA)—and the colorful, interactive experiences that drove consumer adoption in the home market. The CGA's inclusion addressed this by enabling color for text modes and simple graphics, facilitating applications in data visualization for business users while opening doors for entertainment software that could leverage limited color palettes. Key to the CGA's functionality was its reliance on the cathode-ray tube controller for timing and display synchronization, allowing the IBM PC to output to compatible color monitors and thus expand its appeal beyond corporate environments. This strategic release helped the IBM PC gain traction in a competitive field, eventually standardizing color as an essential feature in the evolving PC ecosystem.

Design Objectives

The IBM Color/Graphics Monitor Adapter (CGA) was engineered primarily to introduce affordable color display capabilities to the family, extending beyond the limitations of prior systems while targeting business environments that benefited from enhanced visual differentiation in text-based applications. This design emphasized cost-effectiveness for professional users, enabling features like color attributes to improve readability and data organization in , alongside basic support for emerging gaming applications to broaden the PC's appeal. A key compromise in the CGA's development was restricting the maximum resolution to 640×200 pixels, which allowed the adapter to repurpose existing television broadcasting standards such as and PAL, thereby minimizing hardware complexity and production costs compared to more advanced, higher-resolution systems of the era. This approach not only reduced expenses but also facilitated compatibility with readily available consumer display equipment, making color graphics accessible without requiring specialized, expensive monitors. The CGA's objectives were heavily influenced by IBM's established monochrome heritage, particularly the Monochrome Display Adapter (MDA), with the goal of ensuring seamless for text modes to support legacy and ease the transition for users accustomed to high-contrast monochrome displays. By building directly on the MDA foundation, the design maintained essential text functionality while layering in color support via interfaces like RGBI, striking a balance between innovation and reliability in early personal computing ecosystems.

Hardware Design

Technical Architecture

The Color Graphics Adapter (CGA) relies on a Motorola 6845 CRT controller as its primary video address generator, which handles raster scan operations, video timing signals, memory addressing, display refresh, cursor positioning, and synchronization with the display device. This chip interfaces with 16 KB of dual-ported dynamic random-access memory (DRAM) for video storage, accessible by the CPU starting at address B8000h, enabling simultaneous access by the processor and the display circuitry to store and retrieve pixel, character, font, and attribute data. Complementary TTL logic circuits form the composite color generator, which processes memory contents to produce baseband video color signals, ensuring efficient generation of analog output from digital data. The CGA's 16 KB is organized into segmented pages to support distinct data types: dedicated regions for character attributes, a fixed ROM-based font generator providing 256 character patterns, and allocatable areas for pixel bitmaps or additional attribute storage. This mapping allows for a 16 KB regeneration buffer on the color card, with the 6845 controller dynamically addressing memory during scan lines to fetch and assemble display elements without interrupting CPU operations. The dual-port design resolves contention between CPU writes and video readout through prioritized arbitration logic, maintaining stable refresh rates. Clocking is derived from a 14.31818 MHz master oscillator, which is divided to generate key timing signals: division by 3 yields the 4.77 MHz processor clock, while division by 4 produces the 3.58 MHz color burst subcarrier for compatibility. For pixel-level timing, the clock is further divided to support bandwidths such as 7 MHz, 14 MHz in operations, with the 6845 using these to control horizontal and vertical scan rates via programmable registers. This hierarchical clock distribution ensures precise synchronization across the TTL-based timing generator, , and color encoder, forming the operational backbone of the adapter's display pipeline.

Connector Specifications

The Color Graphics Adapter (CGA) utilized a DE-9 (also known as DB-9) connector for its primary RGBI video output, providing a digital interface compatible with dedicated color monitors such as the 5153. This 9-pin female connector on the card carried TTL-level signals for red, green, blue, intensity, horizontal sync, vertical sync, and grounds, enabling direct-drive display of the CGA's 16-color palette without external modulation. The pin assignments for the DE-9 connector are as follows:
PinSignalDescription
1GNDGround
2GNDGround
3RRed (TTL)
4GGreen (TTL)
5BBlue (TTL)
6IIntensity (TTL)
7RESReserved
8HSYNCHorizontal Sync (TTL)
9VSYNCVertical Sync (TTL)
These assignments allowed for precise digital transmission of color and synchronization data at TTL logic levels, typically ranging from 0 V (low) to 5 V (high), with low states defined as 0–0.8 V and high states as 2–5 V. In addition to the DE-9, the CGA featured an RCA phono jack for output, designed for compatibility with televisions or composite monitors. This analog output encoded the four-bit RGBI color information into a modulated signal, where was derived from the combined intensity of the color bits and was phase-modulated based on the specific color values, producing artifact colors on composite displays. The RGBI signals on the DE-9 operated at TTL-compatible digital levels of approximately 5 V peak-to-peak, while the composite RCA output adhered to standard specifications at 1 V peak-to-peak, ensuring interoperability with consumer television equipment.

Display Capabilities

Output Interfaces

The Color Graphics Adapter (CGA) features two primary output interfaces designed to accommodate both dedicated computer monitors and consumer television sets, enabling versatile display options for early systems. The RGBI digital interface provides a high-fidelity signal optimized for color monitors, while the composite video interface offers compatibility with standard televisions and composite monitors through an . These interfaces allow the CGA to support a range of text and graphics modes, with color reproduction varying based on the connected display type. The RGBI digital interface utilizes a 9-pin D-shell connector to deliver TTL-level signals for , , , and intensity (RGBI), supporting a 4-bit that enables up to 16 discrete colors from a predefined palette. This interface is intended for direct connection to compatible color monitors, such as the 5153 Color Display, where it produces sharp, artifact-free imagery in modes like 320×200 pixels with four colors or 640×200 pixels in . The digital nature of the RGBI output ensures precise color and resolution without the signal degradation common in analog connections, making it suitable for professional and technical applications requiring accurate visual representation. In contrast, the composite video interface employs a standard female RCA phono jack to output a compatible with televisions or composite monitors, facilitating broader consumer accessibility by allowing connection to home entertainment devices often requiring an for channel tuning. This interface supports the same display modes as RGBI but encodes color information in a manner that can introduce visual artifacts and reduced color fidelity due to the limitations of composite . While capable of displaying color in text and low-to-medium resolution modes, the composite output prioritizes compatibility over precision, resulting in softer imagery and potential color bleeding compared to the digital alternative. The CGA card supports simultaneous output to both the RGBI and composite interfaces from a single adapter, allowing users to connect multiple displays concurrently for demonstration or multi-viewing purposes. However, this dual-output capability shares the card's processing and resources, imposing limitations such as synchronized signal generation and no independent mode selection per interface, which can constrain performance in demanding scenarios. This feature enhances the adapter's flexibility in mixed environments, such as educational or small office settings where both high-quality monitor viewing and projection are desired.

Color Palette Basics

The Color Graphics Adapter (CGA) employs a 4-bit color indexing system that supports 16 distinct colors, numbered from 0 to 15, derived from combinations of , , , and intensity components. These colors are fixed and predefined, allowing selection through attributes in text modes or values in graphics modes. The palette includes:
IndexColor NameRGBI Bits (I R G B)
0Black0000
10001
20010
30011
4Red0100
50101
6Brown0110
7Light Gray0111
8Dark Gray1000
9Bright Blue1001
10Bright Green1010
11Bright Cyan1011
121100
13Bright Magenta1101
141110
15White1111
This indexing follows a binary progression where lower indices (0-7) represent base colors without intensity, and higher indices (8-15) incorporate intensity for brighter variants. The colors are encoded using RGBI format, with four bits directly mapping to intensity (I, bit 3), red (R, bit 2), green (G, bit 1), and blue (B, bit 0). On digital RGB monitors, such as the IBM 5153 Color Display, this encoding produces precise, discrete colors by driving separate TTL-level signals for R, G, B, and I, ensuring the full 16-color palette is rendered accurately without overlap or degradation. The intensity bit effectively boosts the RGB components, creating the distinction between base hues like brown (index 6) and its intensified counterpart, yellow (index 14). In contrast, when connected via output—such as to -compatible televisions or monitors—the palette experiences degradation due to signal modulation. The RGBI signals are combined into a single composite stream, which can result in color bleeding, reduced contrast, or failure to distinguish intensity levels on some displays, limiting the effective palette to fewer distinguishable hues compared to the standard 16 on RGBI outputs. This variation arises from the encoding process, where and are intertwined, potentially altering perceived colors like rendering as a darker . In text modes, these palette colors are applied via character attributes for foreground and background rendering.

Text Modes

40 × 25 Character Mode

The 40 × 25 character mode of the Color Graphics Adapter (CGA) supports a text-based display consisting of 40 columns and 25 rows of characters, with each character occupying an 8 × 8 cell to yield an effective resolution of 320 × 200. This configuration draws from a built-in 8 × 8 character generator ROM containing 256 alphanumeric and graphic symbols, where the font is typically rendered in a 7 × 7 double-dotted pattern within the cell for improved visibility on low-resolution displays. It corresponds to modes 0 (color) and 1 (black-and-white). This mode requires 2 KB of video RAM from the CGA's 16 KB total, allocated as 1,000 bytes for character codes and 1,000 bytes for associated color attributes, enabling efficient storage for the full screen buffer at base memory address B8000h. The display timing is managed by the onboard Motorola MC6845 CRT controller, which uses a 14.318 MHz master oscillator divided to produce a 7.159 MHz pixel clock specifically for low-resolution operations like this mode, resulting in a non-interlaced vertical refresh rate of approximately 60 Hz. Horizontal timing accommodates 40 characters plus border, with the character clock effectively at about 0.895 MHz to support the reduced density compared to higher-column modes. A low-resolution text mode available on IBM PC systems, selectable via BIOS INT 10h function 00h with AL=00h for color or AL=01h for black-and-white; the power-on default is 40×25 black-and-white even on CGA. It provides clear readability on CGA-compatible RGB monitors or, via the composite video output, on standard home television sets where its lower horizontal bandwidth demands ensured better synchronization and compatibility without the color bleeding issues seen in denser layouts. Color application in this mode relies on per-character attributes for foreground and background selection from a 16-color palette, with optional blinking, though detailed attribute handling is mode-agnostic across text resolutions.

80 × 25 Character Mode

The 80 × 25 character mode of the Color Graphics Adapter (CGA) provides a text resolution of 80 columns by 25 rows, corresponding to a pixel resolution of 640 × 200. Each character occupies an 8 × 8 cell, with the typically rendered in a 7 × 7 pattern and one scanline reserved for in lowercase letters. This mode utilizes 4 KB of video RAM per display page (calculated as 80 columns × 25 rows × 2 bytes per character, where one byte holds the ASCII code and the other the attribute byte), with the CGA's total 16 KB supporting up to four such pages (4 KB each), accessible starting at memory address B800:0000h. It corresponds to modes 2 (color) and 3 (black-and-white). The display operates at a 60 Hz vertical in non-interlaced fashion, with a horizontal scan frequency of approximately 15.75 kHz, enabling compatibility with monitors and RGB displays. Horizontal timing is finer than in lower-density modes, with the Motorola MC6845 cathode-ray tube controller (CRTC) programmed to generate 16 character clock cycles per column (eight visible pixels plus blanking intervals), supporting the denser 640-pixel width without exceeding standard television signal constraints. As the primary text mode for professional and productivity applications on early PCs, the 80 × 25 configuration served as the default for command-line interfaces, setup screens, and software such as word processors and spreadsheets, offering sufficient density for tabular data and code editing while integrating with the shared 16-color attribute system for foreground/background and blinking effects. This emphasis on high-density text distinguished it from coarser modes suited to television viewing, prioritizing on dedicated monitors for business use.

Text Mode Color Attributes

In CGA text modes, each screen character is defined by a pair of bytes in video memory: the first byte specifies the character code from the 256-entry ROM font, while the second byte is the attribute byte that determines the visual styling of that character. The attribute byte consists of 8 bits with the following structure:
BitFunctionDescription
7Blink/Background IntensityWhen the blink enable bit (bit 5) in the CGA mode control register is set (standard for text modes), bit 7 enables blinking for the character; otherwise, it sets background intensity for brighter backgrounds.
6Background RedSets the red component of the background color (1 = red enabled).
5Background GreenSets the green component of the background color (1 = green enabled).
4Background BlueSets the blue component of the background color (1 = blue enabled).
3Foreground IntensityEnables high-intensity (bright) mode for the foreground color (1 = bright).
2Foreground RedSets the red component of the foreground color (1 = red enabled).
1Foreground GreenSets the green component of the foreground color (1 = green enabled).
0Foreground BlueSets the blue component of the foreground color (1 = blue enabled).
This bit layout supports 16 foreground colors—combining the 3 RGB bits with the intensity bit for 8 standard and 8 bright shades—and 8 background colors, limited by the absence of a dedicated intensity bit for backgrounds in standard configurations. Rendering occurs by combining the character glyph with the attributes: the hardware retrieves an 8×8 pixel pattern from the ROM character generator using the character code, then fills the 'on' (lit) pixels with the selected foreground color and the 'off' pixels with the background color, producing a uniform color block per 8×8 cell on the display. In practice, the default ROM font uses a 7×7 double-dot pattern for thicker characters, and colors map to the CGA's base palette, where bright variants (e.g., black+intensity appears as dark gray) enhance visibility on composite monitors. Key effects include high-intensity foreground, which bit 3 activates to render bolder, brighter text by selecting the upper 8 palette entries, improving contrast without altering the base RGB mix. , controlled by bit 7 in blink-enabled modes, causes the affected character to periodically invert or alternate visibility—typically at a 2 Hz rate—allowing per-character emphasis, though it affects the entire screen's refresh if multiple characters blink. Limitations of the attribute system include the lack of hardware support for effects like underlining, which must be emulated via software using specific characters from the extended set or manipulation; the also restricts backgrounds to non-bright colors in standard text modes to prioritize functionality.

Graphics Modes

320 × 200 Mode

The 320 × 200 mode of the Color Graphics Adapter (CGA) provides a medium-resolution option capable of displaying four colors simultaneously across a 320--wide by 200--high display area. This mode operates at a 2-bit per , allowing each to select from one of four possible color indices (00, 01, 10, or 11 in binary), with data packed four per byte in video . The mode utilizes 16 KB of dedicated video RAM, organized into two separate 8 KB banks to support non-interlaced scanning: even-numbered scanlines (rows 0, 2, ..., 198) are mapped to addresses B8000h through B9FFFh, while odd-numbered scanlines (rows 1, 3, ..., 199) occupy BA000h through BBFFFh. This banking arrangement enables software to render independent content for even and odd lines within the same frame, which some applications exploited for visual effects like line alternation in color patterns, particularly when combined with output. Each 80-byte row spans the full 320-pixel width, with the mode running at a 14 MHz clock for compatibility with color monitors or televisions. Color selection in this mode draws from a fixed palette of 16 possible colors (combinations of , , , and intensity bits), but only four are active at once: a programmable background color (selected from the full 16 via port 3D9h bits 0-3) plus three foreground colors determined by a software-selectable palette controlled via port 3D9h bit 5. The default palette (palette 1) maps the foreground indices to (01), (10), and brown/yellow (11), while the alternate palette (palette 2, often used as default in practice) assigns (01), (10), and (11), with typically serving as the background for . This limited but vibrant scheme prioritized colorful imagery over detail, making it suitable for early graphical applications. This mode gained prominence in early PC gaming and software, where its balance of resolution and color supported simple animations and scenes without overwhelming the era's hardware constraints. For instance, Sierra On-Line's (1984) employed the 320 × 200 mode for its adventure game visuals on standard CGA RGB displays, rendering environments and characters in the four-color palette, though composite setups often enhanced perceived colors through artifacting.

640 × 200 Pixel Mode

The 640 × 200 mode of the Color Graphics Adapter (CGA) provides a high-resolution graphics option, featuring a of 640 pixels horizontally by 200 pixels vertically. This mode operates at a of 1 bit per pixel, supporting only two colors—typically black and white—for a total of 16 KB of dedicated video RAM on the adapter. Rendering in this mode uses direct pixel mapping, where each bit in the video corresponds to an individual on the screen, allowing for precise control without blocky artifacts. The is organized as a with 80 bytes per scanline (since pixels divided by 8 bits per byte equals 80), divided into two 8 KB banks for even and odd scanlines starting at B8000h, enabling efficient access for vector-based drawing and fine details akin to text rendering. This mode was particularly suited for applications requiring sharp, detailed monochrome output, such as business charts for data visualization, early (CAD) precursors for technical drawings, and certain games that prioritized resolution and clarity over color variety. Intensity variations could be achieved through the palette register (port 03D9h), allowing adjustments to the foreground color brightness while maintaining the monochrome nature of the display.

160 × 100 Extended Mode

The 160 × 100 extended mode is an undocumented graphics capability of the (CGA) that provides a resolution of 160 pixels horizontally by 100 pixels vertically, supporting all 16 colors from the CGA palette. This undocumented mode is a hack of the 80-column color (BIOS mode 3), where the 6845 CRTC is programmed for 2 scanlines per character row to produce 100 rows from the 200 visible scanlines. A fixed character pattern like 0xDE is used in video memory to split each 8-pixel-wide cell into left (background color) and right (foreground color) sections, enabling two independent 4-bit color selections (16 colors each) per cell for 160 pixels per row. Implementation requires direct programming of the 6845 CRTC registers to set 2 scanlines per character row, resulting in 100 effective rows from the 200 total visible scanlines, while operating in an 80-column configuration. In video , character bytes are uniformly set to a splitting pattern such as ASCII 0xDE, which divides each 8-pixel-wide cell into a left section (colored by the attribute's high as background) and a right section (colored by the low as foreground), producing two independent 4-bit color pixels per cell and thus 160 pixels per row. must be disabled in the CGA mode register to allocate the full attribute byte to color encoding, and careful synchronization is needed to avoid "snow" artifacts from contention during active display. Terminate-and-stay-resident (TSR) programs can assist in mode transitions or palette , though most implementations embed the register writes in application . Due to its lack of official BIOS support, programming complexity, and incompatibility with some CGA clones or later adapters, the mode saw limited adoption in commercial software and was chiefly employed in technical demonstrations, homebrew developments, and select early titles like Moon Bugs (1983) and (1983) for arcade-style gameplay, where the expanded color options justified the coarser resolution.

Advanced Features and Tweaks

Composite Artifacting

Composite artifacting on the Color Graphics Adapter (CGA) refers to the generation of additional colors through unintended interactions in the composite video signal, allowing for visual effects not possible with the native RGBI output. This phenomenon occurs when high-frequency patterns in the video signal are misinterpreted by a television or composite monitor's chroma decoder as color information, effectively extending the limited palette of CGA's modes. The technique was not a designed feature but an exploitable side effect of the hardware's signal encoding, particularly useful for enhancing the visual appeal of games and applications on consumer TVs. The mechanism relies on the relationship between the CGA's pixel clock rate of approximately 14.318 MHz and the color subcarrier of 3.579545 MHz, resulting in exactly four s per chroma cycle. In or low-color modes, such as the 640 × 200 mode (1 bit per ), sequences of four consecutive s produce distinct waveforms that align with multiples of the subcarrier . These waveforms modulate the phase and relative to the color burst reference signal, which the decoder filters and interprets as hues with varying saturation and brightness; for instance, low- patterns yield primary-like colors, while higher harmonics are typically attenuated by 1980s-era decoders. This enables up to 16 distinct artifact colors from the 16 possible 4-bit patterns (2^4), far exceeding the standard 4-color limit of 2-bit-per- modes like 320 × 200 without such dithering. Specific bit sequences exploit phase shifts to generate targeted colors; for example, the alternating pattern 1010 (on-off-on-off) in mode creates a waveform that shifts the chroma phase to produce an orange hue, while 1100 might yield a reddish tone. In 2-bit modes, such as the 320 × 200 mode with its cyan//white/black palette, coarser 2--per-cycle patterns inherently produce four artifact colors (e.g., and orange approximations), but finer dithering overlays can simulate the full 16 hues by combining levels. These effects depend on the monitor's low-pass filtering, which blends adjacent pixels, and are most effective at typical viewing distances where individual pixels are not resolvable. Artifacting is exclusive to composite outputs, as the digital RGBI interface bypasses encoding and displays only the intended luminance patterns as without color interpretation. This limitation made it a niche technique, primarily leveraged in software for regions, but it significantly improved the vibrancy of CGA visuals on affordable televisions compared to the stark RGB monitor output.

Dual-Head Configurations

The Color Graphics Adapter (CGA) supported dual-head configurations through pairing with a Monochrome Display Adapter (MDA) or MDA-compatible card, enabling simultaneous output to two independent monitors on the PC platform. This setup provided an early multi-monitor capability, leveraging the distinct hardware characteristics of each adapter for complementary display functions. Installation involved placing both 8-bit cards in separate expansion slots, with the MDA assigned video memory at segment B000h and I/O ports 3B0h–3BBh for high-resolution monochrome text, and the CGA using segment B800h and ports 3D0h–3DFh for color text and graphics modes. DIP switches configured the primary display—typically the MDA—to ensure initialization targeted the correct card, avoiding signal conflicts that could damage the color monitor. Software then activated the secondary display via commands like MODE CO80 for CGA or equivalent for MDA, allowing independent operation. The cards ran with independent scan timings derived from the system's 14.318 MHz clock, eliminating the need for hardware synchronization but introducing challenges during mode switches, such as vertical blanking mismatches that could cause or require manual intervention. Terminate-and-stay-resident (TSR) programs or custom calls often handled these transitions, enabling seamless content management across displays. Such configurations enhanced productivity by separating text-heavy interfaces from graphical content, as seen in applications like , which displayed spreadsheets on the MDA while rendering charts on the CGA, and Turbo , which split code editing and execution views between monitors. This approach predated integrated support in later systems, offering a practical solution for tasks involving concurrent text and visual data manipulation.

Limitations and Issues

Known Bugs and Errata

The Color Graphics Adapter (CGA) exhibits several documented hardware quirks and artifacts, primarily stemming from its shared memory architecture and video timing constraints. One prominent issue is the "snow" effect, which occurs when the CPU directly accesses video RAM during active screen display in 80-column text mode. This unbuffered memory contention causes temporary visual noise or "snow" on the screen, as the display controller misses pixels while the CPU and video hardware compete for the same bus. The effect is exacerbated in high-resolution text modes due to the lack of dual-ported RAM, a design choice to reduce costs, and it can be mitigated by writing to video memory only during vertical blanking intervals. Although this artifact impacts performance in real-time updates, later adapters like the EGA addressed it through buffering. Another notable limitation involves the screen color in certain display modes. In 80-column on composite outputs, the CGA fails to generate a proper color carrier by default, resulting in output unless the color register is explicitly set to a non-black value, such as (color 6). This quirk arises from truncated color burst signals in the hardware, preventing decoding on televisions without the border write to inject the necessary signal. The issue does not affect RGB monitors but was a common in software for composite users, highlighting the adapter's optimization for TTL outputs over broadcast standards. CGA implementations also vary by revision, with early cards (pre-1983, often called "old CGA") differing from later ones ("new CGA") in color generation circuitry and component choices. Early revisions used the MC6845 CRTC chip and relied on phase-based for direct colors, producing higher saturation but unbalanced levels across the palette. These differences could cause compatibility issues in software assuming uniform behavior, with early cards showing visual inconsistencies in advanced tweaks like 1024-color modes. Post-1983 revisions incorporated the HD6845 CRTC and weighted RGBI signal mixing, yielding more balanced colors and 16 levels in modes, though this altered artifacting effects in composite output.

Performance Constraints

The Color Graphics Adapter (CGA) was constrained by its 16 KB of video RAM, which served as the sole display buffer and limited the system's ability to handle complex animations or multiple frames simultaneously. This lacked hardware support for features like sprites or hardware-accelerated scrolling, requiring all such operations to be performed via software, which was computationally intensive on the era's processors and often resulted in visual artifacts during updates. For instance, simulating smooth motion demanded manual copying of the entire 16 KB frame buffer in under 1/12 of a second on a 4.77 MHz IBM PC, severely restricting animation fluidity. CGA's maximum resolution of 640 × 200 pixels, while adequate for basic text and simple graphics in the early 1980s, proved insufficient for achieving photorealistic imagery or detailed visuals, as it relied on the heritage of the MC6845 cathode ray tube controller (CRTC). The MC6845 dictated the display timing and scan parameters, capping vertical resolution at 200 lines in non-interlaced mode and preventing higher densities without external modifications. This resolution ceiling, combined with the 16-color palette limitation in lower modes, confined CGA to blocky, low-fidelity representations unsuitable for advanced graphical applications. Additionally, CGA operated at a fixed 60 Hz refresh rate in a non-interlaced format, which could induce noticeable flicker in high-resolution modes like 640 × 200 on certain CRT monitors, particularly those optimized for higher persistence phosphors. This issue stemmed from the display's reliance on the MC6845's timing, where rapid screen updates in monochrome or two-color modes exacerbated visible scan lines and instability without interlacing to blend fields. Such constraints highlighted CGA's design priorities for affordability over smooth, high-performance rendering.

Software and Usage

Supported Applications

The Color Graphics Adapter (CGA) found widespread adoption in business applications during the early 1980s, particularly in spreadsheet software that leveraged its color text modes to enhance data visualization. Lotus 1-2-3, released in January 1983, was one of the earliest and most influential programs to utilize CGA's 80-column color text mode (mode 3), where each character could be displayed with one of 16 foreground colors and 8 background colors (128 combinations total) from the adapter's palette. This capability allowed users to apply color attributes for cell highlighting, such as bold red for negative values or green for positives, improving readability and analysis in financial and data management tasks without requiring graphics modes. The program's driver files, like IBM0COLO.DRV dated June 7, 1983, explicitly supported CGA color output on IBM PC systems equipped with 256 KB RAM and a color display. In gaming, CGA's 320 × 200 mode with four colors proved versatile for platformers and action titles, especially on the , which extended CGA compatibility to include 16-color support in the same resolution. The PCjr version of Jumpman, developed by and released in 1984, optimized its visuals for this mode by employing dithering techniques to simulate additional shades and textures within the limited palette, enabling more detailed sprites and backgrounds compared to standard CGA implementations on the original IBM PC. This adaptation took advantage of the PCjr's expanded 32 KB video RAM allocation, allowing smoother gameplay and enhanced while maintaining with CGA hardware. Early software drivers and utilities further expanded CGA's utility by providing BIOS-level extensions for mode switching and palette management. GRAPHICS.COM, an IBM-supplied utility bundled with PC DOS versions from the mid-1980s, served as a mode-switcher for CGA systems, enabling seamless transitions between text and graphics modes to facilitate printing of screen content to compatible printers like the IBM Graphics Printer. It handled palette selection indirectly by preserving CGA's color attributes during output, allowing users to control display configurations for applications requiring consistent color rendering across sessions. These tools were essential for integrating CGA into diverse workflows, from document preparation to custom graphics programming.

Emulation and Legacy

The Color Graphics Adapter (CGA) continues to influence modern through software emulation, enabling the execution of legacy IBM PC software on contemporary hardware. , first released in , provides accurate simulation of CGA's text and graphics modes, including 640×200 pixel resolution with two colors (or 320×200 with four colors) and support for composite artifacting to replicate color bleeding effects observed on original televisions. Similarly, PCem, an open-source emulator initiated in 2007 and actively developed through its successor , emulates CGA hardware at the cycle-accurate level, supporting timings, interrupts, and composite output for authentic reproduction of early 1980s PC behavior. These emulators, refined over the 2000s and , allow users to run CGA-dependent applications without physical hardware, preserving compatibility for DOS-era games and utilities. Hardware recreations using field-programmable gate arrays (FPGAs) offer near-exact replication of CGA's signal generation and artifacts, surpassing software emulation in latency and fidelity. FPGA platform, an open-source project launched in the late , includes a PCXT core released in 2022 that fully implements the PC XT's CGA capabilities, outputting genuine RGBI signals for connection to vintage monitors or modern scalers. This core, built on verified 8088 CPU emulation and CGA palette mapping, enables authentic display of CGA's 160×100 extended mode and other features, facilitating hardware-based retro setups without relying on original, aging components. CGA's constrained four-color palette in 320×200 graphics mode profoundly shaped the origins of , forcing artists to employ dithering and artifacting techniques that defined the aesthetic of early and influenced subsequent digital illustration styles. Preservation efforts in the 2020s, led by organizations like the , have digitized and archived thousands of CGA-compatible software titles, ensuring accessibility through emulated environments and scans of original media to safeguard this foundational era of personal computing graphics.

Comparisons and Alternatives

Competing Graphics Adapters

The (MDA), introduced alongside the (CGA) in 1981, served as a monochrome-only alternative optimized for text-based business applications. It supported 80 columns by 25 rows of characters at a character resolution of 9x14 s, equivalent to a resolution of 720x350, using 4 KB of video RAM and featuring a parallel printer port for direct output. Unlike the CGA, the MDA prioritized sharp, flicker-free text clarity on green-phosphor monitors like the , but lacked any or color capabilities, making it unsuitable for gaming or visual applications. In 1982, third-party manufacturer Hercules Computer Technology released the (HGC), which extended the MDA's while adding high-resolution support. The HGC maintained full MDA compatibility, including the 720x350 resolution, but introduced a 720x348 mode with 64 KB of DRAM, allowing for detailed images without color. This combination addressed a key limitation of the CGA's coarser 640x200 resolution in modes, providing crisper visuals for such as , though it required a compatible and offered no color output. Another early third-party contender was the ColorPlus, launched in as a direct enhancement to the CGA standard. It doubled the CGA's 16 KB video RAM to 32 KB, enabling 16 simultaneous colors at 320x200 resolution or 4 colors at 640x200, while remaining backward-compatible with standard CGA modes and monitors. This allowed for richer palettes in applications supporting the extension, such as certain versions of , but its adoption was hampered by limited software and BIOS recognition, positioning it as a niche precursor to more advanced color standards. The CGA benefited from being bundled as a standard option with the IBM PC 5150, giving it an edge in for general-purpose computing, while the MDA appealed to text-focused business users seeking superior readability at a similar . Third-party cards like the HGC achieved significant uptake, becoming a for by the mid-1980s due to their cost-effectiveness—around $499 at launch—and compatibility with existing MDA setups, often outselling CGA variants in professional environments. In contrast, systems like the , with built-in color since 1977, commanded higher overall costs, limiting their appeal in the emerging IBM-compatible business market dominated by more affordable adapter-based solutions.

Evolution to Successors

The (EGA), introduced by in 1984, served as the direct successor to the Color Graphics Adapter (CGA), offering significant improvements while maintaining . EGA supported resolutions up to 640×350 pixels with 16 simultaneous colors from a palette of 64, enabled by 64 KB of video RAM, a substantial upgrade from CGA's 16 KB and limited four-color modes at 320×200. This adapter provided full BIOS-level support for CGA's alphanumeric text modes and graphics modes, allowing seamless operation of CGA software and monitors, though some advanced EGA features required compatible displays. In 1987, further advanced its graphics standards with the (VGA), integrated into the PS/2 line of computers, which became the industry standard for PC displays. VGA offered 640×480 resolution with 16 colors or 320×200 with 256 colors, supported by 256 KB of video RAM, and explicitly emulated CGA and EGA modes to ensure compatibility with existing software. This standardization extended CGA's foundational modes across all subsequent PC hardware, embedding them in the for broad accessibility and preventing obsolescence of early applications. CGA's influence persisted through these evolutions, with its modes retained in PC for compatibility well into the 1990s, facilitating the transition for legacy software during the shift to graphical operating systems. By the release of in 1995, however, mandated VGA or better, marking the effective phase-out of direct CGA hardware support in mainstream computing, though emulation continued for niche uses.

References

Add your contribution
Related Hubs
User Avatar
No comments yet.