Friedrich-Alexander-Universität UnivisSuche FAU-Logo
Techn. Fakultńt Willkommen am Department Informatik FAU-Logo
Logo I4
Lehrstuhl für Informatik 4
Betriebssysteme
 
  Vorlesung
    - UnivIS-Infos
    - Inhalt
    - Folien
    - Videos
 
  Übungen
    - UnivIS-Infos
    - Inhalt
    - Module
    - Mailingliste
    - Ergänzendes Material
    - Terminübersicht
    - Aufgaben
       * Umgebung
       * Typische Fehler
       * Aufgabe 1
          Dokumentation
       * Aufgabe 2
          Dokumentation
       * Aufgabe 3
          Dokumentation
       * Aufgabe 4
          Dokumentation
       * Aufgabe 5
          Dokumentation
       * Aufgabe 6
          Dokumentation
       * Aufgabe 7
          Dokumentation
 
  Evaluation
Department Informatik  >  Informatik 4  >  Lehre  >  WS 2011/12  >  Betriebssysteme  >  Übungen  >  Aufgaben  >  Aufgabe 1

Informationen zur PC-Tastatur

Zeichen- und Tastaturcodes

F├╝r die Tastaturabfrage sind mehrere verschiedene Codes von Bedeutung:

ASCII Code

Der "American Standard Code for Information Interchange" ist eine in der Computerwelt sehr weit verbreitete Zuordnungstabelle f├╝r die Darstellung von Buchstaben, Ziffern und Sonderzeichen. Urspr├╝nglich waren pro Zeichen 7 Bits vorgesehen, mittlerweile haben sich 8 Bits, also ein Byte durchgesetzt. Die folgende Tabelle zeigt einen kleinen Ausschnitt aus der ASCII-Tabelle:

ZeichenASCII-Code
(40
048
149
250
A65
B66
a97

Zeichen und Zeichenketten werden ├╝blicherweise im ASCII Code abgespeichert.

Scancode

Mit dem Scancode werden den Tasten der PC Tastatur eindeutige Nummern zugeordnet. Damit ist es auch m├Âglich, Tasten, wie die Cursortasten, denen kein druckbares Zeichen entspricht, zu identifizieren. Bei Scancodes wird nicht zwischen Gro├č- und Kleinbuchstaben unterschieden, da beide mit derselben Taste erreicht werden.

Taste
A30
S31
D32
Cursor hoch72
Cursor runter80

Im Laufe der PC Entwicklungsgeschichte wurden unterschiedliche Tastaturen mit einer unterschiedlichen Anzahl und Bedeutung von Tasten herausgebracht. Gerade bei den Funktions- und Spezialtasten gibt es daher auch unterschiedliche Scancodes. Da PC Tastaturen nur wenig mehr als 100 Tasten besitzen, gen├╝gen 7 Bits, um den Scancode darzustellen.

Make- und Breakcodes

Programme m├╝ssen nicht nur feststellen k├Ânnen, welche der "normalen" Tasten gedr├╝ckt wurden, sondern auch, ob gleichzeitig die Shift (Umschalt)-Taste, die Control (Steuerungs)-Taste oder die ALT-Taste festgehalten wurden. Daher sendet die Tastatur statt eines einfachen Scancodes einen oder mehrere sogenannte Makecodes f├╝r jedes Dr├╝cken und einen oder mehrere Breakcodes f├╝r jedes Loslassen einer Taste. Wenn eine Taste l├Ąnger als eine bestimmte Zeitspanne festgehalten wird, werden dar├╝berhinaus zus├Ątzliche Makecodes gesendet, durch die die Wiederholungsfunktion realisiert wird. Bei den meisten Tasten entspricht der Makecode dem Scancode und der Breakcode dem Scancode mit gesetztem 7. Bit. Einige Tasten erzeugen jedoch aus historischen Gr├╝nden schon beim einmaligen Dr├╝cken und Loslassen mehrere Make- und Breakcodes. Der Tastaturtreiber (in der 3. Aufgabe des ├ťbungssystems Keyboard::prologue()) muss aus den Make- und Breakcodes der gedr├╝ckten Tasten die gew├╝nschten Zeichen ermitteln.

Anmerkung: Da die Interpretation der Make- und Breakcodes ziemlich m├╝hsam, langweilig und wenig lehrreich ist, haben wir euch die Dekodierung abgenommen. Es kann allerdings sein, dass diese Funktion bei eurer Tastatur nicht alle Zeichen, insbesondere die deutschen Umlaute korrekt erkennt. In diesem Fall m├╝sst ihr entweder mit ein paar falschen Zeichen leben oder die Tabellen der Dekodierfunktion entsprechend anpassen.

Ablauf beim Dr├╝cken einer Taste

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 zum Motherboard des PCs gesendet.

keyboard.gif

Auf dem Motherboard des PCs befindet sich ein Tastaturcontroller, der auf der einen Seite mit der Tastatur ├╝ber einen Eingabeport und einen Ausgabeport (Kommandos an die Tastatur) kommuniziert. Auf der anderen Seite hat der Controller Register, die mit Hilfe von in- und out-Befehlen ├╝ber den Systembus gelesen und beschrieben werden k├Ânnen.

Portlesen(R), schreiben(W)RegisterBedeutung
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?)

Immer wenn ein Byte vom Tastaturcontroller in seinen Ausgabepuffer geschrieben wird, signalisiert er das durch Setzen einer Interruptanforderung. Der Prozessor muss darauf reagieren, indem er das angekommene Byte aus dem Ausgabepuffer ausliest. Im Statusregister wird dann vermerkt, da├č der Ausgabepuffer wieder leer ist. Erst jetzt k├Ânnen neue Zeichen von der Tastatur entgegengenommen werden. Wenn die Tastatur im Pollingbetrieb benutzt wird, kann durch Bit 0 ├╝berpr├╝ft werden, ob tats├Ąich ein Zeichen sich im Ausgabepuffer des Tastaturcontrollers befinden. In die Gegenrichtung muss immer gewartet werden, bis der Eingabepuffer des Tastaturcontrollers leer ist (Bit 1 gel├Âscht), bevor ein neues Zeichen geschrieben wird.

Bei PS/2 PCs ist die Maus ebenfalls an den Tastaturcontroller angeschlossen. Dadurch landen im Ausgabepuffer sowohl Codes von der Tastatur als auch von der Maus. Damit die Quelle des Bytes unterschieden werden, 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 Schicken von Befehlscodes an den Eingabepuffer konfiguriert werden. Zuvor sollte man sicherstellen, das der Eingabepuffer des Tastaturcontrollers leer ist (inpb). Danach wird der Befehlscode (siehe Tabelle) an den Datenport geschrieben. Danach sollte man warten, bis der Tastaturcontroller geantwortet hat und der Ausgabepuffer das Best├Ątigungsbyte 0xfa (ACK) enth├Ąt (wieder vor dem Lesen outb pr├╝fen). Wir werden von den etwa 20 Befehlen, die der Tastaturcontroller versteht, nur zwei verwenden:

BefehlscodeNameBeschreibung
0xedset_ledEin-/Ausschalten der Tastatur-LEDs. Nach dem Befehlscode muss ein weiteres Byte an den Tastaturcontroller geschrieben werden, das den Zustand der LEDs steuert. Der Aufbau ist in einer eigenen Tabelle beschrieben.
0xf3set_speedWiederholungsrate und Verz├Âgerung setzen durch ein zweites Byte, dass nach dem Befehlsbyte folgt. Der Aufbau ist in einer eigenen Tabelle beschrieben.

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

MSB LSB
Always 0 Always 0 Always 0 Always 0 Always 0 Caps Lock Num Lock Scroll Lock

Der Aufbau des Konfigurationsbyte von set_speed ist in diesen zwei Tabellen beschrieben. Die Wiederholungsrate wird durch die Bits 0-4 spezifiziert, die Verz├Âgerung durch Bit 5 und 6.

Bits 0-4 (hex)Wiederholungsrate (Zeichen pro Sekunde)
0x0030
0x0225
0x0420
0x0815
0x0c10
0x107
0x145

Bits 5 und 6 (hex)Verz├Âgerung (in Sekunden)
0x000.25
0x010.5
0x020.75
0x031.0

Weiterf├╝hrende Informationen und Referenzen

  Impressum   Datenschutz Stand: 2011-11-02 13:57   BO, DL