Skip to main content.

Navigation:

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:

BitsBedeutung
0-3Vordergrundfarbe
4-6Hintergrundfarbe
7Blinken

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.

00Schwarz08Dunkelgrau
01Blau09Hellblau
02Grün10Hellgrün
03Cyan11Hellcyan
04Rot12Hellrot
05Magenta13Hellmagenta
06Braun14Gelb
07Hellgrau15Weiß

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:

IndexRegisterBedeutung
14Cursor (high)Zeichenoffset der Cursorposition
15Cursor (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:

PortRegisterZugriffsart
3d4Indexregisternur schreiben
3d5Datenregisterlesen und schreiben