# Enhanced Graphics Adapter

Der Enhanced Graphics Adapter (EGA) ist ein von IBM im Jahr 1984 für den IBM PC AT geschaffener Grafikkarten-Standard.

## Geschichte

Der EGA-Standard löste CGA ab und wurde seinerseits Anfang der 1990er Jahre durch VGA ersetzt. In Deutschland kam die erste EGA-Grafikkarte 1985 unter dem Namen HR-Grafik-Adapter auf den Markt. In der Folge boten aber auch immer mehr andere Firmen, zum Beispiel Paradise oder Genoa, EGA-kompatible Grafikkarten an.
Schon 1987 boten die meisten EGA-Karten weitaus mehr Leistung als der IBM-EGA-Standard. Die ursprüngliche IBM-EGA-Karte verfügte über 64 Kilobyte Grafikspeicher, zu denen aber Speichererweiterungskarten erhältlich waren; spätere Versionen und Versionen anderer Hersteller brachten bis zu 256 Kilobyte Grafikspeicher mit. Damit konnten schon vor Start des VGA-Standards Auflösungen von bis zu 800×600 Pixel realisiert werden. Für den Anwender war diese Zusatzleistung allerdings nur begrenzt nutzbar, da bei Karten anderer Hersteller oft die notwendigen Treiber zur benutzten Software fehlten. Wenn zum Beispiel jemand AutoCAD auf einem Rechner mit Genoa-Karte nutzen wollte und AutoCAD für diese Genoa-Karte keinen passenden Treiber mitbrachte, dann waren über die Standard-EGA-Leistung hinaus keine zusätzlichen Merkmale nutzbar.
EGA-Karten verfügten über 16 Kilobyte zusätzlichen ROM-Speicher. Dieser enthält ein eigenes BIOS, über das Programme die neuen Grafikfunktionen ansteuern können, da das System-BIOS lediglich MDA und CGA unterstützt. Der BIOS-Code wird – ähnlich wie beispielsweise bei SCSI-Hostcontrollern oder bestimmten Netzwerkkarten – beim Booten des Systems ausgeführt. Das BIOS blendet sich somit mit seinen Routinen üblicherweise ab der Segmentadresse C000$_{hex}$ in den Speicheradressraum ein, leitet den Software-Interrupt 10$_{hex}$, der Routinen zur Videoausgabe bereithält, auf eigene Routinen um und erweitert diese um EGA-spezifische Funktionen. Dieses Konzept wurde bei fast allen späteren PC-Grafiklösungen beibehalten; bis heute findet sich in PCs das Grafik-BIOS, das moderne Betriebssysteme allerdings fast nur noch während des Startvorgangs nutzen, getrennt vom Haupt-BIOS an der Segmentadresse C000$_{hex}$, auch wenn die Grafikhardware oft nicht mehr als separate Steckkarte ausgeführt wird.
Der von der MDA- und CGA-Karte bekannte Motorola 6845 kommt bei der EGA-Karte nicht mehr zum Einsatz, da er einige nicht mehr zeitgemäße Beschränkungen wie einen auf 7 Bit beschränkten Zeilenzähler aufweist, der zur Folge hatte, dass das Speicherlayout in den Grafikmodi von CGA- und Hercules-Karte verkompliziert wurde. Die Programmierschnittstelle des als Kathodenstrahlröhren-Controller (CRTC) ausgeführten VDC auf der EGA-Karte ist aber stark an die des 6845 angelehnt, so dass Programme, die Bildseitenumschaltung oder Cursorpositionierung mit direkten Portzugriffen ausgeführt haben, auch auf der EGA-Karte problemlos liefen. Das gilt aber nicht für die Timing-Register, die zum Schutz vor Fehlprogrammierung mit einem softwaregesteuerten Schreibschutz versehen sind. Programme, die versuchen, den Videomodus der CGA-Karte am BIOS vorbei zu verstellen, funktionieren mit EGA-Karten nicht korrekt.
Dem EGA-Standard folgte im April 1987 der durch IBM mit Personal System/2 (PS/2) eingeführte VGA-Standard. Das hatte zunächst jedoch nur zur Folge, dass die EGA-Karten, die bis dahin preislich die Oberklasse besetzt hatten, langsam auch für PCs der mittleren und ab circa 1989 der unteren Preisklasse verfügbar wurden. Erst mit dem Aufkommen von Windows 3.0 ab 1991 verschwand EGA allmählich.

## Original-Bestückungsplan

Der Bestückungsplan der originalen EGA-Karte von IBM sah wie folgt aus:
Platinenlayout des original IBM EGA-Karte (Belegung siehe Tabelle) :
| Platinenlayout des original IBM EGA-Karte (Belegung siehe Tabelle) ||
| 1a: Verbindungsbuchse für Speichererweiterungskarte 2: Bildschirmspeicher-Chips TMS 4416-15NL, 8 Chips à 8 Kilobyte 3: 1501458, L1C0092 IBM LSI-Chip 4: 1501458, L1C0092 IBM LSI-Chip 5: 74LS374PC, D-Flipflop 6: 1501458, C04738: AMI-Chip 7: SN74LS258BN Multiplexer 8a: SN74LS174N D-Flipflop 8b: 74LS157PC Multiplexer 9: Öffnungen zum Befestigen der Speichererweiterungskarte 10: 74S10PC NAND 11: 74S04N Inverter 12: SN74S00N, 436C NAND 13: 74LS153NA, VV8407DO Multiplexer 14: 1501456, L1A0195 LSI-Chip 15: 1501459, L1B0093 LSI-Chip 16: AMI 6277356 17: 970-PC8428, 16,257 MHz 18: SN74LS27N NOR 19: HD74LS138P 3-Bit-Binärcodierer 20: N825137N 21: SN74LS273N D-Flipflop | 22: Jumper 23: SN74LS04N Inverter 24: Anschlussbuchse für zukünftige Erweiterungen 25: SN74LS32N OR 26: 74LS151PC Multiplexer 27: 74LS367APC Bus-Leitungstreiber 28: BECKMANN 898-1-R4-7K, 8432, Widerstandsnetzwerk 29: 74LS86PC XOR 30: SN74LS74AN, J429AJD D-Flipflop 31: 74LS11PC, 11422 AND 32: SN74LS32N, I8442B OR 33: SN74LS244N, I8439AL Bustreiber 34: SN74LS245N, I8441D bidirektionaler Transceiver 35: N823137N, K8326 36: P8436, DM74LS125AN Leitungstreiber 37: 01503247 38: Jumper 39: SN74LS175N, 8442 D-Flipflop 40: Jumper 41: DIP-Schalter 42: AUX-Buchsen 43: 9-polige Monitorbuchse |

## Weitere Details

Nach dem von IBM vorgesehenen EGA-Standard werden bis zu 16 Farben aus einer Palette von 64 Farben und vier Bit Farbtiefe bei einer Bildauflösung von 640×350 Pixeln realisiert. EGA-Karten enthalten außerdem 16-Farben-Versionen der CGA-Auflösungen 640×200 und 320×200, die von der CGA-Karte wegen der beschränkten Speichergröße nur mit 2 bzw. 4 Farben dargestellt wurden. In Verbindung mit dem IBM-EGA-Monitor 5154 werden in den Modi mit 200 Zeilen nur 16 Farben dargestellt, da der Monitor bei einem 200-Zeilen-Signal in einem CGA-Kompatibilitätsmodus arbeitet. Diese Auflösungen sind von IBM mit Blick auf den Heimanwendermarkt zwar auch schon im fest eingebauten Grafiksystem des IBM PCjr realisiert worden, allerdings ist das Speicherlayout des Grafikspeichers bei der CGA-Karte stark abweichend von dem des PCjr-Grafiksystems, so dass diese Modi nicht softwarekompatibel sind.
Der EGA-Videospeicher ist intern in 4 Bildebenen aufgebaut, die sich über Registerzugriffe jeweils recht einfach einzeln ansprechen lassen. Standardmäßig wird in den Grafikmodi aus je einem Bit dieser 4 Ebenen die Farbe ausgewählt. In einigen Zeichenprogrammen wird aber die Zerlegung in bis zu 4 unabhängige monochrome Ebenen angeboten, deren Überlagerungsreihenfolge durch die geschickte Wahl der Abbildung der 16 möglichen Farbwerte auf die Monitorfarben beliebig gewählt werden kann.
Durch den Aufbau des Bildspeichers in 4 Ebenen wird im Grafikspeicher je ein Bit pro Ebene und Pixel verwendet. Das sind bei der Basisausrüstung von 64 Kilobyte 16 Kilobyte pro Ebene, also 128 Kilobit. Das reicht nicht für den 640×350-Grafikmodus, der 224 Kilopixel benötigt. Daher ist die Option vorgesehen, je zwei Ebenen logisch zu verknüpfen, so dass statt 4 Ebenen mit 128 Kilobit nur noch 2 Ebenen mit dafür allerdings 256 Kilobit zur Verfügung stehen. Das führt zu einem 640×350-Grafikmodus mit nur noch 4 Farben, die allerdings frei aus den 64 verschiedenen EGA-Farben gewählt werden können.
Im Textmodus unterstützen EGA-Karten 40 oder 80 Textspalten und 25 (8×14 Pixel pro Zeichen) oder 43 (8×8 Pixel pro Zeichen) Textzeilen. Im Gegensatz zu MDA, HGC und CGA, die nur über fest codierte Zeichensätze verfügen, ermöglicht der EGA-Standard erstmals benutzerdefinierte Zeichensätze. Diese können jeweils 256 Zeichen mit je 1 bis 32 Pixel Höhe und 8 Pixel Breite enthalten. Mit benutzerdefinierten Zeichensätzen sind damit Textmodi mit bis zu 70 Zeilen möglich, allerdings sind diese aufgrund der nur noch 5 Pixel hohen Zeichen schwer zu lesen.
Das Bit 3 im Attributbyte steuert – neben der Vordergrundfarbe – die Auswahl des zugehörigen Zeichens aus zwei Zeichensätzen. Standardmäßig enthalten aber beide Zeichensätze identische Zeichen. Dies wird unter anderem von der Textkonsole von Linux genutzt, wenn Bildschirmschriftarten mit mehr als 256 Zeichen geladen werden (dabei wird automatisch die Farbpalette angepasst, so dass die Vordergrundfarben 8 bis 15 identisch zu den Farben 0 bis 7 sind. Somit stehen dann nur noch acht verschiedene Vordergrundfarben zur Verfügung).
Um die EGA-Farben nutzen zu können, benötigte man einen speziellen EGA-Monitor. Diese Monitore erhielten digitale Signale, weshalb man sie nach der verwendeten Logik „TTL-Monitore“ nannte (9-poliger D-Sub-Anschluss). Die Unterschiede zwischen CGA- und EGA-Monitoren:
* CGA-Monitor: 15,75 kHz Zeilenfrequenz, EGA-Monitor: zusätzlich 21,85 kHz
* CGA-Monitor: 200 sichtbare Zeilen, EGA-Monitor: zusätzlich 350 sichtbare Zeilen
* CGA-Monitor: 4 digitale Signale zur Ansteuerung von 16 Farben, EGA-Monitor: 6 digitale Signale zur Ansteuerung von 64 Farben
* Gemeinsamkeiten: 9-poliger Anschlussstecker (aber mit anderer Belegung), 60 Hz Bildfrequenz.
* EGA-Monitore konnten CGA- wie EGA-Modi einer EGA-Karte darstellen.
Es ist möglich, eine EGA-Karte statt mit einem zur Einführung der EGA-Karte noch recht teuren EGA-Monitor mit einem CGA-Monitor oder sogar einem Monochrommonitor zu verwenden. In diesem Fall wird die Funktionsvielfalt der Grafikkarte durch den Monitor eingeschränkt. Mit einem CGA-Monitor entfallen alle Modi, die 350 Zeilen bei einer Zeilenfrequenz von 21,85 kHz benutzen. Das betrifft offensichtlich den 640×350-Grafikmodus, allerdings werden von der EGA-Karte auch die Textmodi standardmäßig mit 640×350 Pixeln (und einer 8x14-Pixel-Zeichenzelle) dargestellt, wenn ein EGA-Monitor angeschlossen ist. Mit einem CGA-Monitor steht dagegen nur die qualitativ schlechtere 8x8-Zelle bei 640×200 Pixeln zur Verfügung, und der 43-Zeilen-Modus entfällt. Weiterhin reduziert sich die Farbauswahl von 64 Farben auf 16 Farben; die gleichzeitige Darstellbarkeit von 16 Farben in den Modi mit 320×200 oder 640×200 Pixeln wird aber durch den CGA-Monitor nicht beeinträchtigt.
Mit einem MDA-Monitor stellt die EGA-Karte einen Textmodus mit einer 9x14-Zeichenbox und 720×350 Pixeln zur Verfügung, oder einen Grafikmodus mit 640×350 Pixeln. Die Farbauswahl wird durch den Monitor auf 3 Intensitäten (inklusive Schwarz) beschränkt. Der Grafikmodus stellt als 4. Farbe die mittlere Intensität blinkend zur Verfügung.
Ein IBM-System kann mit CGA- und MDA-Karte zugleich ausgerüstet werden, was wegen der beschränkten Textqualität der CGA-Karte (insbesondere, wenn sie mit einem FBAS-Monitor betrieben wurde), und der mangelnden Grafikfähigkeit der MDA-Karte auch tatsächlich genutzt wurde. Die EGA-Karte kann außer als einzige Grafikkarte zu arbeiten auch mit einer CGA- oder einer MDA-Karte kombiniert werden, aus Gründen der Softwarekompatibilität wird aber die Konfiguration der EGA-Karte, in der sie eine MDA-Karte ersetzt, nur mit einem Monochrommonitor angeboten, die Konfiguration, in der sie eine CGA-Karte ersetzt, nur mit einem Farbmonitor (CGA oder EGA). Die Kombination von zwei EGA-Karten ist nicht möglich.
Die EGA-Karte steuert den Zugriff auf ihren Bildschirmspeicher. Hierzu kann während eines Taktzyklus entweder ein Programm oder die Hardware der Grafikkarte auf den Bildschirmspeicher zugreifen. Während der Darstellungsphase des Bildes belegt die Hardware der Grafikkarte 2 von 5 Taktzyklen bei niedriger, 4 von 5 Taktzyklen bei hoher Bildauflösung. Die restlichen Taktzyklen stehen dem Programm zur Verfügung. Damit entfällt das Problem des sogenannten CGA-Schnees, wo bei gleichzeitigem Zugriff das Monitorbild an der entsprechenden Stelle kurzzeitig gestört ist. Für die Speicherung der Bilddaten als Bit-Muster ist der Bildschirmspeicher in vier gleich große Bereiche, sogenannte Planes, aufgeteilt.
Die EGA-Karte unterstützt hardware-basiertes pixelgenaues Scrolling (auch Panning genannt). Dazu werden über die Register der EGA-Karte für das darzustellende Bild die Anfangsadresse im Bildschirmspeicher und der dortige Anfangspixel eingestellt. Dadurch wird die Darstellung von bewegten Hintergründen z. B. bei Computerspielen oder grafischen Benutzeroberflächen beschleunigt.
Die EGA-Karte verwendet als PC-Schnittstelle einen 9-poligen Sub-D-Stecker, rechnerseitig wird aber eine DB-Buchse eingesetzt, um Verwechslungen mit der RS-232-Schnittstelle auszuschließen. Die Pins sind dabei wie folgt belegt:
| Pin-Nummer | Funktion |
| 1 | Masse |
| 2 | Rot LSB |
| 3 | Rot MSB |
| 4 | Grün MSB |
| 5 | Blau MSB |
| 6 | Grün LSB |
| 7 | Blau LSB |
| 8 | Sync + |
| 9 | Sync − |