Home Programmierung
und BIOS
Shareware-
FAQ
Kontakt u.
Infos

BIOS-Interrupt 15h

Die Funktionen den Interruptes 15h (AT - Funktionen) stellt die folgende Tabelle dar:

Funktion Unter- Funktion Bedeutung Eingabe Ausgabe BIOS - Implementierung Anmerkungen
4Fh - Tastatur abfangen AH=4Fh
AL=Tastatur - Auswahlcode
CF=1: Taste wurde verarbeitet
CF=0: BIOS soll Taste verarbeiten
AT, PS/2 Diese Funktion kann nicht direkt aufgerufen werden, sondern wird selbständig vom Hardware - Interrupt 9 aufgerufen und kann auf eine eigene Routine umgelegt werden, die mit RETF 2 enden muß. Sie bietet deshalb die Möglichkeit, die Tastatur abzufangen, wird jedoch selten genutzt.
83h 00h Flag nach Zeitintervall setzen AH=83h
AL=0
CX=Zeit in Mikrosekunden (Bits 16 - 31)
DX=Zeit in Mikrosekunden (Bits 0 - 15)
ES:BX Zeiger auf ein Byte
CF=1: Timer läuft bereits AT, PS/2 Es wird ein Timer gestartet, der Bit 7 des Bytes ES:BX auf 1 setzt.
83h 01h Timer stoppen AH=83h
AL=1
CF=1: Funktion nicht unterstützt AT, PS/2 Stoppt den mit der Unterfunktion 00h gestarteten Timer.
84h 00h Joystick, Feuertasten - Status lesen AH=84h
DX=0
CF=1: kein Joystick angeschlossen
sonst:
AL=Status der Feuerknöpfe
AT, PS/2 Liest den Status der Feuerknöpfe eines Joysticks.
84h 01h Joystick, Widerstandswerte lesen AH=84h
DX=1
CF=1: kein Joystick angeschlossen
sonst:
AX=X-Stellung des ersten Joysticks
BX=Y-Stellung des ersten Joysticks
CX=X-Stellung des zweiten Joysticks
DX=Y-Stellung des zweiten Joysticks
AT, PS/2 Liefert die Stellungen der angeschlossenen Joysticks zurück.
85h - SysReq - Taste betätigt AH=85h AL=1: Taste gedrückt,
AL=0: Taste losgelassen
(wenn Carry gesetzt: Fehler)
AT, PS/2 stellt den Zustand der System - Request - Taste fest.
86h - Warten AH=86h
AL=0
CX=Zeit in Mikrosekunden (Bits 16 - 31)
DX=Zeit in Mikrosekunden (Bits 0 - 15)
- AT, PS/2 Wartet die entsprechende Zeit.
87h - Speicherbereiche verschieben AH=87h
CX=Anzahl der zu verschiebenden Worte (<8000h)
ES:SI zeigt auf eine Global Descriptor Tabelle.
AH=Status:
00=erfolgreich, 01=RAM-Parität, 02=anderer Exception-Fehler, 03=Protected-Mode konnte nicht richtig initialisiert werden.

bei Fehler Carry-Flag gesetzt.
AT, PS/2 -
88h - Speichergröße über 1 MB AH=88h AX=Speichergröße AT, PS/2 Ermittelt die Größe des verfügbaren erweiterten Speichers. Bei installiertem XMS - Treiber ist der Rückgabewert dieser Funktion in der Regel 0.
89h - Umschaltung in den Protected Mode AH=89h
BH=Index auf Interrupt - Level 1
BL=Index auf Interrupt - Level 2
ES:SI zeigt auf eine Global Descriptor Tabelle
AX=00h, wenn erfolgreich. Alle anderen zerstört.
Carry gesetzt bei Fehler.
AT, PS/2 (?) -

Der Interrupt 15h unterstützt zusätzlich einige weitere, geräteabhängige Funktionen wie z.B. Funktionen zur Kassettenansteuerung etc.. Da diese jedoch längst überholt sind und i.d.R. nicht mehr unterstützt werden, sind sie hier nicht mehr aufgeführt (daher auch der Untertitel "AT-Funktionen").

Die Funktionen können mit dem Turbo-Pascal-eigenen Assembler aufgerufen werden. Ein Anwendungsbeispiel könnte so aussehen:


ASM

  mov {...}

  {Register entsprechend der Spalte "Eingabe" belegen...}

  int $15;

  mov {...}

  {Register auslesen gemäß der Spalte "Ausgabe"...}

END;

Generell wird im Register AH die Funktionsnummer übergeben.

Status der Joystick-Feuerknöpfe

Bit Bedeutung
0 - 3 unbenutzt
4 erster Feuerknopf des ersten Joysticks
5 zweiter Feuerknopf des ersten Joysticks
6 erster Feuerknopf des zweiten Joysticks
7 zweiter Feuerknopf des zweiten Joysticks

Global Deskriptor Tabelle

Offset Länge Zeiger auf
00h 8 Bytes Dummy
08h 8 Bytes Global Descriptor Tabelle
10h (16) 8 Bytes Interrupt Descriptor Tabelle
18h (24) 8 Bytes Daten - Segment (Benutzer)
20h (32) 8 Bytes Extra - Segment (Benutzer)
28h (40) 8 Bytes Stapel - Segment (Benutzer)
30h (48) 8 Bytes Code - Segment (Benutzer)
38h (56) 8 Bytes Zeitweises BIOS - Code - Segment

Alle Angaben ohne Gewähr.

Achtung: bitte Hinweise zur Aktualitšt der Daten beachten! Copyright