Ein Scancode ist in der Computertechnik eine Nummer, die von der Tastatur eines Rechners an diesen gesendet wird, wenn eine Taste gedrückt oder losgelassen wird. Der Begriff wird vor allem im PC-Bereich verwendet.
Inhaltsverzeichnis |
Im Jahr 1981 hat IBM zusammen mit dem ersten IBM PC eine Tastatur mit 83 Tasten eingeführt. Da diese auch beim 1983 erschienenen IBM PC/XT und dessen diversen Klonen unverändert beibehalten wurde, ist sie heute als XT-Tastatur bekannt.
Frühere Computertastaturen sendeten oft direkt ASCII-Codes oder Codes einer anderen Zeichensatznorm an den Rechner. Um aber beim für den Vertrieb in vielen Ländern geplanten IBM PC nicht in jeder länderspezifischen Tastaturvariante andere Codes generieren zu müssen, wurde jeder Taste eine Nummer zugeordnet, der sog. Scancode. Dem Scancode wurde dann erst im Rechner vom Tastaturtreiber ein ASCII-Code zugeordnet. Für den Scancode wurden die Tasten einfach nach ihrer Lage auf der Tastatur reihenweise von Links nach Rechts durchnummeriert, im Gegensatz zum ASCII-Code, der der alphabetischen Anordnung folgt.
Ein Standard-Tastaturtreiber für die US-amerikanische Belegung war bei jedem PC im BIOS integriert, länderspezifische Zuordnungen erledigte ein Software-Tastaturtreiber, der als TSR-Programm beim Systemstart nachgeladen wurde.
Bei der XT-Tastatur gab es links einen Block von 10 Funktionstasten und rechts die alphanumerischen Tasten mit angegliedertem Zahlenblock. LEDs zur Signalisierung der aktuellen Zustände und einen separaten Cursorblock gab es noch nicht. Die Kommunikation geschah ausschließlich von der Tastatur zum PC, der PC konnte seinerseits also noch keine Befehle an die Tastatur schicken. Der prinzipielle Aufbau der seriellen Schnittstelle ist unter PS/2-Schnittstelle beschrieben; der typische Steckverbinder für PC- und AT-Tastaturen war allerdings über lange Jahre ein 5poliger DIN-Verbinder, den man in Deutschland als Stecker für NF-Signale kannte ("Überspielkabel").
Die logische Weiterentwicklung war die 1984 mit dem IBM PC/AT eingeführte AT-Tastatur mit 84 Tasten (abgesetzten Funktionstasten und 10er Block). Hier wurde die physikalische Schnittstelle beibehalten, jedoch wurde die Signalisierung komplett neu gestaltet. Die Kommunikation zwischen Rechner und Tastatur war nun bidirektional, erkennbar beispielsweise daran, dass der Rechner die Status-LEDs programmgesteuert schalten konnte. Die übertragenen Codes waren völlig andere als beim XT. Ein kleiner Ein-Chip-Rechner (Intel 8042), etwas missverständlich "keyboard BIOS" genannt, setzte die tatsächlich übertragenen Codes auf kompatible Werte um. Für die Software sah eine AT-Tastatur (mit ihrem vorgeschalteten "keyboard BIOS") einer XT-Tastatur sehr ähnlich; so konnte die so wichtige Kompatibilität der Rechner erhalten bleiben. Die Umsetzung der Codes war abschaltbar, und IBM rechnete wohl damit, dass sie normalerweise abgeschaltet sein würde, sobald ein moderneres Betriebssystem verfügbar wurde; in der Praxis wurde aber weiterhin fast überall MS-DOS bzw. PC-DOS verwendet und die Umsetzung war praktisch immer eingeschaltet.
Der Umbau eines XT auf AT erforderte meist den Austausch der Tastatur; es gab aber auch Tastaturen, die einen Umschalter auf der Unterseite hatten oder sich automatisch passend umschalten konnten.
Der nächste Generationswechsel vollzog sich 1986, als IBM die 101 Tasten große MF2-Tastatur (multi-functional) für den US-Markt herausbrachte. Analog wurde die länderspezifische 102 Tasten große MF2-Tastatur definiert. Letztlich basieren auf diesen beiden Tastaturbelegungen alle heute üblichen Erweiterungen, wie beispielsweise die 104/105-Tasten-Windows-Tastatur.
Die MF2-Tastatur verwendete die gleiche Schnittstelle und Signalisierung wie die vorherige PC/AT-Tastatur. Ab 1987 wurde der Stecker für die IBM PS/2 Computer durch eine kleinere Variante ersetzt, die elektrischen Signale blieben aber die gleichen.
Die Anordnung der Tasten wurde dahingehend geändert, dass nun die Funktionstasten, deren Anzahl zugleich um zwei erhöht wurde, oberhalb der alphanumerischen Tasten liegen. Der Zehnerblock und spezielle Tasten zur Cursorbewegung wurden optisch getrennt.
Grundsätzlich wird beim Drücken einer Taste der entsprechende Scancode der Taste gesendet. Bei längeren Drücken wird der gleiche Scancode wiederholt gesendet und beim Loslassen wird ein sog. Break-Code $F0 dem Scancode vorangesetzt.
Das "keyboard BIOS" setzt diese Werte allerdings weiterhin um. Nach dieser Umsetzung ist in der Regel ist beim make code das oberste Bit = 0, beim break code aber 1.
Beispiel: Die Leertaste hat nach der Umsetzung den make code $39 und den break code $B9.
Um mit einer MF2-Tastatur kompatibel zur XT-Tastatur zu sein, bekamen die Tasten des neuen Cursorblocks (nach der Umsetzung) den gleichen Code mit einen speziellen Code $E0 oder $E1 zur Unterscheidung davorgesetzt. Alte Software ignorierte gewöhnlich den ihr unbekannten Code $E0 bzw. $E1 und verarbeitete nur den folgenden Code, der der gleiche war wie bei der jeweils entsprechenden Taste des alten kombinierten Ziffern/Cursorblocks. Neue Software konnte dagegen den Code $E0 bzw. $E1 bei Bedarf erkennen und wusste dann, dass eine Taste des neuen Cursorblocks und nicht eine des kombinierten Ziffern/Cursorblocks gedrückt worden war.
Die amerikanische MF2-Tastatur hat 101 Tasten; die länderspezifische 102 Tasten. Die zusätzliche Taste trägt auf deutschen Tastaturen die drei Zeichen "<", ">" und "|", die linke Umschalttaste ist dafür verkleinert.
Die Codetabelle der PC-Tastatur ist ein ziemliches Durcheinander. Innerhalb der MFM-Tastatur selbst existieren drei Tabellen mit Scancodes, welche durch das Senden von Befehlscodes an die Tastatur ausgewählt werden können.
Zusätzlich kann die Umwandlung von Tastaturcodes durch das im Rechnergehäuse befindliche "Keyboard BIOS" ein- und ausgeschaltet werden (heutiger Standard: eingeschaltet); damit ergeben sich aus Sicht der Firmware und Software, die die Codes letztlich empfangen, insgesamt sechs mögliche Codevarianten.
Tastaturen anderer Hersteller als IBM haben teilweise die Scan Code Sets 1 und 3 nicht oder fehlerhaft umgesetzt. Ebenso funktioniert die Abschaltung der Scancodeumwandlung auf manchen Mainboards nicht korrekt. Auch die existierenden PC-Emulatoren implementieren diese Varianten nicht. Daher verwenden alle heutigen PC-Betriebssysteme ausschließlich das Scan Code Set 2 mit eingeschalteter Umwandlung. Der Controller im Keyboard überträgt die Codes zum Controller im PC mit Scancode Set 2 und der setzt sie um auf Scancode Set 1.
USB-Tastaturen verwenden einen neuen Satz von Scancodes ohne Beziehung zu den verschiedenen älteren Systemen; die entsprechenden Treiber neuer Betriebssysteme können diese Codes verarbeiten. Für die Verwendung mit Urladern und älteren Betriebssystemen werden deren Scancodes vom BIOS des Rechners softwaremäßig auf die alten Scancodes abgebildet. Dabei wird ebenfalls nur das Scan Code Set 2 mit eingeschalteter Umwandlung emuliert. Manche BIOSe führen diese Umwandlung unvollständig durch, so wird z.B. teilweise die AltGr-Taste nicht von der Alt-Taste unterschieden, was für deutsche Tastaturen problematisch ist.
Die Scancodes für USB-Tastaturen sind architekturübergreifend einheitlich. USB-Tastaturen für die Apple Macintosh-Serie verwenden also die gleichen Scancodes wie PC-USB-Tastaturen.