# Color Graphics Adapter

CGA (Color Graphics Adapter, ursprünglich auch Color/Graphics Adapter oder IBM Color/Graphics Monitor Adapter) war die erste von IBM im Jahr 1981 eingeführte farbfähige Grafikkarte und der erste Farbgrafikkarten-Standard für IBM-PCs. Bis zur Einführung von EGA war er Standard für Anwendungen, die jeden Bildpunkt einzeln adressieren mussten. Das Video-RAM umfasste 16384 Byte und die höchste Bildschirmauflösung der Karte betrug 640 × 200 Bildpunkte. Wie bei den meisten Heimcomputern entsprach das Timing der CGA-Karte dem des Fernsehbildes, wodurch die Karte mithilfe eines externen HF-Modulators an einen Fernseher oder direkt an einen Composite-Monitor angeschlossen werden konnte. Die Rahmenfarbe des angezeigten Bildes konnte in den Textmodi und dem 320 × 200 Bildpunkte Grafikmodus durch Setzen eines Registerwerts aus der CGA-Farbpalette ausgewählt werden.
Die CGA-Karte kennt die beiden Textmodi:
* 40 × 25 Zeichen und
* 80 × 25 Zeichen.
Der Zeichensatz für die Textmodi ist fest in einem ROM als Teil der CGA-Karte abgespeichert und umfasst in der DOS/OEM-US-Version die 256 Zeichen des IBM-Zeichensatzes der Codepage 437.
Beide Modi haben je zwei Varianten:
* Im ersten gibt es 16 Vorder- und Hintergrundfarben.
* Im zweiten gibt es nur noch 8 Hintergrundfarben, jedes Zeichen kann aber blinken.
Der Zeichensatz nutzt ein 8 × 8-Raster, wodurch Nachteile gegenüber den Monochrom-Standards MDA und HGC in Kauf genommen werden mussten: die Buchstaben sahen sehr rasterartig aus, und die Zeilenabstände waren so gering, dass Unterlängen (wie bei den Kleinbuchstaben g, j, p, q, y) die Großbuchstaben der nächsten Zeile berührten.

## Grafikmodi

CGA-16-Farben-Palette :
| 0 | Schwarz #000000 | 8 | Dunkelgrau #555555 |
| 1 | Blau #0000AA | 9 | Hellblau #0000FF |
| 2 | Grün #00AA00 | 10 | Hellgrün #00FF00 |
| 3 | Cyan #00AAAA | 11 | Helles Cyan #00FFFF |
| 4 | Rot #AA0000 | 12 | Hellrot #FF0000 |
| 5 | Magenta #AA00AA | 13 | Helles Magenta #FF00FF |
| 6 | Gelb #AAAA00 | 14 | Hellgelb #FFFF00 |
| 7 | Hellgrau #AAAAAA | 15 | Weiß #FFFFFF |
| CGA-Palette 1 ||||
| Hintergrund | Hintergrund | 5 – Magenta | 5 – Magenta |
| 3 – Cyan | 3 – Cyan | 7 – Hellgrau | 7 – Hellgrau |
| CGA-Palette 2 ||||
| Hintergrund | Hintergrund | 4 – Rot | 4 – Rot |
| 2 – Grün | 2 – Grün | 6 – Gelb | 6 – Gelb |

### Standard-Modi

Die CGA-Karte bietet zwei Grafikmodi:
* 320 × 200 Bildpunkte bei 4 Farben (eine frei wählbar, drei festgelegt durch eine von zwei Farbpaletten, die zusätzlich noch in hoher oder niedriger Intensität gewählt werden können),
* 640 × 200 Bildpunkte bei 2 Farben (eine frei wählbar, die andere auf schwarz festgelegt).
Die bei Verwendung von 320 × 200 Bildpunkten zur Verfügung stehende Farbpalette umfasst je nach der für sie gewählten niedrigen/hohen Intensität entweder die Farben dunkles/helles Magenta, dunkles/helles Türkis, Hellgrau/Weiß und eine frei wählbare Farbe (standardmäßig Schwarz); oder die Farben Braun/Gelb, Grün/Hellgrün, Rot/Hellrot und (standardmäßig) Schwarz. Die meisten Spiele nutzten die erst genannte Farbpalette, wodurch deren typisches Türkis-Magenta-Erscheinungsbild zustande kam.

### Darstellung auf einem RGBI-Monitor

Die Übertragung des Bildes an einen RGBI-Monitor erfolgt über einen 9-poligen Sub-D-Anschluss.
Als Signalpegel werden TTL-Pegel verwendet.
Die Signale R, G und B steuern direkt, d. h. digital, die Farben Rot, Grün und Blau an, aus denen sich die dargestellte Farbe eines Bildpunktes zusammensetzt. Bei gleichzeitiger Aktivität des I-Signals wird die Intensität dieser Farbe erhöht.

### 160×100-Modus mit allen 16 Farben

Der 160×100-Modus ist ein Grafikmodus, der mit Hilfe eines Textmodus realisiert und nicht durch das BIOS der CGA-Karte unterstützt wird. Somit muss der bei der CGA-Karte eingesetzte Chip Motorola MC6845 direkt programmiert werden. Zum Einsatz kommt bei diesem Modus eine 80 × 100-Zeichenmatrix. Da jedes Zeichen zwei Byte belegt, werden insgesamt 16000 von 16384 Bytes an Video-RAM verwendet.
Hierzu wird die CGA-Karte wie folgt konfiguriert, wobei der Bilddarstellung ein Raster von 640 × 200 Bildpunkten zugrunde liegt:
* Wahl des Textmodus mit 80 × 25 Zeichen, wodurch das Zeichensatz-ROM verwendet wird. Dies ist nur die Registereinstellung, tatsächlich benutzt werden 80 × 100 Zeichen.
* Abschalten des Blink-Modus, um alle 16 Farben, statt 8 nicht blinkende und 8 blinkende Farben, verwenden zu können.
* Darstellung von 100 Textzeilen, wobei jede Textzeile zwei Bildpunkte hoch ist. Dadurch erscheinen von jedem Zeichen nur die obersten beiden Bildpunktreihen.
* Füllen der Zeichenmatrix mit dem Zeichen linker Balken (▌) oder alternativ rechter Balken (▐). Weitere nutzbare Zeichen sind Leerzeichen, breiter Balken (█) und für Mischfarben ░, ▒ und ▓.
* Wahl der Vordergrund- und Hintergrundfarbe für jedes Balkenzeichen, so dass zwei entsprechend farbige Blöcke bestehend aus 4 × 2 Bildpunkten durch die CGA-Karte angezeigt werden.
Diesen Grafikmodus nutzten allerdings nur sehr wenige Spiele. Ein Beispiel ist der noch 2011 erschienene Pac-Man-Klon Paku Paku, dessen Quelltext frei einsehbar ist und der unter einer Public Domain-Lizenz veröffentlicht wurde. Hinzu kam, dass nur wenige Grafikkarten, z. B. die im IBM PCjr und im Tandy 1000, diesen Modus neben der Original-Karte von IBM unterstützen.

### 320×200-Multicolor-Modus

Bei der CGA-Karte ist es darüber hinaus möglich, beim Erreichen bestimmter Bildzeilen, mit denen das Bild sukzessive aufgebaut wird, zwischen den einzelnen Farbpaletten umzuschalten und so unterschiedliche Farbpaletten in Teilbereichen des Bildes zu nutzen. Hierbei sollten die sichtbaren Bildzeilen, bei denen der Palettenwechsel stattfindet, farblich so gestaltet werden, dass sie keine unerwünschten Farbeffekte zeigen. Verwendet wurde dieser Modus beispielsweise vom Spiel California Games, wenn es auf einem Ur-PC mit CGA-Karte und Intel 8088 Prozessor mit 4,77 MHz Taktfrequenz ausgeführt wurde. Auf Systemen mit einer anderen Taktfrequenz und CGA-Karte wurden hingegen nur vier Farben bei der Bilddarstellung verwendet, da das für den Multicolor-Modus notwendige Timing bei diesem Spiel direkt von der Taktfrequenz des Prozessors abgeleitet wurde.

## Geschichte

Die CGA-Karte wurde von IBM als Alternative zur gleichzeitig erschienenen MDA-Karte im Jahr 1981 mit dem ersten Ur-PC von IBM angeboten. Während die MDA-Karte für den geschäftlichen Einsatz konzipiert war, war die CGA-Karte für den Heimgebrauch gedacht. Sie war damals rund 1000 DM teuer, von ihrer Leistung aber für einen professionellen Computer unzureichend: die 640 × 200 Bildpunkte-Auflösung bei zwei Farben wurde von den Konkurrenzgeräten übertroffen (Victor Sirius: 800 × 400 Bildpunkte), der 320 × 200 Bildpunkte-Modus war mit vier Farben für Spiele nicht gut geeignet, und der 16-Farben-Modus besaß eine selbst für Heimcomputer ungenügende Auflösung. Zugriffe auf den Bildspeicher erzeugten im 80 × 25 Textmodus Bildstörungen in Form von Schnee. Die IBM-BIOS-Routinen schalteten deswegen während des Scrollens die Bildschirmausgabe komplett ab, was wiederum heftiges Geflacker verursachte. Alternativ dazu benutzte man nicht die BIOS-Routinen, und konnte so die Daten während der Austastlücken in den Bildspeicher schreiben. Weiterhin gab es am Anfang selbst von IBM keine geeigneten Monitore. Die Ausgabe auf einen Fernseher erfolgte damals üblicherweise als Composite-Signal oder als HF-moduliertes Signal mit schlechter Bildqualität. Da außerdem aus Sicht der damaligen Computer-Puristen Farbe nichts mit Professionalität zu tun hatte (es sei denn für exotische Anwendungen wie CAD), setzte sich die ein Jahr später angebotene monochrome Hercules-Karte HGC durch, und die CGA-Karte spielte erst einmal eine Nebenrolle.
IBM-PC-Nachbauten, die sowohl leistungsfähiger als auch preiswerter als das Original waren, nutzten so gut wie immer auch Nicht-IBM-Grafikkarten (z. B. die ATI Graphics Solution). Auch waren diese Grafikkarten oftmals leistungsfähiger und preiswerter sowie flexibler bei der Ansteuerung von Monitoren als die CGA- und MDA-Karten von IBM. Ebenso waren sie kompatibler zu den originalen CGA- und MDA-Karten als die von IBM als deren Nachfolger entwickelte EGA-Karte. Sie benötigten weniger Strom und waren deutlich kleiner, weil die Nachbauten eigene VLSI-Chips verwendeten.
Compaq nutzte bei seinem Portable 386 und Portable III eine eigene, später verworfene Auflösung von 640 × 400 Bildpunkten als CGA-Weiterentwicklung.
Auf der Demo-Party Revision 2015 wurden von der Demo 8088 MPH (by Hornet + CRTC + DESiRE) durch geschickte Ansteuerung der CGA-Karte Bilder mit bis zu 1024 Farben bei einer Auflösung von 80 × 100 Pixel erzeugt. Für die Ausgabe wird jedoch z. Zt. zwingend ein NTSC-Monitor benötigt, da hier hardwarenah in die Generierung des Bildsignals eingegriffen und der Composite-Ausgang der CGA-Karte verwendet wird. Emulatoren können dies Stand Mai 2016 nicht widerspiegeln. Da zwei verschiedene Versionen der CGA-Karte hergestellt wurden, die sich in der Bildsignalerzeugung unterscheiden, variieren die Farben je nach der alten oder neuen Version.