| Zeile 1: | Zeile 1: | ||
{{Stub}} | {{Stub}} | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
== Einleitung == | == Einleitung == | ||
Irgendwann ist man an einem Punkt angelangt, an dem man nicht nur den voreingestellten Textmodus des BIOSes benutzen möchte. Man möchte in den Grafikmodus wechseln, die Auflösung anpassen und vielleicht auch die Farbtiefe anpassen. Oder auch einfach nur die Schriftart (Den Font) ändern. Der erste Station auf diesem Weg (Anfangs besser die erste Hürde) nennt sich VGA (Video Graphics Array). | Irgendwann ist man an einem Punkt angelangt, an dem man nicht nur den voreingestellten Textmodus des BIOSes benutzen möchte. Man möchte in den Grafikmodus wechseln, die Auflösung anpassen und vielleicht auch die Farbtiefe anpassen. Oder auch einfach nur die Schriftart (Den Font) ändern. Der erste Station auf diesem Weg (Anfangs besser die erste Hürde) nennt sich VGA (Video Graphics Array). | ||
| Zeile 37: | Zeile 22: | ||
=== Attribut Controller === | === Attribut Controller === | ||
Der Attribut Controller wird über die Ports 0x3C0 und 0x3C1 gesteuert. Ersterer übernimmt dabei den Index und die zu schreibenden Daten und letzterer enthält die zu lesenden Daten. Wie? Über nur zwei Ports hat man Zugriff auf mehrere Register? Und über ein und denselben Port werden Index und Daten geschrieben? Wie geht denn das? Nun, die Register werden durchnummeriert. Möchte man Daten ins Register 1 schreiben oder lesen, dann schreibt man zuerst die 1 das Index Register 0x3C0 und kann anschließend über denselben Port Daten senden oder über Port 0x3C1 das Register lesen. Dabei merkt sich der Controller, ob als nächstes ein Index oder Daten anstehen. Leider ist zu Beginn nicht definiert was erwartet wird. Glücklicherweise kann man durch Lesen eines Bytes von Port 0x3DA (Das ist das externe Status Register 1) die Logik zurücksetzen, sodass als nächstes ein Index erwartet wird. Man sollte also vor jedem Zugriff zuerst mal Port 0x3DA lesen, dann den Index schreiben und anschließend die Daten lesen/schreiben. | Der Attribut Controller wird über die Ports 0x3C0 und 0x3C1 gesteuert. Ersterer übernimmt dabei den Index und die zu schreibenden Daten und letzterer enthält die zu lesenden Daten. Wie? Über nur zwei Ports hat man Zugriff auf mehrere Register? Und über ein und denselben Port werden Index und Daten geschrieben? Wie geht denn das? Nun, die Register werden durchnummeriert. Möchte man Daten ins Register 1 schreiben oder lesen, dann schreibt man zuerst die 1 das Index Register 0x3C0 und kann anschließend über denselben Port Daten senden oder über Port 0x3C1 das Register lesen. Dabei merkt sich der Controller, ob als nächstes ein Index oder Daten anstehen. Leider ist zu Beginn nicht definiert was erwartet wird. Glücklicherweise kann man durch Lesen eines Bytes von Port 0x3DA (Das ist das externe Status Register 1) die Logik zurücksetzen, sodass als nächstes ein Index erwartet wird. Man sollte also vor jedem Zugriff zuerst mal Port 0x3DA lesen, dann den Index schreiben und anschließend die Daten lesen/schreiben. | ||
| + | |||
| + | == Modi == | ||
| + | ====Modus 13h==== | ||
| + | 320x200 Punkte bei 256 Farben | ||
| + | |||
| + | Speicheradresse: 0xA0000 | ||
| + | |||
| + | Speichergröße: 64000 Bytes | ||
| + | |||
== Siehe auch == | == Siehe auch == | ||
| Zeile 46: | Zeile 40: | ||
[[Category:Glossar]] | [[Category:Glossar]] | ||
[[Category:Hardware]] | [[Category:Hardware]] | ||
| − | |||
== Quellen == | == Quellen == | ||
* [http://wiki.osdev.org/VGA_Hardware wiki.osdev.org/VGA_Hardware] | * [http://wiki.osdev.org/VGA_Hardware wiki.osdev.org/VGA_Hardware] | ||
* [http://www.osdever.net/FreeVGA/vga/vga.htm www.osdever.net/FreeVGA/vga/vga.htm] | * [http://www.osdever.net/FreeVGA/vga/vga.htm www.osdever.net/FreeVGA/vga/vga.htm] | ||