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 Rechnerübung 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. Der Videocontroller der CGA-Karte stellt insgesamt 18 Steuerregister
(8-Bit Wortbreite) zur Verfügung. Für die Cursorsteuerung
sind hier 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: