INT 10h , INT 10H oder INT 16 ist die Kurzform für BIOS-Interruptaufruf 10 hex , den 17. Interruptvektor in einem x86 -basierten Computersystem. Das BIOS richtet typischerweise an diesem Vektor einen Interrupthandler im Realmodus ein , der Videodienste bereitstellt. Zu diesen Diensten gehören das Einstellen des Videomodus, die Ausgabe von Zeichen und Zeichenketten sowie Grafikprimitive (Lesen und Schreiben von Pixeln im Grafikmodus).
Um diesen Aufruf zu verwenden, laden Sie AH mit der Nummer der gewünschten Unterfunktion, laden Sie weitere benötigte Parameter in andere Register und führen Sie den Aufruf aus. INT 10h ist relativ langsam, daher umgehen viele Programme diese BIOS-Routine und greifen direkt auf die Grafikhardware zu. Die Einstellung des Videomodus, die selten erforderlich ist, kann über das BIOS erfolgen, während die Grafikdarstellung in einem Spiel schnell erfolgen muss. Daher ist der direkte Zugriff auf den Videospeicher sinnvoller als ein BIOS-Aufruf für jedes Pixel.
Auf modernen x86-Systemen können BIOS-Aufrufe nur im Realmodus oder im virtuellen 8086-Modus erfolgen . Im Langmodus ist v8086 nicht verfügbar . Das bedeutet, dass ein modernes Betriebssystem, das im geschützten Modus (32 Bit) oder im Langmodus (64 Bit) arbeitet, in den Realmodus und wieder zurück wechseln müsste, um das BIOS aufzurufen – ein äußerst rechenintensiver Vorgang. Obwohl die meisten modernen Systeme üblicherweise Gerätetreiber verwenden, die den Videomodus direkt festlegen, ist es für Hobby-Betriebssysteme nicht praktikabel , für jede Grafikkarte einen eigenen Gerätetreiber bereitzustellen – ein Problem, das auch ältere, nicht mehr unterstützte Systeme wie Windows 98 betrifft . Solche Systeme können stattdessen in den Realmodus wechseln, um den Videomodus umzuschalten und dann direkt in den Framebuffer zu zeichnen.
In EFI 1.x-Systemen werden INT 10H und die VESA BIOS Extensions (VBE) durch das EFI UGA-Protokoll ersetzt. In den weit verbreiteten UEFI 2.x-Systemen werden INT 10H und VBE durch UEFI GOP ersetzt . [ 1 ] [ 2 ]
Liste der unterstützten Funktionen
Die Liste ist unvollständig; verwenden Sie Ralf Browns Interrupt-Liste für umfassende Informationen. Bitte fügen Sie nur IBM/PC- oder andere gängige Standardfunktionen hinzu. 00h bis 0fh sind CGA-Funktionen.
| Funktion | Funktionscode | Parameter | Zurückkehren |
|---|---|---|---|
| Videomodus einstellen | AH=00h | AL = Videomodus | AL = Videomodus-Flag / CRT-Controller-Modus-Byte |
| Cursorform im Textmodus festlegen | AH=01h | CH = Scanzeilenanfang, CL = Scanzeilenende Normalerweise hat eine Zeichenzelle 8 Scanzeilen (0–7). Daher ist CX=0607h ein normaler Unterstreichungscursor, CX=0007h ein Vollblockcursor. Wenn Bit 5 von CH gesetzt ist, bedeutet dies oft „Cursor ausblenden“. CX=2607h ist also ein unsichtbarer Cursor. Einige Grafikkarten haben 16 Scanzeilen, 00h-0Fh. Manche Grafikkarten nutzen Bit 5 von CH nicht. Bei diesen muss Start > Ende sein (z. B. CX=0706h). | |
| Cursorposition festlegen | AH=02h | BH = Seitenzahl, DH = Zeile, DL = Spalte | |
| Cursorposition und -form abrufen | AH=03h | BH = Seitenzahl | AX = 0, CH = Startzeile, CL = Endzeile, DH = Zeile, DL = Spalte |
| Position des Lichtstifts lesen (Funktioniert nicht auf VGA -Systemen) | AH=04h | AH = Status (0 = nicht ausgelöst, 1 = ausgelöst), BX = Pixel X, CH = Pixel Y, CX = Pixelzeilennummer für die Modi 0Fh–10h, DH = Zeichen Y, DL = Zeichen X | |
| Aktive Anzeigeseite auswählen | AH=05h | AL = Seitenzahl | |
| Fenster nach oben scrollen | AH=06h | AL = Zeilen zum Scrollen (0 = löschen, CH, CL, DH, DL werden verwendet), BH = Hintergrundfarbe und Vordergrundfarbe. BH = 43h bedeutet, dass die Hintergrundfarbe Rot und die Vordergrundfarbe Cyan ist. Siehe die Farbattribute im BIOS. CH = Obere Zeilennummer, CL = Linke Spaltennummer, DH = Untere Zeilennummer, DL = Rechte Spaltennummer | |
| Fenster nach unten scrollen | AH=07h | wie oben | |
| Zeichen und Attribut an der Cursorposition lesen | AH=08h | BH = Seitenzahl | AH = Farbe , AL = Zeichen |
| Zeichen und Attribut an der Cursorposition schreiben | AH=09h | AL = Zeichen, BH = Seitenzahl, BL = Farbe , CX = Anzahl der Druckvorgänge | |
| Schreibe nur Zeichen an der Cursorposition | AH=0Ah | AL = Zeichen, BH = Seitenzahl, CX = Anzahl der Ausgaben des Zeichens | |
| Hintergrund-/Rahmenfarbe festlegen | AH=0BH, BH = 00h | BL = Hintergrund-/Rahmenfarbe (Rahmen nur im Textmodus) | |
| Set-Palette | AH=0BH, BH = 01h | BL = Paletten-ID (war nur in CGA gültig , wird aber von neueren Grafikkarten in vielen oder allen Grafikmodi unterstützt) | |
| Grafikpixel schreiben | AH=0Ch | AL = Farbe , BH = Seitenzahl, CX = x, DX = y | |
| Grafikpixel lesen | AH=0Dh | BH = Seitenzahl, CX = x, DX = y | AL = Farbe |
| Teletype-Ausgabe | AH=0Eh | AL = Zeichen, BH = Seitenzahl, BL = Farbe (nur im Grafikmodus) | |
| Aktuellen Videomodus abrufen | AH=0Fh | AL = Videomodus, AH = Anzahl der Zeichenspalten, BH = aktive Seite | |
| Zeichensatz für den Textmodus ändern [ 3 ] | AH=11h | BH = Anzahl der Bytes pro Zeichen, CX = Anzahl der zu ändernden Zeichen, DX = Startzeichen der zu ändernden Zeichen, ES:BP = Offset der Zeichendaten | |
| Schreibe Zeichenkette (EGA+, bedeutet PC AT Minimum) | AH=13h | AL = Schreibmodus, BH = Seitenzahl, BL = Farbe , CX = Anzahl der Zeichen in der Zeichenkette, DH = Zeile, DL = Spalte, ES:BP = Offset der Zeichenkette | |
| VESA-konforme Videomodi einstellen, beginnend bei 640 x 480 und bis zu 1280 x 1024 mit 256 Farben | AX=4f02h | BX = Videomodus; wenn das Vorzeichenbit (Bit 15) gesetzt ist, wird der Videospeicher nicht aktualisiert. | |
| Weitere VESA VBE -Befehle | AX=4F00h bis 4F15h | Siehe Spezifikation | Siehe Spezifikation |
Siehe auch
Referenzen
- ^ „Was ist efifb? – Die Linux-Kernel-Dokumentation“ . kernel.org . Abgerufen am 24.11.2020 .
- ^ „Was ist vesafb? – Die Linux-Kernel-Dokumentation“ . kernel.org . Abgerufen am 24.11.2020 .
- ^ „Eine Routine zum Ändern von Schriftarten“ . Forever Young Software . Abgerufen am 8. März 2020 .