Tabella dei codici di scansione della tastiera


La tastiera è un dispositivo hardware che permette all'utente di impartire comandi, scrivere in un editor di testo e, in generale, inviare input al computer sotto forma di stringhe di caratteri.
La parte più consistente della tastiera è rappresentata dall'insieme dei suoi tasti; ogni tasto è assimilabile ad un interruttore attraverso il quale si può chiudere o aprire un circuito elettrico, per informare la logica di controllo che l'utente ha premuto o rilasciato quel tasto stesso. Il metodo più efficiente per gestire questa situazione consiste nel collegare i tasti secondo uno schema a matrice; la Figura 1 illustra un esempio semplificato di matrice da 3 x 3 tasti. Possiamo notare che i tasti sono connessi da linee di riga e linee di colonna; ogni tasto quindi è individuato univocamente da una coppia [riga, colonna].
Il controller della tastiera (keyboard controller) applica a rotazione una tensione elettrica alle tre linee di colonna; la sequenza è quindi: 0, 1, 2, 0, 1, 2, 0, 1, 2, etc, in rapidissima successione. Supponiamo ora che l'utente prema, ad esempio, il tasto T8 che si trova all'incrocio tra la riga 2 e la colonna 1; non appena il controller applica una tensione elettrica alla colonna 1, il circuito si chiude attraverso il tasto T8 e la corrente può fluire e raggiungere il controller stesso dalla linea di riga 2. In questo modo, il controller sa che l'utente ha premuto il tasto T8; analoghe considerazioni nel caso in cui lo stesso tasto T8 venga rilasciato (apertura del circuito).
Ovviamente, nella realtà, il circuito di Figura 1 è notevolmente più complesso; ciò è dovuto alla necessità di gestire, ad esempio, la pressione prolungata di un tasto, la pressione di più tasti contemporaneamente, le situazioni anomale che si possono presentare con certe sequenze di tasti, etc.

Ogni volta che si preme o si rilascia un tasto, il controller della tastiera genera un codice che prende il nome di scan code (codice di scansione); lo scan code di un tasto premuto prende il nome di make code, mentre quello di un tasto rilasciato prende il nome di break code.
Lo scan code appena generato, viene poi inviato ad un secondo controller montato sul computer, per essere reso disponibile al software di gestione della tastiera; a tale proposito, il metodo più utilizzato è quello delle IRQ. Ogni volta che riceve un nuovo scan code, il secondo controller invia una IRQ alla linea 1 del PIC Master; si tratta quindi di una IRQ1 alla quale la CPU associa una istruzione INT 09h. La relativa ISR può prelevare lo scan code dalla porta 60h (output buffer) del secondo controller per effettuare tutte le necessarie elaborazioni; l'elaborazione più importante consiste nell'associare lo scan code stesso al codice ASCII del simbolo stampato sul tasto (per i caratteri stampabili), rendendo così possibile la cosiddetta "internazionalizzazione delle tastiere". In sostanza, una stessa tastiera può essere venduta in una qualsiasi nazione in quanto, dal punto di vista hardware, gli scan codes generati dai vari tasti sono del tutto indipendenti dalla nazionalità; ciò che cambia, da una nazione all'altra, sono solamente i simboli stampati sui tasti.
Su alcuni tasti risultano stampati due o anche tre simboli; il primo simbolo è quello relativo alla semplice pressione del tasto, il secondo simbolo viene ottenuto premendo in combinazione [Shift-L] con il tasto, mentre il terzo simbolo viene ottenuto premendo in combinazione [Alt-R] con il tasto. In casi del genere, il controller della tastiera genera semplicemente la sequenza degli scan codes dei singoli tasti; è compito del software di gestione della tastiera elaborare correttamente tali sequenze.

L'insieme di tutti gli scan codes di una tastiera forma il cosiddetto scan code set; risultano disponibili i seguenti tre set di scan codes: Bisogna precisare che certe tastiere XT possono anche generare codici di scansione non standard, non appartenenti cioè ad alcuno dei tre set; in tal caso, il compito di convertire questi codici nel Set 1 viene delegato al secondo controller montato sul computer.

Codici di scansione del Set 1

Nel caso del Set 1, buona parte dei tasti (detti normal keys) generano uno scan code da 1 byte, con i 7 bit meno significativi che rappresentano il codice vero e proprio; il make code ha il bit più significativo che vale 0, mentre il break code ha il bit più significativo che vale 1. Ad esempio, nel caso del tasto [A], i 7 bit meno significativi valgono 0011110b e si ha: Alcuni tasti (detti extended keys) generano uno scan code da 2 byte, con il primo byte che vale sempre E0h; per il secondo byte valgono le considerazioni esposte in precedenza per i normal keys. Ad esempio, nel caso del tasto [Ctrl] destro ([Ctrl-R]), i 7 bit meno significativi del secondo byte valgono 0011101b e si ha: Nel Set 1 esistono anche due casi particolari rappresentati dai tasti [Print] e [Pause]; il tasto [Print] ha make code E0h 2Ah E0h 37h e break code E0h B7h E0h AAh, mentre il tasto [Pause] ha make code E1h 1Dh 45h E1h 9Dh C5h e nessun break code.
Si tenga presente che, con il metodo delle IRQ, uno scan code da n byte produce una sequenza di n IRQ1.

La tabella seguente mostra i codici di scansione del Set 1; il simbolo KP indica il tastierino numerico (numeric keypad).

Codici di scansione del Set 1
TastoMakeBreakTastoMakeBreak
Esc01h81hX2DhADh
102h82hC2EhAEh
203h83hV2FhAFh
304h84hB30hB0h
405h85hN31hB1h
506h86hM32hB2h
607h87h,33hB3h
708h88h.34hB4h
809h89h-35hB5h
90Ah8AhShift-R36hB6h
00Bh8BhKP *37hB7h
'0Ch8ChAlt-L38hB8h
ì0Dh8DhSpace39hB9h
Bksp0Eh8EhCaps3AhBAh
Tab0Fh8FhF13BhBBh
Q10h90hF23ChBCh
W11h91hF33DhBDh
E12h92hF43EhBEh
R13h93hF53FhBFh
T14h94hF640hC0h
Y15h95hF741hC1h
U16h96hF842hC2h
I17h97hF943hC3h
O18h98hF1044hC4h
P19h99hNum45hC5h
è1Ah9AhScroll46hC6h
+1Bh9BhKP 747hC7h
Enter1Ch9ChKP 848hC8h
Ctrl-L1Dh9DhKP 949hC9h
A1Eh9EhKP -4AhCAh
S1Fh9FhKP 44BhCBh
D20hA0hKP 54ChCCh
F21hA1hKP 64DhCDh
G22hA2hKP +4EhCEh
H23hA3hKP 14FhCFh
J24hA4hKP 250hD0h
K25hA5hKP 351hD1h
L26hA6hKP 052hD2h
ò27hA7hKP .53hD3h
à28hA8h 
\29hA9h 
Shift-L2AhAAh<56hD6h
ù2BhABhF1157hD7h
Z2ChAChF1258hD8h
TastoMakeBreakTastoMakeBreak
KP EnterE0h 1ChE0h 9ChRightE0h 4DhE0h CDh
KP /E0h 35hE0h B5hEndE0h 4FhE0h CFh
Alt-RE0h 38hE0h B8hDownE0h 50hE0h D0h
HomeE0h 47hE0h C7hPgDownE0h 51hE0h D1h
UpE0h 48hE0h C8hInsE0h 52hE0h D2h
PgUpE0h 49hE0h C9hDelE0h 53hE0h D3h
LeftE0h 4BhE0h CBh
TastoMakeBreakTastoMakeBreak
PrintE0h 2Ah
E0h 37h
E0h B7h
E0h AAh
PauseE1h 1Dh 45h
E1h 9Dh C5h
---

Codici di scansione del Set 2

Nel Set 2, buona parte dei tasti (normal keys) ha un make code formato da un solo byte; per tali tasti, il break code è formato da un byte di valore F0h seguito da un secondo byte che coincide con il make code stesso. Ad esempio, nel caso del tasto [A] si ha: Gli extended keys hanno un make code formato da 2 byte, dove il primo byte vale sempre E0h; per tali tasti, il break code è formato da 3 byte, dove i primi 2 byte valgono E0h F0h e il terzo byte coincide con il secondo byte del make code. Ad esempio, nel caso del tasto [Alt+R] si ha: Anche nel Set 2 esistono i due casi particolari rappresentati dai tasti [Print] e [Pause]; per il tasto [Print] il make code è E0h 12h E0h 7Ch e il break code è E0h F0h 7Ch E0h F0h 12h, mentre per il tasto [Pause] il make code è E1h 14h 77h E1h F0h 14h F0h 77h e il break code non è previsto.

La tabella seguente mostra i codici di scansione del Set 2.

Codici di scansione del Set 2
TastoMakeBreakTastoMakeBreak
Esc76hF0h 76hX22hF0h 22h
116hF0h 16hC21hF0h 21h
21EhF0h 1EhV2AhF0h 2Ah
326hF0h 26hB32hF0h 32h
425hF0h 25hN31hF0h 31h
52EhF0h 2EhM3AhF0h 3Ah
636hF0h 36h,41hF0h 41h
73DhF0h 3Dh.49hF0h 49h
83EhF0h 3Eh-4AhF0h 4Ah
946hF0h 46hShift-R59hF0h 59h
045hF0h 45hKP *7ChF0h 7Ch
'4EhF0h 4EhAlt-L11hF0h 11h
ì55hF0h 55hSpace29hF0h 29h
Bksp66hF0h 66hCaps58hF0h 58h
Tab0DhF0h 0DhF105hF0h 05h
Q15hF0h 15hF206hF0h 06h
W1DhF0h 1DhF304hF0h 04h
E24hF0h 24hF40ChF0h 0Ch
R2DhF0h 2DhF503hF0h 03h
T2ChF0h 2ChF60BhF0h 0Bh
Y35hF0h 35hF783hF0h 83h
U3ChF0h 3ChF80AhF0h 0Ah
I43hF0h 43hF901hF0h 01h
O44hF0h 44hF1009hF0h 09h
P4DhF0h 4DhNum77hF0h 77h
è54hF0h 54hScroll7EhF0h 7Eh
+5BhF0h 5BhKP 76ChF0h 6Ch
Enter5AhF0h 5AhKP 875hF0h 75h
Ctrl-L14hF0h 14hKP 97DhF0h 7Dh
A1ChF0h 1ChKP -7BhF0h 7Bh
S1BhF0h 1BhKP 46BhF0h 6Bh
D23hF0h 23hKP 573hF0h 73h
F2BhF0h 2BhKP 674hF0h 74h
G34hF0h 34hKP +79hF0h 79h
H33hF0h 33hKP 169hF0h 69h
J3BhF0h 3BhKP 272hF0h 72h
K42hF0h 42hKP 37AhF0h 7Ah
L4BhF0h 4BhKP 070hF0h 70h
ò1EhF0h 1EhKP .71hF0h 71h
à26hF0h 26h 
\5DhF0h 5Dh 
Shift-L12hF0h 12h<56hF0h 56h
ù0EhF0h 0EhF1178hF0h 78h
Z1AhF0h 1AhF1207hF0h 07h
TastoMakeBreakTastoMakeBreak
KP EnterE0h 5AhE0h F0h 5AhRightE0h 74hE0h F0h 74h
KP /E0h 4AhE0h F0h 4AhEndE0h 69hE0h F0h 69h
Alt-RE0h 11hE0h F0h 11hDownE0h 72hE0h F0h 72h
HomeE0h 6ChE0h F0h 6ChPgDownE0h 7AhE0h F0h 7Ah
UpE0h 75hE0h F0h 75hInsE0h 70hE0h F0h 70h
PgUpE0h 7DhE0h F0h 7DhDelE0h 71hE0h F0h 71h
LeftE0h 6BhE0h F0h 6Bh
TastoMakeBreakTastoMakeBreak
PrintE0h 12h
E0h 7Ch
E0h F0h 7Ch
E0h F0h 12h
PauseE1h 14h 77h E1h
F0h 14h F0h 77h
---


Il Set 2 comprende anche ulteriori scan codes per le tastiere dotate di tasti per il risparmio energetico (via ACPI), tasti multimediali e tasti per Windows.

Codici di scansione del Set 2 - Tasti per il risparmio energetico
TastoMakeBreak
PowerE0h 37hE0h F0h 37h
SleepE0h 3FhE0h F0h 3Fh
WakeE0h 5EhE0h F0h 5Eh


Codici di scansione del Set 2 - Tasti multimediali
TastoMakeBreak
Next TrackE0h 4DhE0h F0h 4Dh
Previous TrackE0h 15hE0h F0h 15h
StopE0h 3BhE0h F0h 3Bh
Play/PauseE0h 34hE0h F0h 34h
MuteE0h 23hE0h F0h 23h
Volume UpE0h 32hE0h F0h 32h
Volume DownE0h 21hE0h F0h 21h
Media SelectE0h 50hE0h F0h 50h
E-MailE0h 48hE0h F0h 48h
CalculatorE0h 2BhE0h F0h 2Bh
My ComputerE0h 40hE0h F0h 40h
WWW SearchE0h 10hE0h F0h 10h
WWW HomeE0h 3AhE0h F0h 3Ah
WWW BackE0h 38hE0h F0h 38h
WWW ForwardE0h 30hE0h F0h 30h
WWW StopE0h 28hE0h F0h 28h
WWW RefreshE0h 20hE0h F0h 20h
WWW FavoritesE0h 18hE0h F0h 18h


Codici di scansione del Set 2 - Tasti per Windows
TastoMakeBreak
Win-LE0h 1FhE0h F0h 1Fh
Win-RE0h 27hE0h F0h 27h
Win MenuE0h 2FhE0h F0h 2Fh

Codici di scansione del Set 3

Lo scopo fondamentale del Set 3 è quello di semplificare il Set 2 eliminando gli scan codes formati da 3 o più byte; nel Set 3, il make code di un qualunque tasto è formato da un solo byte, mentre il break code è formato da F0h seguito dallo stesso make code.

Codici di scansione del Set 3
TastoMakeBreakTastoMakeBreak
Esc08hF0h 08hX22hF0h 22h
116hF0h 16hC21hF0h 21h
21EhF0h 1EhV2AhF0h 2Ah
326hF0h 26hB32hF0h 32h
425hF0h 25hN31hF0h 31h
52EhF0h 2EhM3AhF0h 3Ah
636hF0h 36h,41hF0h 41h
73DhF0h 3Dh.49hF0h 49h
83EhF0h 3Eh-4AhF0h 4Ah
946hF0h 46hShift-R59hF0h 59h
045hF0h 45hKP *7EhF0h 7Eh
'4EhF0h 4EhAlt-L19hF0h 19h
ì55hF0h 55hSpace29hF0h 29h
Bksp66hF0h 66hCaps14hF0h 14h
Tab0DhF0h 0DhF107hF0h 07h
Q15hF0h 15hF20FhF0h 0Fh
W1DhF0h 1DhF317hF0h 17h
E24hF0h 24hF41FhF0h 1Fh
R2DhF0h 2DhF527hF0h 27h
T2ChF0h 2ChF62FhF0h 2Fh
Y35hF0h 35hF737hF0h 37h
U3ChF0h 3ChF83FhF0h 3Fh
I43hF0h 43hF947hF0h 47h
O44hF0h 44hF104FhF0h 4Fh
P4DhF0h 4DhNum76hF0h 76h
è54hF0h 54hScroll5FhF0h 5Fh
+5BhF0h 5BhKP 76ChF0h 6Ch
Enter5AhF0h 5AhKP 875hF0h 75h
Ctrl-L11hF0h 11hKP 97DhF0h 7Dh
A1ChF0h 1ChKP -4EhF0h 4Eh
S1BhF0h 1BhKP 46BhF0h 6Bh
D23hF0h 23hKP 573hF0h 73h
F2BhF0h 2BhKP 674hF0h 74h
G34hF0h 34hKP +7ChF0h 7Ch
H33hF0h 33hKP 169hF0h 69h
J3BhF0h 3BhKP 272hF0h 72h
K42hF0h 42hKP 37AhF0h 7Ah
L4BhF0h 4BhKP 070hF0h 70h
ò1EhF0h 1EhKP .71hF0h 71h
à26hF0h 26h 
\5ChF0h 5Ch 
Shift-L12hF0h 12h<56hF0h 56h
ù0EhF0h 0EhF1156hF0h 56h
Z1AhF0h 1AhF125EhF0h 5Eh
KP Enter79hF0h 79hRight6AhF0h 6Ah
KP /4AhF0h 4AhEnd65hF0h 65h
Alt-R39hF0h 39hDown60hF0h 60h
Home6EhF0h 6EhPgDown6DhF0h 6Dh
Up63hF0h 63hIns67hF0h 67h
PgUp6FhF0h 6FhDel64hF0h 64h
Left61hF0h 61h
Print57hF0h 57hPause62hF0h 62h


Codici di scansione del Set 3 - Tasti per Windows
TastoMakeBreak
Win-L8BhF0h 8Bh
Win-R8ChF0h 8Ch
Win Menu8DhF0h 8Dh