BIOS-Interrupt 16h
Die Funktionen den Interruptes 16h (Tastatur-Routinen) stellt die
folgende Tabelle dar:
| Funktion |
Bedeutung |
Eingabe |
Ausgabe |
BIOS - Implementierung |
Anmerkungen |
| 00h |
Zeichen lesen |
AH=00h |
AL=0: AH=erweiterter Tastaturcode
AL > 0: AL=ASCII - Code, AH=Scan - Code |
PC, XT, AT, PS/2 |
Liest ein Zeichen von der Tastatur. Ist kein Zeichen vorhanden, wird gewartet, bis
dies der Fall ist. |
| 01h |
Zeichen vorhanden |
AH=01h |
ZF=1: kein Zeichen vorhanden;
sonst:
AL=0: AH=erweiterter Tastaturcode
AL > 0: AL=ASCII - Code, AH=Scan - Code |
PC, XT, AT, PS/2 |
Überprüft, ob ein Zeichen von der Tastatur gelesen werden kann, Das
gelesene Zeichen wird nich aus dem Tastaturpuffer entfernt. |
| 02h |
Status abfragen |
AH=02h |
AL=Tastenstatus |
PC, XT, AT, PS/2 |
Ermittelt den Status von bestimmten Sondertasten wie Alt, Strg
etc. |
| 03h |
Automatische Zeichenwiederholung / Verzögerung setzen / abfragen |
AH=03h
AL=05h (setzen)
bzw. AL=06h (lesen)
bei AL=05h:
BH=Verzögerung
BL=Rate |
im Lesemodus (AL=06h):
BH=Verzögerung
BL=Rate |
AT, PS/2 |
Gültige Werte für Rate und Verzögerung sind unter
dieser Tabelle zu finden. |
| 05h |
Tastendruck simulieren |
AH=05h
CH=Scan - Code der Taste
CL=ASCII - Code der Taste |
AL=0: OK
AL=1: Tastaturpuffer voll |
AT, PS/2 |
Dient zur Simulierung eines Tastendruckes. Schreibt ein Zeichen direkt in den
Tastaturpuffer. |
| 10h |
Zeichen lesen (inkl. F11 und F12) |
AH=10h |
AL=0: AH=erweiterter Tastaturcode
AL > 0: AL=ASCII - Code, AH=Scan - Code |
AT, PS/2 |
Liest ein Zeichen von der Tastatur. Ist kein Zeichen vorhanden, wird gewartet, bis
dies der Fall ist. Dient insbesondere zur Abfrage von F11 und F12, die über Funktion 0h nicht
unterstützt werden. |
| 11h |
Zeichen vorhanden (inkl. F11 und F12) |
AH=11h |
ZF=1: kein Zeichen vorhanden;
sonst:
AL=0: AH=erweiterter Tastaturcode
AL > 0: AL=ASCII - Code, AH=Scan - Code |
AT, PS/2 |
Überprüft, ob ein Zeichen von der Tastatur gelesen werden kann. Das
gelesene Zeichen wird nicht aus dem Tastaturpuffer entfernt. Dient insbesondere zur Abfrage von F11
und F12, die über Funktion 0h nicht unterstützt werden. |
| 12h |
Erweiterten Tastatur-Status ermitteln |
AH=12h |
AH=erweiterter Tastatur-Status
AL=normaler Tastatur-Status wie bei Funktion 02h |
AT, PS/2 |
- |
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 $16;
mov {...}
{Register auslesen gemäß der Spalte "Ausgabe"...}
END;
Generell wird im Register AH die Funktionsnummer übergeben.
Tastaturstatus (Funktionen 02h & 12h)
| Bit |
Bedeutung |
| 0 |
rechte Shift-Taste betätigt |
| 1 |
linke Shift-Taste betätigt |
| 2 |
Strg-Taste betätigt |
| 3 |
Alt-Taste betätigt |
| 4 |
Rollen-Taste an |
| 5 |
Num-Lock an |
| 6 |
Feststelltaste an |
| 7 |
Einfügemodus an |
Gültige Verzögerungswerte und Wiederholraten (Funktion 03h)
| Wert von BH |
Verzögerung |
| 00h |
250 ms |
| 01h |
500 ms |
| 02h |
750 ms |
| 03h |
1000 ms |
| Wert von BL |
Rate in cps |
| 00h |
30 |
| 01h |
26,7 |
| 02h |
24 |
| 03h |
21,8 |
| 04h |
20 |
| 05h |
18,5 |
| 06h |
17,1 |
| 07h |
16 |
| 08h |
15 |
| 09h |
13,3 |
| 0Ah |
12 |
| 0Bh |
10,9 |
| 0Ch |
10 |
| 0Dh |
9,2 |
| 0Eh |
8,6 |
| 0Fh |
8 |
| 10h |
7,5 |
| 11h |
6,7 |
| 12h |
6 |
| 13h |
5,5 |
| 14h |
5 |
| 15h |
4,6 |
| 16h |
4,3 |
| 17h |
4 |
| 18h |
3,7 |
| 19h |
3,3 |
| 1Ah |
3 |
| 1Bh |
2,7 |
| 1Ch |
2,5 |
| 1Dh |
2,3 |
| 1Eh |
2,1 |
| 1Fh |
2 |
| 20h bis FFh |
reserviert |
Erweiterter Tastaturstatus (Funktion 12h)
| Bit |
Bedeutung |
| 0 |
SysReq-Taste gedrückt |
| 1 |
Caps-Lock gedrückt |
| 2 |
Num-Lock gedrückt |
| 3 |
Scroll-Lock gedrückt |
| 4 |
Rechte Alt-Taste gedrückt |
| 5 |
Rechte Strg-Taste gedrückt |
| 6 |
Linke Alt-Taste gedrückt |
| 7 |
Linke Strg-Taste gedrückt |
Alle Angaben ohne Gewähr.
|