Die erste Grafikkarte die IBM verkaufte war dieser Color Graphics Adapter aus dem Jahre
Für anfangs 1000DMark bekam man bis zu 16 Farben und hatte ganze 16 KB Videospiecher.
Die Grafikauflösung betrug bis zu 640x200 Pixel, aber dann nur mit zwei Farben.
Alle 16 Farben konnte man allerdings nur im Textmodus gleichzeitig nutzen.
Und dieser Textmodus ist auch bei den Nachfolgern Enhanced Graphics Adapter, EGA, und Video
Graphics Array, VGA, bestehen geblieben und wird von heutigen Systemen im Allgemeinen
auch noch unterstützt.
Wir haben in diesem Textmodus 25 Zahlen mit je 80 Zeichen zur Verfügung, können also
2000 Zeichen gleichzeitig am Bildschirm anzeigen.
Für jedes Zeichen brauchen wir dabei 2 Bytes, das erste davon beinhaltet das darzustellende
Zeichen selbst.
Der dazu verwendete Zeichensatz CodePage 437 trifft die druckbaren ASCII Zeichen.
In ASCII sind die ersten 32 Codes allerdings nicht druckbare Steuerzeichen, wie beispielsweise
die 10 für den Zeilenumbruch.
Wenn wir hier diesen Wert als erstes Byte setzen, sehen wir jedoch einen Block mit einem
Kreis, denn alle Werte haben im Zeichensatz eine grafische Repräsentation.
Das zweite Byte dient der Konfiguration der Darstellung.
Neben Spezialeffekten wie dem Blinken kann man damit die Farben steuern.
Von den 16 Farben stehen als Hintergrundfarbe nur die ersten 8 zur Verfügung.
Da sind allerdings alle relevanten Farben mit dabei, die anderen sind eigentlich nur
aufgehellte Farbvarianten, welche nur bei der Vordergrundfarbe verwende werden können.
Der Videospeicher für diese Bytes ist in unserem Arbeitsspeicher eingeblendet, ab Adresse 0xB8000.
Ein an die erste Adresse gespeichertes Byte, hier das B, wird an der ersten Stelle mit
dem nachfolgenden spezifizierten Darstellungsattribut eingeblendet.
Das Byte an der Adresse 0xB80002 entspricht dann dem zweiten Zeichen am Bildschirm.
Der hier dargestellte Speicher würde am Bildschirm in rot das Wort Bar auf hellgraum Hintergrund
ausgeben, wobei das erste Zeichen blinken wird.
Bitte beachten, das Blinken wird nicht zwangsläufig im Emulator dargestellt, da das höchstwertige
Bit auch anders interpretiert werden kann, aber die Farben sollten übereinstimmen.
Um jetzt das Darstellungsattribut nach unserem Wünschen zu setzen, kann man die im Grundstudium
gelernten Bit-Aparationen verwenden, Bitwise's und, oder Exklusives oder Negation sowie das
Shiften.
Um eine bessere Lesbarkeit zu ermöglichen, sollte man jedoch nicht wie hier die dezimale
Repräsentation verwenden, besser Hexwerte oder konstante Variable mit entsprechenden
Namen.
Um jetzt beispielsweise in einer Variable x das Ente Bit zu setzen oder zu löschen,
verwendet man in der Regel diese gut lesbaren Konstrukte.
Noch lesbarer sind allerdings Bitfelder.
Felder in Strukturen können mit einer Länge definiert werden, hier FG für Foreground
mit 4 Bit und Background mit 3 Bit sowie blinkt mit einem Bit.
Der Zugriff ist dann wie bei Strukturen üblich, in Verbindung mit Enums eine intuitive Art
die Attribute zu definieren.
Die gesetzten Werte entsprechen dann einem Byte mit diesem Speicherlayout.
Das erste Feld Foreground beginnt beim niedrigwertigsten Bit.
Nach dem C-Standard ist die Reihenfolge übrigens nicht spezifiziert, aber auf dem x86 bilden
alle relevanten Übersetzer das Wien Beispiel ab.
Allerdings gibt es bei Strukturen Falschtrücke, die man wissen sollte, wenn man eine gewisse
Darstellung im Speicher erwartet.
Diese Struktur hat ein CharArray, drei Elemente zu je ein Byte, ein Integer, welcher auf
Presenters
Zugänglich über
Offener Zugang
Dauer
00:08:23 Min
Aufnahmedatum
2020-07-29
Hochgeladen am
2021-09-20 19:56:20
Sprache
de-DE
Bildschirmausgabe mittels CGA Textmode für Aufgabe 1 der Lehrveranstaltung Betriebssysteme.
Folien und Transkript zum Video.