Video Graphics Array

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Video Graphics Array (kurz: VGA) ist ein Computergrafik-Standard, der bestimmte Kombinationen von Bildauflösung und Farbanzahl (Farb-Bit-Tiefe) sowie Wiederholfrequenz definiert und wurde 1987 von IBM eingeführt.

VGA war, im Gegensatz zu seinen Vorgängern EGA und CGA, zu Anfang als Ein-Zoll-Prozessor zur leichteren Integration auf Hauptplatinen konzipiert und somit nicht als eigener „Adapter” geplant. Ein unmittelbarer Vorläufer war die Multi-Color Graphics Array (MCGA) genannte Onboard-Grafik des IBM PS/2 Model 30. Diese war nur mit 64 kB Videospeicher ausgestattet, was zwar den bei Spielen beliebten 256-Farben-Modus gestattete (der daher oft auch "MCGA-Modus" genannt wurde), jedoch die VGA-typische Grafikauflösung von 640×480 Pixeln nur monochrom (1 Bit pro Pixel) darstellen konnte. Auch fehlte dem MCGA die Kompatibilität zur EGA-Karte.

Da auch alle modernen Grafikkarten immer noch kompatibel zu IBMs VGA sind, verwenden auch moderne Betriebssysteme noch den VGA-Grafikmodus, z. B. während der Installation oder wenn kein zur Grafikkarte passender Treiber installiert ist.

Merkmale einer VGA-kompatiblen Grafikkarte[Bearbeiten]

Grundsätzliche Fähigkeiten[Bearbeiten]

  • (mindestens) 256 kB interner Speicher
  • Schreib-Register rücklesbar (der EGA-Karte fehlte diese Eigenschaft, was ein Sichern des Zustandes der Grafikkarte unmöglich machte)
  • unterstützt alle standardisierten CGA- und EGA-Grafik- und Text-Modi
  • Grafikmodus 640×480 Pixel mit 2 oder 16 Farben
  • Grafikmodus 320×200 Pixel mit 4, 16 oder 256 Farben
  • Alle (max. 256) Farben frei wählbar aus einer Farbpalette von 23×6 = 262144 Farben
  • Videoauflösung von bis zu 720×400 im Textmodus,
  • ROM-Fonts in Codepage 437 mit 8, 14 und 16 Pixelzeilen pro Zeichen, 8 bzw. 9 Pixelspalten pro Zeichen.
  • benutzerdefinierbare Fonts mit 256 oder 512 Zeichen und 1 bis 32 Pixelzeilen pro Zeichen möglich

Hardware-Ebene[Bearbeiten]

  • VGA-Anschluss mit analoger Übertragung der RGB-Signalkomponenten (anders als bei EGA, ähnlich wie beim PGC), was (abhängig von der Karte oder Signalquelle) prinzipiell die Darstellung unendlich vieler Farben und Zwischenabstufungen in Verbindung mit einem geringen Schaltungsaufwand bei einem Röhrenmonitor erlaubt. Allerdings ist die Bildqualität stark vom Schaltungsaufbau und der Bauteilequalität der Karte sowie der anschließenden Übertragungskabel zur Bildröhre abhängig.

Auflösung[Bearbeiten]

Häufig benutzte Grafikmodi sind:

  • 320 × 200 Pixel, 256 Farben (8 Bit, 64 kB linear, sehr beliebt für Spiele)
  • 320 × 200 Pixel, 16 Farben (4 Bit)
  • 640 × 200 Pixel, 16 Farben
  • 640 × 350 Pixel, 16 Farben (siehe Enhanced Graphics Adapter (EGA))
  • 640 × 480 Pixel, 16 Farben (quadratische Pixel, 1 Plane je Bit der Pixelfarbe, 4 Planes für 16 Farben)

Als Textmodi werden vor allem 80 × 25 Zeichen (16 Pixelzeilen pro Zeichen) und 80 × 50 Zeichen (8 Pixelzeilen pro Zeichen) genutzt, beide mit einer zugrundeliegenden Bildauflösung von 720 × 400 Pixel.

Flexibilität des VGA-Anschlusses[Bearbeiten]

Die Bildauflösung und Parameter der Bildausgabe über den klassischen VGA-Anschluss lassen sich ziemlich frei einstellen. Trotzdem lassen sich TV-Röhrengeräte prinzipiell nicht an einer Standard-VGA-Karte betreiben (kein CSync = erfordert Zusatzelektronik, etwas andere Pegel = erfordert Zusatzelektronik, kein Zeilensprung = nur 240...288 Zeilen-Darstellung möglich)

Für herkömmliche analoge VGA-Röhrenmonitore geeignet sind jedoch folgende Varianten:

  • Pixelfrequenz: 28,322 MHz oder 25,175 MHz. halbierbar.
  • Zeilenfrequenz: 31,4688 kHz ist der Standardwert. Exakt 80 % der Zeilenzeit wird zur Bilddarstellung genutzt.
  • Vollbilddarstellung.
  • 70,08 Bilder/s bei maximal 400 sichtbaren Zeilen oder 59,94 Bilder/s bei maximal 480 sichtbaren Zeilen
    • Die Anzahl der sichtbaren Zeilen lässt sich auf 350 Zeilen reduzieren. Dem Monitor wurde das durch Änderung der Polarität des Sync-Signale übermittelt (+hsync -vsync). Genutzt für EGA-Simulation.
    • Eine weitere Möglichkeit, die Auflösung zu verringern, besteht darin, Zeilen doppelt darzustellen – aus 480 Zeilen werden so 240 oder aus 400 Zeilen werden 200 Zeilen. Genutzt für CGA-Simulation.
  • Pro Zeile sind 640 oder 720 sichtbare Pixel üblich (je nach gewähltem Pixeltakt)
    • Dieser lässt sich halbieren auf 320 bzw. 360 Pixel.
    • Im 256-Farben-Modus wird der Pixeltakt ebenfalls immer halbiert.
  • Speicheraufbau
    • 64 kB x 32 bit, erweiterte Karten 128 kB x 32 bit
    • Graphikmodi lesen alle 8 Takte ein 32-Bit-Wort aus. Modi mit bis zu 16 Farben generieren daraus 8 Pixel. 256-Farben-Modi 4 Pixel.
    • Bei Textmodi kommt ein zweiter Zugriff für das Auslesen der Zeichenrepräsentation dazu.

Der Fortschritt des VGA-Anschlusses war die analoge Übertragung des Signals zum Monitor. Damit überwand man das Manko des CGA-Anschlusses bzw. EGA-Anschlusses, die prinzipiell nur 16 bzw. 64 Farben (bei SW: 3 bzw. 4 Graustufen) übertragen konnten. VGA-Anschlüsse konnten theoretisch beliebig viele Farben anzeigen, Standard-VGA-Karten haben 262144 davon genutzt.

Erst ein Jahrzehnt später hat sich die analoge Übertragung als Manko herausgestellt. Für TFT-Displays mit einzeln ansteuerbaren Pixeln führt sie bei hohen Auflösungen (spätestens bei 1600x1200 Pixeln) zu Unschärfe und Unruhe (Moiré) im Bild. Die Nachfolger heißen DVI-D, HDMI und DisplayPort. HDMI ist eine Weiterentwicklung von DVI; HDMI-Signale sind zu DVI abwärtskompatibel.

Kompatibilität zu MDA-, CGA- und EGA-Karten[Bearbeiten]

VGA war weitgehend abwärtskompatibel zu allen bisherigen IBM-Grafikkarten für PCs; beim Zugriff über das BIOS war die Kompatibilität besonders hoch, aber auch bei direkter Registerprogrammierung funktionierten die meisten Programme weiterhin. Insbesondere musste der Benutzer nicht mehr zwischen Farbfähigkeit (CGA, EGA) und hoher Textqualität (MDA) wählen. Für VGA wurden von Anfang an sowohl monochrome (meist weiße) als auch farbige Monitore angeboten.

Farbpaletten[Bearbeiten]

CGA bot 16 feststehende Farben. EGA bewahrte die CGA-Kompatibilität und erlaubte trotzdem 64 Farben in allen Modi, indem die 16 Farbnummern der CGA als Zeiger auf eine sogenannte Palette, eine Tabelle mit 16 Einträgen, interpretiert wurden; die Einträge der Palette enthielten dann die EGA-Farbnummern im Bereich 0 bis 63. Beim Start des Systems wurden dort Farbnummern eingetragen, die den gleichen Farbeindruck wie die 16 CGA-Farben boten; Programme, die den EGA-Standard kannten, konnte die Eintragungen aber ändern. Somit konnten zwar weiterhin nur 16 Farben gleichzeitig dargestellt werden, aber aus einer Gesamtmenge von 64 Farben.

Defaultpalette im 256-Farben-Modus

VGA-Grafikkarten unterstützen 262.144 mögliche Farben. Bei VGA-Karten existiert die erwähnte Palette mit 16 Einträgen ebenfalls – die darin enthaltenen Werte im Bereich 0 bis 63 werden aber im Gegensatz zu EGA nicht direkt als Farbnummern, sondern wiederum als Zeiger auf die ersten 64 Einträge einer weiteren Tabelle interpretiert. Diese VGA-Farbpalette hat nun 256 Einträge im Bereich von 0 bis 262143. Auch hier werden beim Start in die ersten 64 Einträge solche VGA-Farben eingetragen, die den 64 EGA-Farben optisch gleichen, aber von Programmen, die VGA kennen, verändert werden können. Durch dieses zweistufige Verfahren können auch in den CGA- und EGA-kompatiblen Modi der VGA alle VGA-Farben dargestellt werden, allerdings weiterhin nur jeweils 16 davon gleichzeitig. Im 256-Farb-Grafikmodus werden die Daten im Bildschirmspeicher dagegen direkt als Zeiger auf die 256-Einträge-Tabelle interpretiert und die 16-Einträge-Tabelle nicht verwendet.

Bei einigen CGA-kompatiblen Modi verwendet VGA sogar eine dreistufige Palette, da auch die CGA-Karte in diesen Modi bereits eine, allerdings nicht frei wählbare, Palette von 2 oder 4 aus 16 Farben verwendet hatte.

Textmodus[Bearbeiten]

VGA-Grafikkarten stellen den Textmodus mit 720 Punkten pro Zeile dar, wie schon die MDA-Karte, aber im Gegensatz zu CGA und EGA, die 640 Punkte verwenden. Jedes der 80 Zeichen pro Zeile wurde im Vergleich zu CGA/EGA um einen Pixel auf 9 Pixel verbreitert, damit erhöht sich der Zeichenabstand und somit die Lesbarkeit. Da im Zeichenspeicher jedoch weiterhin nur acht Spalten gespeichert waren, wurde das 9. Pixel entweder leer gelassen oder durch Wiederholung des 8. Pixel erzeugt. Die Entscheidung darüber wird nach der Nummer des Zeichencodes getroffen – die Zeichen 0xC0 bis 0xDF, welche in der Codepage 437 Blockgrafikzeichen mit Anschluss nach rechts enthalten, benutzen die Wiederholung des 8. Pixels, bei den anderen ist die 9. Spalte immer leer. Dadurch ergeben sich auch die typischen vertikalen Streifen bei einigen Programmen (wie z. B. Turbo Pascal ab Version 6), die den Hintergrund mit Grauzeichen füllen. Für die Verwendung von anderen Codepages, die in den Positionen 0xC0 bis 0xDF gewöhnliche Druckzeichen enthalten, kann die Wiederholung des 8. Pixels auch komplett abgeschaltet werden (diese Möglichkeit gab es bei der MDA, deren Codepage unveränderlich auf die 437 festgelegt war, noch nicht).

Wie schon bei der EGA-Karte steuert das Bit 3 des Attribut-Bytes die Auswahl aus zwei Zeichensätzen. Somit ist es mit benutzerdefinierten Zeichensätzen möglich, bis zu 512 verschiedene Zeichen gleichzeitig im Textmodus darzustellen.

Der eingebaute Zeichengenerator unterstützt benutzerdefinierte Zeichensätze, die 1 bis 32 Pixel hoch sein können. Während die üblichen benutzerdefinierten Zeichensätze die üblichen Zeichengrößen von 8×8, 8×14 oder 8×16 Pixeln benutzen, existieren auch kleinere Schriften, die etwa bei 5 Pixel hohen Zeichen bis zu 96 Zeichenzeilen erlauben würden, die aber kaum noch lesbar sind.

Mit 1 oder 2 Pixel hohen "Schriften" lassen sich im Textmodus (pseudo)grafische Effekte erzielen, die allerdings auch zur Blütezeit der Grafik-Spielereien unter DOS nur selten genutzt worden sind, da im Textmodus nur 16 Farben zur Verfügung stehen und die 256-Farben-Grafikmodi deutlich bessere Effekte ermöglichten.

Grafik-BIOS[Bearbeiten]

Wie schon die EGA-Karten benutzen auch VGA-Karten ein eigenes Grafik-BIOS, um die VGA- und auch EGA-Grafikfunktionen des Adapters für Anwenderprogramme zugänglich zu machen, ohne dass diese die komplizierte Registerprogrammierung selbst durchführen müssen. Dies ist notwendig, da das System-BIOS eines PCs in der Regel lediglich MDA und CGA unterstützt. Wie bei SCSI-Steuergeräten und Netzwerkkarten mit Boot-ROM wird der Maschinencode in den für Zusatzkarten reservierten Adressraum des Prozessors zwischen 640 und 960 Kibibyte, im so genannten konventionellen Arbeitsspeicher, eingeblendet. Hier können die Programme dann auf die VGA- (und EGA-) Routinen der Grafikkarte zugreifen. Teilweise werden auch Grafikroutinen des System-BIOS auf angepassten Code der Grafikkarte umgelenkt, um die Kompatibilität zu älteren Programmen zu gewährleisten.

Geschichte[Bearbeiten]

Entwicklung[Bearbeiten]

Die heutigen Grafikkarten für IBM-kompatible PCs sind häufig zumindest teilweise VGA-kompatibel. Von 1981 bis etwa 1990 setzte IBM die Standards dieser Architektur, so auch bei Grafikkarten. Aufgrund der Fähigkeiten und Architektur des seinerzeit meistverwendeten Betriebssystems DOS (benötigt lediglich Textmodus, keine Multitaskingfähigkeit) war es damals daher notwendig, dass Peripherie und Erweiterungskarten zum jeweiligen gängigen Industriestandard hardwarekompatibel sein mussten, da die Software die Erweiterungskarte oder Peripheriekomponente direkt programmierte. Mit der Zeit ergab sich aber das Problem, dass die Farbtiefen und Auflösungen und deren Ansteuerung lediglich bis zum VGA-Standard definiert waren. Mit dem einsetzenden Siegeszug des PC Ende der 1980er Jahre nahm die Anzahl der Hersteller für PC-Grafiklösungen auf dem Markt stark zu, und der Preis für Grafikkarten sank. IBM verlor seine Markt- und Standardisierungsmacht. Um sich von der Konkurrenz abzuheben, begannen zahlreiche Hersteller (z. B. Genoa Systems, Trident Microsystems, Hercules u. v. m.), den VGA-Standard mit eigenen Entwicklungen (bzw. VGA-Grafik-BIOS-Erweiterungen) zu erweitern. So boten mit der Zeit die meisten Grafikkarten die Möglichkeit, Auflösungen bis 1024×768 oder darüber in High- oder True Color darzustellen. Auch wurden mit dem Aufkommen von grafischen Benutzeroberflächen wie Windows erste Funktionen zu deren Beschleunigung implementiert, wie das Zeichnen und Füllen von Rechtecken und Flächen in Hardware durch die Grafikkarte. Allerdings waren all diese erweiterten, über VGA hinausgehenden Funktionen nicht standardisiert und unterschieden sich zum Teil je nach Grafikkarte. Daher musste zunächst jede Software, die diese Funktionen nutzen wollte, ihre eigenen Grafikkartentreiber mitbringen (Beispiel: MS Flugsimulator 5.0). Für wichtige Anwendungen wie Windows 3.1, teilweise AutoCAD, wurden aber auch seitens der Grafikchiphersteller Treiber zur Verfügung gestellt. Vor allem bei günstigen Nicht-Standard-Grafikkarten war dies aber auch nicht immer der Fall, und daher beschränkte sich die Software unter DOS meist auf VGA.

Spiele bis 1995 sind daher meist auch auf den 320 × 200 × 8-VGA-Modus beschränkt (Mode 13h). Beispiele sind Doom 1, Worms oder Wolfenstein 3D. Bis heute ist oft der VGA-Treiber der einzige verfügbare, wenn noch kein hardwarespezifischer Grafiktreiber installiert wurde.

Um höhere Auflösungen und deren Programmierung zu vereinheitlichen, wurden Anfang der 1990er Jahre von der VESA die Auflösungen bis 1280×960 in 256 Farben und deren BIOS-APIs normiert. Diese VESA-Erweiterungen wurden darauf auch zügig von den Grafikchipherstellern übernommen und in die VGA-BIOSe eingepflegt. Die VESA-Erweiterungen erschienen in mehreren Versionen, aktuell ist Version 3.0. Die VGA-BIOS-Chips waren meist als ROM ausgeführt, so dass sich die Grafikkarten selbst nicht auf eine neue VESA-BIOS-Version aufrüsten lassen. Durch die Verwendung von TSR-Programmen, welche gewissermaßen als "VESA-Wrapper" dienen, lassen sich unter DOS neue VESA-Erweiterungen auf Systemen nutzen, welche über eine entsprechend leistungsfähige, aber zur benötigten VESA-Version inkompatible Grafikkarte besitzen. Diese TSR-Programme stellen die VESA-Erweiterungs-Routinen zur Verfügung und übersetzen sie für die Grafikkarte. Neben herstellerspezifischen Wrappern gibt es auch Universalwrapper wie UNIVESA.EXE oder UNIVBE.EXE. Diese wurden oft verwendet, um die VESA-Erweiterungen der Version 2.0 auf Systemen nachzurüsten, deren Grafikkarten lediglich VESA 1.0 unterstützen. Erst Mitte der 1990er Jahre hatten sich die mit den VESA-Erweiterungen kompatiblen Grafikkarten soweit durchgesetzt, dass sie von den Spieleherstellern zunehmend unterstützt wurden. Auch war mit dem Erscheinen der ersten Pentium-Prozessoren auf dem Massenmarkt genug Rechenleistung vorhanden, um auch in den VESA-Modi, selbst mit Wrapper eine flüssige Grafikdarstellung in aufwändigen DOS-Spielen wie Wing Commander 3 oder The Need for Speed erreichen zu können. In der Shareware-Szene wurde allerdings noch längere Zeit auf den Mode 13h (320×200, 256 Farben) gesetzt, da hier eine Bildschirmseite ziemlich genau 64 kB benötigt. Dies ist in zahlreichen verbreiteten günstigen Real-Mode-Compilern wie Turbo Pascal die maximal erlaubte Größe für Datenstrukturen im Arbeitsspeicher; Mode-13h-Bildschirmseiten sind unter solchen Compilern daher vergleichsweise einfach zu handhaben. Trotz der VESA-Erweiterungen wird unter Windows noch heute ein Standard-VGA-Treiber eingerichtet, solange kein herstellerspezifischer Treiber verfügbar ist, im Gegensatz beispielsweise zu Linux und BSD.

In der zweiten Hälfte der 1990er Jahre setzten sich Windows 95 und 98 zunehmend durch. Windows 95 und seine Nachfolger bieten mit DirectX und OpenGL Betriebssystemschnittstellen, mit denen Anwendungen definierte Funktionen von Grafikkarten ansprechen können. Windows gibt dabei standardisierte Funktionsaufrufe sofort an den Grafiktreiber weiter, der sie in Befehle für die Grafikkarte umsetzt. Somit sind ein Großteil der Funktionen von Grafikkarten aus Windows für alle Arten von Programmen einheitlich ansprechbar. Ein zu einem bestimmten Hardwarestandard kompatibles Grafik-BIOS ist unter Windows prinzipiell nicht mehr erforderlich. Eine direkte Programmierung der Grafikkarte wie unter DOS ist unter Windows ohnehin nicht möglich, da Windows multitaskingfähig ist und für die Benutzeroberfläche selber die Grafikkarte benötigt. Um etwaige Konflikte durch gleichzeitige Zugriffe von verschiedenen Programmen zu vermeiden, laufen Hardwarezugriffe unter Windows daher grundsätzlich koordiniert über das Betriebssystem und dessen Gerätetreiber. Die DirectX-Treiber ermöglichen im Gegensatz zum Grafik-BIOS komplexere Funktionen und sprechen den Chip in der Regel direkt über seine Register an. Das Upgrade von Funktionen wird durch den Verzicht auf die Routinen des recht starren VGA-Grafikbios wesentlich erleichtert. DirectX-Treiber ermöglichen im Gegensatz zum Grafik-BIOS komplexere Funktionen. Die Steuerung der Grafikkarte erfolgt hauptsächlich durch den Windows-Treiber. Das Programmieren aufwändigerer Grafiken wird vereinfacht, da die Abstraktionsebene höher liegt und z. B. ein wesentlicher Teil der Darstellung einer virtuellen Welt im Gegensatz zu früher von Grafiktreiber und Grafikkarte übernommen werden kann. Dies eröffnet zahlreiche Möglichkeiten, die Grafikdarstellung durch bestimmte Schaltungen im Grafikchip zu beschleunigen. Auch die Portierbarkeit auf andere Plattformen wird durch den hohen Abstraktionsgrad erleichtert. Allerdings nimmt dadurch auch die Komplexität des Grafikchips und des Grafiktreibers zu. Die vergleichsweise einfachen Grafikchips, welche bislang höchstens über einige Beschleunigungsfunktionen für grafische Benutzeroberflächen verfügten (z. B. Füllen von Rechtecken, Zeichnen von Linien durch die Hardware), wurden mit der breiten Verfügbarkeit von Windows 95 ff. und Direct3D zu hochkomplexen Grafikprozessoren mit Fähigkeiten zur beschleunigten Darstellung dreidimensionaler Welten weiterentwickelt. Zahlreiche bekannte Grafikchiphersteller aus den 1990er Jahren konnten mit dieser Entwicklung nicht Schritt halten und sind mittlerweile aus dem Markt verschwunden.

Aufgrund des hohen Alters des VGA-Standards und den damit einhergehenden Limitierungen des Designs ist es ein Anliegen verschiedener Hersteller wie Intel oder ATI, den VGA-Standard durch den UGA-Standard (Universal Graphics Adapter) zu ersetzen. Immerhin wurde die VGA-Karte in den mittleren 1980ern für den ISA-Bus entwickelt, was gerade für moderne Betriebssysteme eine Schwierigkeit darstellt, da VGA somit zu den Errungenschaften des geschützten Speichermodells (Protected Mode) inkompatibel ist.

Das erklärte Ziel der Förderer von UGA ist es, die grafischen Mindestleistungen von 640 × 480 × 4 auf 800 × 600 × 32 anzuheben, das Speichermodell der Grafikkarte zu vereinfachen (durch 32-Bit-Zugriff sowie die Abschaffung der Paletten und des Textmodus) und einen plattformunabhängigen Zugriff auf die Grafikkarte über EFI-Treiber zur Verfügung zu stellen. Kritischer, plattformabhängiger Code soll somit reduziert werden. EFI-Treiber sind kein Ersatz für Betriebssystem-spezifische Treiber, mit EFI und UGA soll der Zugriff auf die Grafikkarte aber dem Betriebssystemdesign angepasst werden.

Nach den Plänen von AMD, Intel, LG und weiteren Rechner- und Bildschirm-Herstellern, soll der VGA- sowie auch der LVDS-Anschluss spätestens im Jahr 2015 nicht mehr hergestellt werden. An dessen Stelle sollen die digitalen Ausgänge DisplayPort oder HDMI verbaut werden.[1]

Heutige Bedeutung[Bearbeiten]

Unabhängig von dieser ursprünglichen Vielfalt von Auflösungen steht „VGA-Auflösung“ heute, etwa bei Spezifikationen für Displays oder Smartphones, meist für die Auflösung von 640 × 480 Pixeln, wobei meist höhere Pixeltiefe bzw. Farbauflösung (bis 32 Bit) genutzt wird, die ursprünglich nicht zur Verfügung standen.

Von der VGA-Auflösung von 640 × 480 Pixeln leiten sich weitere Formate z. B. für PDAs ab. Eine Auflistung findet sich unter Grafikmodus#Bildauflösung.

Literatur[Bearbeiten]

  • Mathias Uphoff: Programmierung der EGA /VGA-Grafikkarte, 1. Auflage, Addison-Wesley, 1990, ISBN 3-89319-274-3

Einzelnachweise[Bearbeiten]

  1. VGA-Buchse zum Aussterben verurteilt – Artikel bei heise online, vom 10. Dezember 2010