Informationen CGA
Video-RAM
Jede Grafikkarte verfügt über einen Video-RAM, einen eigenen Speicherbereich mit dessen Hilfe der Bildschirminhalt programmiert werden kann. Im Grafikmodus müssen dazu für jeden Bildpunkt je nach Anzahl der möglichen Farben ein oder mehrere Bits im Video-RAM gesetzt bzw. gelöscht werden. Im Textmodus genügt es dagegen, den ASCII-Code des gewünschten Zeichens, zusammen mit dessen Darstellungsattributen in den Video-RAM zu übertragen. Die Umsetzung des ASCII-Codes in eine Pixelmatrix wird dann eigenständig von der Grafikkarte vorgenommen.
In der Übung zur Vorlesung Betriebssysteme I sollen alle Ausgaben des Betriebssystems oo-StuBS im CGA-Textmodus erfolgen. Dieser Modus wird von fast allen Grafikkarten unterstützt, ist einfach zu programmieren und für ein Übungsbetriebssystem vollkommen ausreichend.
Im CGA Textmodus belegt jede Bildschirmposition zwei Bytes im Video-RAM. Das erste der beiden Bytes (gerade Offsetadresse) nimmt den ASCII-Code des darzustellenden Zeichens auf, das zweite (ungerade Offsetadresse) die gewünschte Vorder- und Hintergrundfarbe. Die Abbildung der Bildschirmpositionen auf die Einträge im Video-RAM erfolgt nach Zeilen und Spalten geordnet. Bei einer Auflösung von 80 Zeichen pro Zeile und 25 Zeilen belegt das Zeichen in der linken oberen Ecke die Bytes 0 und 1, das Zeichen rechts daneben die Bytes 2 und 3 und das Zeichen am Ende der ersten Zeile die Bytes 158 und 159. Diese Zählung wird dann mit dem ersten Zeichen der zweiten Zeile fortgesetzt usw..
Da der Video-RAM in den Hauptspeicher des Computers eingeblendet wird, kann er mit Hilfe normaler Speicherzugriffe beschrieben werden. Offset 0 im Video-RAM wird mit (hexadezimal) b8000 addressiert.
Darstellungsattribute
Zu jedem Zeichen können die Merkmale Vordergrundfarbe, Hintergrundfarbe sowie Blinken einzeln festgelegt werden. Für diese Attribute steht pro Zeichen ein Byte zur Verfügung, dessen Bits haben für die Darstellungsattribute folgende Bedeutung:
Bits | Bedeutung |
0-3 | Vordergrundfarbe |
4-6 | Hintergrundfarbe |
7 | Blinken |
Für die Darstellung im CGA-Textmodus stehen dem Anwender die folgenden 16 Farben zur Verfügung. Die folgende Tabelle zeigt die zur Verfügung stehende Farbpalette. Da für die Hintergrundfarbe im Attributbyte nur drei Bits zur Verfügung stehen, können auch nur die ersten acht Farben als Hintergrundfarbe gewählt werden.
00 | Schwarz | 08 | Dunkelgrau |
01 | Blau | 09 | Hellblau |
02 | Grün | 10 | Hellgrün |
03 | Cyan | 11 | Hellcyan |
04 | Rot | 12 | Hellrot |
05 | Magenta | 13 | Hellmagenta |
06 | Braun | 14 | Gelb |
07 | Hellgrau | 15 | Weiß |
Cursor
Um die aktuelle Position des Cursors abfragen oder setzen zu können, muss der Videocontroller der Grafikkarte programmiert werden. Der Videocontroller einer CGA-Karte stellt zu diesem Zweck insgesamt 18 Steuerregister (8-Bit Wortbreite) zur Verfügung. Für die Cursorsteuerung sind jedoch nur die Steuerregister 14 und 15 interessant:
Index | Register | Bedeutung |
14 | Cursor (high) | Zeichenoffset der Cursorposition |
15 | Cursor (low) |
Die Steuerregister können jedoch nicht direkt angesprochen werden.
Der Zugriff erfolgt vielmehr indirekt über ein Index- und ein
Datenregister. Dazu wird in das Indexregister zunächst die Nummer
des Steuerregisters geschrieben, das gelesen oder geschrieben werden soll.
Der eigentliche Zugriff auf den Inhalt des Steuerregisters (lesen/schreiben)
erfolgt dann über das Datenregister.
Daten- und Indexregister können direkt mit Hilfe der in
und out
Befehle angesprochen werden, da ihnen eigenständige
Portadressen zugeordnet sind:
Port | Register | Zugriffsart |
3d4 | Indexregister | nur schreiben |
3d5 | Datenregister | lesen und schreiben |