Color Graphics Adapter

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Der 640×200-Zweifarbmodus mit der Standard-Vordergrundfarbe — Arachne Internet suite

CGA (Color Graphics Adapter, ursprünglich auch Color/Graphics Adapter oder IBM Color/Graphics Monitor Adapter) war die erste von IBM 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.[1] Das Video-RAM umfasste 16384 Byte. Die höchste Bildschirmauflösung der Karte betrug 640 × 200 Bildpunkte.[2] 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 x 200 Bildpunkte Grafikmodus durch Setzen eines Registerwerts aus der CGA-Farbpalette ausgewählt werden.[3]

Textmodi[Bearbeiten | Quelltext bearbeiten]

Die CGA-Karte kennt zwei Textmodi

  • 40 × 25 Zeichen und
  • 80 × 25 Zeichen.

Der Zeichensatz ist fest in einem ROM abgespeichert und umfasst die 256 Zeichen des IBM-Zeichensatzes.

Beide Modi haben je zwei Varianten

  • In der ersten gibt es 16 Vorder- und Hintergrundfarben.
  • In der 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[Bearbeiten | Quelltext bearbeiten]

CGA-16-Farb-Palette
0 Schwarz
#000000
8 Schwarz
#000000
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 5 — Magenta
3 — Cyan 7 — Hellgrau
CGA-Palette 2
Hintergrund 4 — Rot
2 — Grün 6 — Gelb

Standard-Modi[Bearbeiten | Quelltext bearbeiten]

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 kann),
  • 640 × 200 Bildpunkte bei 2 Farben (eine frei wählbar, die andere auf schwarz festgelegt).

Darstellung auf einem RGBI-Monitor[Bearbeiten | Quelltext bearbeiten]

Die Übertragung des Bildes erfolgte über einen 9-poligen Sub-D-Stecker.

Pin Name Funktion
1 GND Masse
2 GND Masse
3 R Rot
4 G Grün
5 B Blau
6 I Intensiv
7 RES unbenutzt
8 HSYNC Horizontale Synchronisation
9 VSYNC Vertikale Synchronisation

Als Signalpegel wurden TTL-Pegel verwendet.

Die Signale R, G und B steuerten direkt die Farben Rot, Grün und Blau an. Bei gleichzeitiger Aktivität des I-Signals wurde deren Intensität von etwa 30 cd/m² auf etwa 80 cd/m² angehoben. Im Gegensatz zu späteren Grafikkarten ergab R=G=B=0 und I=1 kein dunkelgrau, sondern genauso wie R=G=B=0 und I=0 ein tiefes Schwarz.

160×100-Modus mit allen 16 Farben[Bearbeiten | Quelltext bearbeiten]

Der 160×100-Modus ist ein Textmodus und wird nicht durchs BIOS unterstützt.

  • Auflösung: Textmatrix 80×100, benutzter Speicher 16000 von 16384 Bytes.
  • Blinken deaktiviert
  • Höhe der Buchstaben: 2 Zeilen (statt 8 Zeilen)
  • genutzte Buchstaben: Leerzeichen , , und für je zwei Pixel wahlweise in Hintergrund- und Vordergrund-Farbe.
  • weitere nutzbare Zeichen für Mischfarben: , und .

Anwendung zum Beispiel möglich durch:

  1. Man schaltete die CGA-Karte in den Textmodus
  2. Man programmierte die Videoregister so, dass die Zahl der Textzeilen vervierfacht wurde. Dadurch erschienen von jedem Zeichen nur die obersten beiden Pixelreihen.
  3. Man füllte den ganzen Textbildschirm mit dem Zeichen linker Balken oder rechter Balken.
  4. Man schaltete den Blink-Modus ab, um 16 Farben, statt 8 nicht-blinkende und 8 blinkende Farben zu bekommen.
  5. Die eigentliche Anzeige erfolgte dann nur noch durch Änderung der Farbwerte der Balkenzeichen.
Screenshot von Paku Paku, einem CGA-Spiel, welches den 160×100×16-Modus verwendet. (Innerer Bildschirm)

Diesen Trick nutzten allerdings nur sehr wenige Spiele, da 160×100 Pixel doch zu wenig waren. Ein Beispiel ist jedoch der noch 2011 erschienene Pac-Man-Klon Paku Paku, dessen Quelltext einsehbar ist, da unter Public Domain veröffentlicht.[4]

320×200-Multicolor-Modus[Bearbeiten | Quelltext bearbeiten]

Bei der CGA-Karte ist es darüber hinaus möglich, beim Bildaufbau zwischen den einzelnen Paletten umzuschalten und so jede Palette in einer Bildzeile zu nutzen. Durch sehr genaues Timing lassen sich so die Paletten gleichzeitig nutzen und einzelne Bildpunkte mit jeder CGA-Farbe auf einer Bildschirmseite, ohne Palettenbeschränkungen, ansprechen. Verwendet wurde dieser Modus beispielsweise vom Spiel California Games, wenn es auf einem Ur-PC mit CGA-Adapter und 8088er Prozessor mit 4,77 MHz ausgeführt wurde. Auf anderen Systemen mit CGA-Grafik wurden hingegen nur vier Farben gleichzeitig dargestellt, da das Funktionieren des Multicolormodus hier exakt von der Taktfrequenz des Prozessors abhängig ist.

Geschichte[Bearbeiten | Quelltext bearbeiten]

Die CGA-Karte wurde von IBM alternativ zur MDA-Karte 1981 mit dem ersten Ur-PC von IBM angeboten. Sie war damals rund 1000 DM teuer, von ihrer Leistung her für einen professionellen Computer aber unzureichend: Die 2-Farben-Auflösung wurde von den Konkurrenzgeräten überboten (Victor Sirius: 800 × 400 Pixel), der 320×200-Modus war mit vier Farben für Spiele nicht gut geeignet, der 16-Farben-Modus besaß eine selbst für Heimcomputer ungenügende Auflösung. Zugriffe auf den Bildspeicher erzeugten im 80x25-Bildstörungen in Form von Schnee. Die IBM-BIOS-Routinen schalteten während des Scrollens die Bildschirmausgabe komplett ab, was heftiges Geflacker verursachte. Alternativ benutzte man nicht das BIOS, sondern schrieb die Daten während der Austastlücken in den Bildspeicher. Weiterhin gab es am Anfang selbst von IBM keine geeigneten Monitore, die Fernsehausgabe 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 wie preiswerter als das Original waren, nutzten so gut wie immer auch Nicht-IBM-Grafikkarten (z. B. die ATI Graphics Solution). Auch diese Grafikkarten waren deutlich leistungsfähiger und preiswerter als die CGA- und MDA-Karten, flexibler bei der Ansteuerung von Monitoren, kompatibler zur IBM-CGA und IBM-MDA als die IBM-EGA-Karten. Sie benötigten weniger Strom und waren deutlich kleiner, weil die Nachbauten eigene VLSI-Chips entwickelten und verwendeten.[5]

Im 320×200-Modus besaß die Grafikkarte zwei feste Paletten aus jeweils vier Farben. Die erste Palette bestand aus den Farben Magenta, Türkis, Weiß und einer frei wählbaren Farbe (standardmäßig Schwarz), die zweite aus Gelb, Hellgrün, Hellrot und (standardmäßig) Schwarz. Die meisten Spiele nutzten die erste Palette, wodurch der typische Türkis-Magenta-Look der CGA-Spiele zustande kommt.

Der 160×200-Modus wurde vom PC-BIOS nicht unterstützt. Hier musste der Grafikprozessor der CGA-Karte, der Motorola 6845, direkt programmiert werden. Weiterhin unterstützten nur wenige Grafikkarten diesen Modus, u. a. die Original-Karte von IBM, die Karte für den IBM PCjr und die Grafikkarte des Tandy 1000, die aber ohnehin nicht dem CGA-Standard entsprach.

Compaq nutzte bei seinem Portable 386 und Portable III eine eigene, später verworfene Auflösung von 640 × 400 als CGA-Weiterentwicklung.

Auf der Demo-Party Revision 2015 wurden in der Demo "8088 MPH" (by Hornet + CRTC + DESiRE) durch geschickte Ansteuerung der CGA-Karte Bilder mit 1024 Farben bei 100 × 80 Pixeln erzeugt. Für die Ausgabe wird jedoch z. Zt. zwingend ein NTSC-Monitor benötigt, da hier Hardware-nah in die Generierung des Bildsignals eingegriffen wird. Emulatoren können dies Stand Mai 2016 nicht widerspiegeln. Da es zwei verschiedene CGA-Versionen gab, die sich in der Bildsignalerzeugung unterscheiden, variieren die Farben dabei je nach der entsprechenden Version und es können nicht beliebige Pixelkombinationen dargestellt werden.

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. IBM Color/Graphics Monitor Adapter. (PDF; 828 KB) S. 1, abgerufen am 8. November 2020 (englisch): „... two basic modes of operation: ... and all-points addressable (APA) graphics.“
  2. IBM Color/Graphics Monitor Adapter. (PDF; 828 KB) S. 11, abgerufen am 8. November 2020 (englisch): „... 640 PELs by 200 rows ...“
  3. IBM Color/Graphics Monitor Adapter. (PDF; 828 KB) S. 18, abgerufen am 13. Oktober 2020 (englisch).
  4. Jason Knight: Paku Paku - A game for early PC/MS-DOS Computers. deathshadow.com, abgerufen am 16. Januar 2013 (englisch): „Contents of DEATHSHADOW'S MADNESS © Jason M. Knight unless otherwise noted All code presented on this site is released to the Public Domain. There'll be none of that open source licensing malarkey in here - If you going to give something away, LANDS SAKE JUST GIVE IT AWAY!!!
  5. https://www.retromaniek.pl/wp-content/uploads/2018/12/Commodore_PC10-PC20_Advanced_Graphics_Adapter.pdf