Skip to main content.

Navigation:

Informationen Tastaturkontroller

Tastaturkontroller

Wenn bei einer PC-Tastatur eine Taste gedrückt wird, werden zwei sich kreuzende Leitungen der Scan-Matrix innerhalb der Tastatur verbunden. Der Tastaturprozessor (8042 für PC/XT-, 8048 für AT und MF II-Tastaturen) ermittelt die Position der gedrückten Taste und daraus den Scancode. Über eine serielle Schnittstelle wird der Code dann zum Motherboard des PCs gesendet. Auf dem Motherboard des PCs befindet sich ein Tastaturcontroller, der einerseits über einen Eingabe- und einen Ausgabeport mit der Tastatur kommuniziert (Tastaturkommandos). Andererseits verwendet der Kontroller Register, die mit Hilfe von in und out-Befehlen über den Systembus gelesen und beschrieben werden können.

PortR / WRegisterBedeutung
0x60RAusgabepufferMake/Breakcode von der Tastatur
0x60WEingabepufferBefehle für die Tastatur (z.B. LEDs setzen)
0x64WSteuerregisterBefehle für den Tastaturcontroller
0x64RStatusregisterZustand des Tastaturcontrollers (z.B. Ausgabepuffer voll?)

Das Schreiben eines Bytes vom Tastaturontroller in seinen Ausgabepuffer wird immer durch das Setzen einer Interruptanforderung signalisiert. Auf diese Anforderung reagiert der Prozessor, indem er das ankommende Byte aus dem Ausgabepuffer ausliest und im Statusregister vermerkt, dass der Ausgabepuffer wieder leer ist. Erst jetzt können neue Zeichen von der Tastatur entgegengenommen werden. Wird die Tastatur im Pollingbetrieb benutzt, kann durch Bit 0 überprüft werden, ob sich auch tatsächlich ein Zeichen im Ausgabepuffer des Tastaturcontrollers befinden. Soll ein Byte an den Kontroller geschickt werden (z.B. Tastaturkommando), muss immer gewartet werden, bis der Eingabepuffer des Kontrollers leer ist (Bit 1 gelöscht), bevor der Buffer erneut beschrieben werden kann.

Beachtet werden sollte, dass bei PS/2 PCs die Maus ebenfalls an den Tastaturkontroller angeschlossen ist. Dadurch landen sowohl die Codes der Tastatur als auch die der Maus im Ausgabepuffer. Damit die Quelle der Codes unterschieden werden kann, steht im Statusregister das Bit 5 (AUXB) zur Verfügung (1 = Maus, 0 = Tastatur).

BitMaskeNameBedeutung
00x01outbGesetzt, wenn ein Zeichen im Ausgabepuffer des Tastaturcontrollers zum Lesen bereit steht
10x02inpbGesetzt, solange der Tastaturcontroller ein von der CPU geschriebenes Zeichen noch nicht abgeholt hat
50x20auxbGesetzt, wenn der Wert im Ausgabepuffer von der Maus und nicht von der Tastatur stammt

Tastaturcontroller programmieren

Der Tastaturcontroller kann durch das Senden von Befehlscodes an den Eingabepuffer konfiguriert werden. Zuvor sollte man jedoch sicherstellen, das der Eingabepuffer des Tastaturcontrollers leer ist (inpb). Danach wird der Befehlscode (siehe Tabelle) in den Datenport geschrieben. Danach sollte man warten, bis der Tastaturcontroller geantwortet hat und der Ausgabepuffer das Bestätigungsbyte 0xfa (ACK) enthält (wieder vor dem Lesen outb prüfen). Wir werden von den etwa 20 Befehlen, die der Tastaturcontroller versteht, nur zwei verwenden:

BefehlSteuercode
set_led0xed

Die folgende Tabelle zeigt den Aufbau des Steuerbytes von set_led zum Ansteuern der Tastatur-LEDs. MSB bedeutet hierbei most significant bit (entspricht also 0x80 in Hexadezimal-Darstellung) und LSB least significant bit (also 0x01).

MSBLSB
Always 0Always 0Always 0Always 0Always 0Caps LockNum LockScroll Lock

Weiterführende Informationen und Referenzen