Simuliertes Bild, wie es im VGA-Modus mit 13h-Auflösung und Farbwiedergabe dargestellt wird (Seitenverhältnis nicht korrigiert).
Standard-VGA-256-Farben-Palette

Der Modus 13h ist der Standard-256-Farben-Modus der VGA- Grafikhardware, der 1987 mit dem IBM PS/2 eingeführt wurde . Er hat eine Auflösung von 320 × 200 Pixeln . [ 1 ] „13h“ bezeichnet die Modusnummer im VGA- BIOS . Das „h“ steht für Hexadezimal .

Der Modus 13h stellt Programmierern einen linearen 320 × 200 Pixel großen Videospeicherblock zur Verfügung , wobei jedes Byte ein Pixel repräsentiert. Dies vereinfacht die Programmierung, schränkt jedoch den Zugriff auf andere nützliche Funktionen der VGA-Hardware ein.

Aufgrund des Seitenverhältnisses eines Bildschirms mit einer Auflösung von 320 × 200 Pixeln für die Verwendung auf einem 4:3- Display verfügt Modus 13h nicht über quadratische Pixel . [ 2 ]

Technische Details

Modus 13h ist insofern ungewöhnlich, als die VGA-Grafikkarte hardwareseitig ein planares Gerät ist und sich daher nicht für komplexe Grafikoperationen eignet. Die VGA verfügt über 256  KiB Videospeicher, der aus vier Bänken à 64 KiB besteht, den sogenannten Ebenen (oder „Maps“ in der IBM-Dokumentation). Die planare Speicheranordnung teilt die Pixel horizontal in Vierergruppen auf. Für jedes Byte im 64 KiB großen Videospeicherbereich des PCs können vier Pixel auf dem Bildschirm angesteuert werden, indem die gewünschte(n) Ebene(n) ausgewählt werden. Dies ist zwar für den Programmierer komplexer, ermöglicht aber den Zugriff auf den gesamten verfügbaren Videospeicher und bietet weitere Vorteile (siehe Modus X ).

Der Modus 13h ermöglicht dem Programmierer den Zugriff auf die VGA-Schnittstelle in linearer Form, wobei jede aufeinanderfolgende Adresse in der Apertur einem aufeinanderfolgenden Pixel auf dem Bildschirm entspricht. Die Ebenen müssen nicht manuell ausgewählt werden, um die richtigen Pixel zum Ändern oder Lesen zu bestimmen. Dies wird durch die VGA-Einstellung „Chain 4“ erreicht, bei der die beiden niedrigsten Bits der 16-Bit-Aperturadresse zur Auswahl der Ebene für Schreib- bzw. Lesezugriffe verwendet werden. Der Vorteil für den Programmierer ist ein einfaches Zugriffsmodell; der Nachteil besteht darin, dass nun nur noch 2 <sup>14</sup> (16 KiB) des Adressraums der Videoebene zugänglich sind (die anderen beiden Bits werden zur Auswahl der Ebenen verwendet), sodass insgesamt nur 64 KiB (4 × 16 KiB) adressierbar sind. Die oberen 48 KiB jeder Ebene bleiben in diesem Modus ungenutzt.

Im Gegensatz zu SVGA und höheren Farbtiefen verfügt der Modus 13h, ein Teil der MCGA -Videomodi, über 18 Bit Farbtiefe (6 Bit pro RGB-Kanal). Die Farbpalettendaten werden nicht direkt im Speicher abgelegt, sondern durch Low-Level-I/O-Port-Aufrufe an die DAC- Register angepasst, gelesen und beschrieben .

Die Palettendaten wurden oft einzeln von den Low-Level-Ports in einen Speicherbereich nach den Bildschirmdaten kopiert, um die Farben zusammen mit den zugehörigen Pixeln zu speichern. Eine Bildschirmaufnahme im Modus 13h besteht lediglich aus 64.000 Bytes mit Werten von 0 bis 255, wobei jeder Wert einen Index einer Farbe aus einer bekannten Farbpalette darstellt. Ist die Farbpalette fehlerhaft oder gar durcheinander, erscheint ein grünes Blatt blau oder in einer anderen Farbe, je nachdem, welcher Wert aus 256 für diese Farbe festgelegt war.

Aufgrund der Art und Weise, wie Speicherblöcke in dieser Umgebung allokiert werden, können die Bytes im Segment 0xA000 von Offset 64000 bis 64768 ohne negative Auswirkungen beschrieben werden. Dadurch kann der Programmierer die zusätzlichen Bytes (256 (Farben) × 3 (Farbkanäle) = 768 Bytes) am Ende der Bildschirmaufnahmedatei speichern. Diese müssen wieder ausgelesen und an den Farbport geschrieben werden, damit sie sich ändern, sobald ein Bild mit einer Fußzeile mit Farbinformationen geladen wird. Eine hierfür verwendete Methode war die Verwendung einer globalen Palette, um die Farben einer alten Farbpalette an eine neue anzupassen. Dies erforderte die Änderung des Index jedes Pixels, um eine nahezu perfekte Übereinstimmung einer Farbe aus dem alten und neuen Farbsatz zu erzielen. Diese Methode hatte jedoch auch Nachteile, da manchmal nicht genügend Farbverläufe vorhanden waren und Artefakte auftraten.

Es ist nicht zwingend erforderlich, den Grafikmodus über das BIOS einzustellen; der Wechsel des Grafikmodus im 32-Bit-geschützten Modus ist zwar möglich, aber etwas komplizierter. Dazu müssen Größenangaben an den VGA-Controller geschrieben werden.

Varianten

Ein alternativer planarer 256-Farben-Modus ist durch Deaktivieren des Kettenmodus 4 (Entkopplung) verfügbar. Die mit dieser Technik erzeugten Videomodi werden zusammenfassend als Modus X bezeichnet , obwohl dieser Begriff ursprünglich für einen VGA-Modus mit quadratischen Pixeln verwendet wurde. Obwohl diese Modi (sowie viele andere mögliche VGA-Modi) von IBM nicht explizit dokumentiert wurden, sind die zu ihrer Implementierung verwendeten VGA-Hardwarefunktionen und -merkmale mindestens seit 1988 in der „ PS/2 Hardware Interface Technical Reference“ dokumentiert .

Notation

13hbezieht sich auf die Zahl 19 in hexadezimaler Notation, wie sie typischerweise in Assembler-Code für Intel-Prozessoren dargestellt wird. In der Programmiersprache C wird die hexadezimale Zahl 13 wie folgt geschrieben 0x13:

In x86-Assemblersprache wird der Videomodus aktiviert, indem das AL- Register auf 13h, das AH -Register auf 0 gesetzt und anschließend der BIOS-Interrupt 10h aufgerufen wird . [ 1 ] Die beiden 8-Bit-Register AL und AH bilden das 16-Bit -AX- Register.

Obwohl 13 hexadezimal 19 entspricht, wird es im Nummerierungsschema der QuickBASIC -Bildschirmmodi einfach als Bildschirmmodus 13 (nicht hexadezimal) bezeichnet. [ 3 ] Viele QuickBASIC-Bildschirmmodi haben Nummern, die sich von den BIOS-Modi unterscheiden, auf denen sie basieren. [ 4 ]

Quellcodebeispiele

Assembler-Code zum Aufrufen des Modus 13h:

mov ax , 0013 h int 10 h

Als Beispiel für den Modus 13h im Quellcode eines Videospiels enthält Wolfenstein 3D diese Funktion in einer Datei namens „ID_VL.C“. Der Modus 13h wird durch zwei Assembler-Befehle (mit dem Präfix asm) im C-Quellcode aktiviert und schaltet in einen benutzerdefinierten planaren Modus, der dreifaches Puffern ermöglicht. [ 5 ]

void VL_SetVGAPlaneMode ( void ) { asm mov ax , 0x13 asm int 0x10 VL_DePlaneVGA (); VGAMAPMASK ( 15 ); VL_SetLineWidth ( 40 ); }

Wolfenstein 3D Quellcode (ca. 1992), der das BIOS auffordert, in den Modus 13h zu wechseln.

Referenzen

  1. ^ a b Brown, Ralf D. „Ralf Browns Unterbrechungsliste“ . Abgerufen am 24.08.2018 .
  2. ^ Fabien Sanglard, GAME ENGINE BLACK BOOK: WOLFENSTEIN 3D, 2. Auflage, Kapitel Hardware, Seite 59, frei verfügbar unter https://fabiensanglard.net/gebb/index.html
  3. ^ „Microsoft QuickBasic 4.5 Advisor“ . Microsoft . 1990. Archiviert vom Original am 05.01.2009 . Abgerufen am 19.07.2007 .
  4. Ein wichtiges Beispiel ist der QuickBASIC-Bildschirmmodus 0, der alle BIOS-Textmodi 00h bis 03h abdeckt. Die QuickBASIC-Bildschirmmodi 1 und 2 entsprechen den CGA-BIOS-Modi 04h bis 06h. QuickBASIC bietet außerdem Modi für den Hercules-Grafikmodus , der vom BIOS nicht standardmäßig unterstützt wird, sowie für die erweiterten CGA-Grafikmodi von Olivetti/AT&T .
  5. ^ https://github.com/id-Software/wolf3d/blob/master/WOLFSRC/ID_VL.C#L108