# Tandy Graphics Adapter

Tandy Graphics Adapter (TGA, also Tandy graphics) is a computer display standard for the Tandy 1000 series of IBM PC compatibles, which has compatibility with the video subsystem of the IBM PCjr but became a standard in its own right.

## PCjr graphics

The Tandy 1000 series began in 1984 as a clone of the IBM PCjr, offering support for existing PCjr software. As a result, its graphics subsystem is largely compatible.
The PCjr, released in 1983, has a graphics subsystem built around IBM's Video Gate Array (not to be confused with the later Video Graphics Array) and an MC6845 CRTC and extends on the capabilities of the Color Graphics Adapter (CGA), increasing the number of colors in each screen mode. CGA's 2-color mode can be displayed with four colors, and its 4-color mode can be displayed with all 16 colors.
Since the Tandy 1000 was much more successful than PCjr, their shared hardware capabilities became more associated with the Tandy brand than with IBM.
While there is no specific name for the Tandy graphics subsystem (Tandy's documentation calls it the "Video System Logic"), common parlance referred to it as TGA. Where not otherwise stated, information in this article that describes the TGA also applies to the PCjr video subsystem.
While EGA would eventually deliver a superset of TGA graphics on IBM compatibles, software written for TGA is not compatible with EGA cards.

## Output capabilities
### Tandy Video I / PCjr

Tandy 1000 systems before the Tandy 1000 SL, and the PCjr, have this type of video. It offers several CGA-compatible modes and enhanced modes.
CGA compatible modes:
* 320 × 200 in 4 colors from a 16 color (4-bit RGBI) hardware palette. Pixel aspect ratio of 1:1.2.
* 640 × 200 in 2 colors from 16. Pixel aspect ratio of 1:2.4
* 40 × 25 with 8 × 8 pixel font text mode (effective resolution of 320 × 200)
* 80 × 25 with 8 × 8 pixel font text mode (effective resolution of 640 × 200)
Both text modes could themselves be set to display in monochrome, or in 16 colors.
In addition to the CGA modes, it offers:
* 160 × 200 with 16 colors (equivalent to the graphical quality of many contemporary 8-bit home computers and games consoles, using the same 16 KB memory size and machine bandwidth as the original CGA modes, and analogous to/somewhat able to share graphics assets with CGA's "composite color" mode whilst remaining displayable on RGB monitors)
* 320 × 200 with 16 colors
* 640 × 200 with 4 colors (from 16)
Some games detect the Tandy hardware and display enhanced graphics in Tandy mode even when their CGA display mode is selected, while others offer the option to select "Tandy" graphics.

### Tandy Video II / ETGA

Tandy 1000 SL-series, TL-series, and RL-series models have this type of video. It offers the same modes as Tandy Video I, plus one more non-CGA mode:
* 640 × 200 with 16 colors

## Popularity

With built-in joystick ports, 16-color graphics and multichannel sound, the Tandy 1000 was considered the best platform for IBM PC-compatible games before the VGA era, and the combination of its graphics and sound became a de facto standard, "Tandy compatible".
28 of 66 games that Computer Gaming World tested in 1989 supported Tandy graphics. Titles such as Cisco Heat, Indiana Jones and the Last Crusade, Loom, Magic Pockets, Oh No! More Lemmings, Out of This World, Overkill, Prince of Persia, The Secret of Monkey Island and SimCity are indicated as supporting PCjr/Tandy graphics.
A display driver for Tandy graphics hardware was supplied with Windows 2.0, and could be used on Windows 3.0.

## Hardware design

TGA graphics are built into the motherboards of Tandy computers. The PCjr uses a custom monitor with a unique 18-pin plug, but an adapter (with the same DE-9 connector and pinout as IBM's CGA/EGA) can connect it to the IBM Color Display or similar 4-bit digital (TTL) RGBI monitor. The Tandy 1000 provides the DE-9 connector directly.
The monitor is responsible for translating the 4-bit digital levels into 16 colors, as shown it the following table (actual colors could vary somewhat between monitors):
Tandy/CGA RGBI hardware palette :
| Displayed Color | R | G | B | I | Displayed Color | R | G | B | I |
| Black | 0 | 0 | 0 | 0 | Gray | 0 | 0 | 0 | 1 |
| Blue | 0 | 0 | 1 | 0 | Light Blue | 0 | 0 | 1 | 1 |
| Green | 0 | 1 | 0 | 0 | Light Green | 0 | 1 | 0 | 1 |
| Cyan | 0 | 1 | 1 | 0 | Light Cyan | 0 | 1 | 1 | 1 |
| Red | 1 | 0 | 0 | 0 | Light Red | 1 | 0 | 0 | 1 |
| Magenta | 1 | 0 | 1 | 0 | Light Magenta | 1 | 0 | 1 | 1 |
| Brown | 1 | 1 | 0 | 0 | Yellow | 1 | 1 | 0 | 1 |
| Light Gray | 1 | 1 | 1 | 0 | White | 1 | 1 | 1 | 1 |
The later Tandy 1000 SL and TL models offered an enhanced version of the TGA, still limited to displaying 16 colors but at an improved resolution of 640 × 200.

### Programmable palette

When operating in the CGA video modes which use 1 or 2 bits per pixel, TGA allows remapping of the 2 or 4 palette entries to any of the 16 colors in the CGA gamut via programmable palette control registers. This allows software to use the CGA modes without being constrained to the three hardwired palettes of the actual CGA.
The following improvements in color choice are available in the CGA graphics modes:
* 320 × 200 in 4 colors: The three foreground colors can be freely chosen, in addition to the background color which could already be set on the CGA
* 640 × 200 in 2 colors: The background color can be freely chosen, rather than always being black, in addition to the foreground color which could already be set on the CGA.
The palette mapping logic is always active, even in text modes, so it is possible to cause certain text to change in appearance (appear, disappear, cycle colors, etc.) just by changing the palette, without making any changes to the character attribute bytes in RAM.
The PCjr/TGA programmable palette was carried over to the IBM EGA, where it was extended to 6-bit entries for 64 colors. VGA retained this 16 x 6-bit "internal palette" and added another, cascaded 256 x 18-bit RAMDAC "external palette".

### Shared RAM

Unlike every other IBM-designed PC video standard, TGA uses some of the main system RAM as video RAM. The PCjr had 64 KB of built-in RAM on the mainboard, and an additional 64 KB can be installed via a special card that plugs into a dedicated slot on the PCjr mainboard. This 64 KB or 128 KB of base RAM is special in that it is shared with the PCjr video subsystem.
TGA video modes use either 16 KB or 32 KB of RAM. Text modes use 16 KB divided into 4 or 8 pages, for 80×25 or 40×25 text formats respectively; any part of the 16 KB not used for text display pages can be used as general RAM.
In graphical modes, the base 128 KB of RAM is divided into eight 16 KB banks. The PCjr can use any bank for video generation, in a video mode that uses 16 KB. In a mode that uses 32 KB, it can use any even bank concatenated with the next higher odd bank. The PCjr can also independently map any 16 KB bank of base RAM to address 0xB8000 for CPU access, for CGA compatibility.
Apart from address 0xB8000, the CPU can access any bank at any time via its native address in the first 128 KB of the address space. The first bank overlaps the interrupt vector table of the x86 CPU and the data area used by the BIOS, so it is generally not usable for graphics.
Using system memory has advantages: It saves the cost of dedicated video RAM, and the dynamic RAM is refreshed by the 6845 CRT controller as long as the video is running, so there is no need for separate DRAM refresh circuitry. In the IBM PC XT upon which the PCjr is based, DRAM refresh is performed by one channel of the 8237 DMA controller, triggered by one channel of the 8253 programmable timer, while in the PCjr the 8237 is eliminated and the timer channel is repurposed (to work around a complication of other cost-cutting in the keyboard interface).
Up to almost 128 KB of RAM can be used for video (if software is mostly in ROM—e.g. on PCjr cartridges—or in RAM above the first 128 KB), and the displayed video banks can be switched instantaneously to implement double-buffering (or triple-buffering, or up to 7-fold buffering in 16 KB video modes) for smooth full-screen animation, something the CGA cannot do.
The Tandy 1000 computers do not incorporate the PCjr's cost-cutting measures (most of them have an 8237 DMA controller), but for compatibility with PCjr video, they use the same RAM-sharing scheme.

## Incompatibilities

The PCjr video and Tandy 1000 graphics subsystems are not identical. One difference is in the size of the video memory aperture at address 0xB8000. While the PCjr video hardware can use up to 32 KB of RAM for the video buffer, it emulates the CGA precisely by making only 16 KB of this available at address 0xB8000. Like the true CGA, the 16 KB of RAM at 0xB8000 is aliased at address 0xBC000.
The Tandy hardware, in contrast, makes the full 32 KB of selected video RAM available at 0xB8000. This difference causes some software written for Tandy graphics not to work correctly on a PCjr, displaying images in 320 × 200 16-color or 640 × 200 with periodic black horizontal lines: a "venetian-blinds" effect.
It is possible that software for the PCjr that relies on the memory wrap-around at address 0xBC000 will not work correctly on a Tandy 1000.