Video-RAM
Jede PC Grafikkarte verfügt über einen eigenen Speicherbereich,
das Video-RAM, mit dessen Hilfe der Bildschirminhalt programmiert
werden kann. Im Grafikmodus müssen dazu für jeden Bildpunkt
je nach der 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 das Video-RAM zu
übertragen. Die Umsetzung des ASCII-Codes in eine Pixelmatrix
wird dann von der Grafikkarte eigenständig vorgenommen.
In dem Praktikum zu Betriebssysteme I sollen alle Ausgaben im CGA
Textmodus erfolgen. Dieser Modus wird von fast allen Grafikkarten
unterstützt, ist einfach zu programmieren und für das
Ü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. Die Zählung wird dann mit dem ersten
Zeichen der zweiten Zeile fortgesetzt.
Da das Video-RAM in den Hauptspeicher des PCs eingeblendet ist, kann
es 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 und Blinken einzeln festgelegt werden. Für diese
Attribute steht pro Zeichen ein Byte zur Verfügung, dessen Bits
folgende Bedeutung haben:
Darstellungsattribute |
Bits 0-3 | Vordergrundfarbe |
Bits 4-6 | Hintergrundfarbe |
Bit 7 | Blinken |
Im CGA Textmodus stehen die folgenden 16 Farben zur Verfügung:
Farbpalette |
---|
0 | Schwarz |
8 | Dunkelgrau |
1 | Blau |
9 | Hellblau |
2 | Grün |
10 | Hellgrün |
3 | Cyan |
11 | Hellcyan |
4 | Rot |
12 | Hellrot |
5 | Magenta |
13 | Hellmagenta |
6 | Braun |
14 | Gelb |
7 | Hellgrau |
15 | Weiß |
Da für die Hintergrundfarbe im Attributbyte nur drei Bits zur
Verfügung stehen, können auch nur die ersten acht Farben zur
Hintergrundfarbe gewählt werden.
Kontrolle des Cursors
Um die aktuelle Cursorposition abfragen oder setzen zu können,
muß der Videocontroller der Grafikkarte programmiert
werden. Dazu stehen u. a. ein Datenregister, ein Indexregister und 18
Steuerregister zur Verfügung.
Für das Übungsbetriebssystem sind neben dem Daten- und dem
Indexregister nur die Steuerregister 14 und 15 interessant:
Index | Register | Bedeutung |
14 | Cursor (high) |
Offset der Cursorposition im Video-RAM |
15 | Cursor (low) |
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 |
Der Zugriff auf die Steuerregister ist dagegen etwas aufwendiger:
Um den Inhalt eines Steuerregisters vom Videocontroller abzufragen
oder zu setzen, muß zunächst über das Indexregister
der Index des gewünschten Steuerregisters ausgegeben
werden. Anschließend kann über das Datenregister auf das so
adressierte Steuerregister zugegriffen werden.