Scan Codes

Tabella dei codici di scansione della tastiera

Ad ogni tasto della tastiera, viene associato un codice numerico (Scan Code) indipendente dal simbolo stampato sul tasto stesso. Lo Scan Code occupa generalmente 1 byte; il bit piu' significativo vale zero se il tasto e' stato premuto, vale uno se il tasto e' stato rilasciato (ad esempio [Esc] premuto = 00000001B = 01h, [Esc] rilasciato = 10000001B = 81h).
Alcuni tasti sulle tastiere estese producono un codice a 2 byte; questa situazione e' riconoscibile dal fatto che il primo byte vale E0h.
Ogni volta che si preme un tasto, l'hardware della tastiera genera una richiesta di interruzione hardware e la invia all'input IRQ1 del PIC master; a sua volta il PIC associa questa richiesta all'INT 09H e la invia all'input INTR della CPU. La CPU, rileva l'arrivo della richiesta di interruzione e chiama l'ISR della tastiera; l'ISR legge dalla porta hardware all'indirizzo 60h lo Scan Code del tasto premuto, lo converte nel codice corrispondente al simbolo stampato sul tasto stesso e mette questo codice a disposizione dei programmi. A seconda del tasto premuto, lo Scan Code verra' convertito o in un codice ASCII da 1 byte, o in un codice speciale da 2 byte (tasti funzione, tasti cursore, tasti di editing etc); in quest'ultimo caso il primo byte vale sempre 00h.
La tabella seguente mostra gli Scan Codes e il codice in esadecimale associato ad ogni Scan Code per il tasto base e per le combinazioni tra tasto base e i tasti [Shift], [Ctrl], [Alt]; l'ultima colonna si riferisce al tastierino numerico ([Bloc Num] attivato).

Scan
Code
BaseShiftCtrlAltBloc Num
01 XX1BH = ESC XX1BH = ESC XX1BH = ESC N/A ----
02 XX31H = 1 XX21H = ! N/A 7800H = 1 ----
03 XX32H = 2 XX40H = @ 0300H = NUL 7900H = 2 ----
04 XX33H = 3 XX23H = # N/A 7A00H = 3 ----
05 XX34H = 4 XX24H = $ N/A 7B00H = 4 ----
06 XX35H = 5 XX25H = % N/A 7C00H = 5 ----
07 XX36H = 6 XX5EH = ^ XX1EH = RS 7D00H = 6 ----
08 XX37H = 7 XX26H = & N/A 7E00H = 7 ----
09 XX38H = 8 XX2AH = * N/A 7F00H = 8 ----
10 XX39H = 9 XX28H = ( N/A 8000H = 9 ----
11 XX30H = 0 XX29H = ) N/A 8100H = 0 ----
12 XX2DH = - XX5FH = _ XX1FH = US 8200H = - ----
13 XX3DH = = XX28H = + N/A 8300H = = ----
14 XX31H = BS XX08H = BS XX7FH = DEL N/A ----
15 XX09H = HT 0F00H = BT N/A N/A ----
16 XX71H = q XX51H = Q XX11H = DC1 1000H = Q ----
17 XX77H = w XX57H = W XX17H = ETB 1100H = W ----
18 XX65H = e XX45H = E XX05H = ENQ 1200H = E ----
19 XX72H = r XX52H = R XX12H = DC2 1300H = R ----
20 XX74H = t XX54H = T XX14H = DC4 1400H = T ----
21 XX79H = y XX59H = Y XX19H = EMB 1500H = Y ----
22 XX75H = u XX55H = U XX15H = NAK 1600H = U ----
23 XX69H = i XX49H = I XX09H = HT 1700H = I ----
24 XX6FH = o XX4FH = O XX0FH = SI 1800H = O ----
25 XX70H = p XX50H = P XX10H = DLE 1900H = P ----
26 XX5BH = [ XX7BH = { XX1BH = ESC N/A ----
27 XX5DH = ] XX7DH = } XX1DH = GS N/A ----
28 XX0AH = CR XX0AH = CR XX0AH = LF N/A ----
29 [Ctrl] ---- ---- ---- ----
30 XX61H = a XX41H = A XX01H = S0H 1E00H = A ----
31 XX73H = s XX53H = S XX13H = DC3 1F00H = S ----
32 XX64H = d XX44H = D XX04H = EOT 2000H = D ----
33 XX66H = f XX46H = F XX06H = ACK 2100H = F ----
34 XX67H = g XX47H = G XX07H = BEL 2200H = G ----
35 XX68H = h XX48H = H XX08H = BS 2300H = H ----
36 XX6AH = j XX4AH = J XX0AH = LF 2400H = J ----
37 XX6BH = k XX4BH = K XX0BH = VT 2500H = K ----
38 XX6CH = l XX4CH = L XX0CH = FF 2600H = L ----
39 XX3BH = ; XX3AH = : N/A N/A ----
40 XX27H = , XX22H = " N/A N/A ----
41 XX60H = ' XX7EH = ~ N/A N/A ----
42 [Shift sin] ---- ---- ---- ----
43 XX5CH = \ XX7CH = | XX1CH = FS3 N/A ----
44 XX7AH = z XX5AH = Z XX1AH = SUB 2C00H = Z ----
45 XX78H = x XX58H = X XX18H = CAN 2D00H = X ----
46 XX63H = c XX43H = C XX03H = ETX 2E00H = C ----
47 XX76H = v XX56H = V XX16H = SYN 2F00H = V ----
48 XX62H = b XX42H = B XX02H = STX 3000H = B ----
49 XX6EH = n XX4EH = N XX0EH = SON 3100H = N ----
50 XX6DH = m XX4DH = M XX0DH = CR 3200H = M ----
51 XX2CH = , N/A N/A N/A ----
52 XX2EH = . XX3EH = > N/A N/A ----
53 XX2FH = / XX3FH = ? N/A N/A ----
54 [Shift des] ---- ---- ---- ----
55 XX2AH = * [Stamp] 7200H = N/A ----
56 [Alt] N/A N/A N/A ----
57 XX20H = SP XX20H = SP XX20H = SP XX20H = SP ----
58 [Maiusc.] [Maiusc.] N/A [Maiusc.] ----
59 3B00H = F1 5400H = F1 5E00H = F1 6800H = F1 ----
60 3C00H = F2 5500H = F2 5F00H = F2 6900H = F2 ----
61 3D00H = F3 5600H = F3 6000H = F3 6A00H = F3 ----
62 3E00H = F4 5700H = F4 6100H = F4 6B00H = F4 ----
63 3F00H = F5 5800H = F5 6200H = F5 6C00H = F5 ----
64 4000H = F6 5900H = F6 6300H = F6 6D00H = F6 ----
65 4100H = F7 5A00H = F7 6400H = F7 6E00H = F7 ----
66 4200H = F8 5B00H = F8 6500H = F8 6F00H = F8 ----
67 4300H = F9 5C00H = F9 6600H = F9 7000H = F9 ----
68 4400H = F10 5D00H = F10 670FH = F10 7100H = F10 ----
69 [Bloc Num] [Bloc Num] [Pause] N/A ----
70 [Bloc Scorr]N/A 0000H = [Break] N/A ----
71 4700H = [Inizio] XX37H = 7 7700H = [ClrScr] N/A XX37H = 7
72 4800H = [Su] XX38H = 8 N/A N/A XX38H = 8
73 4900H = [Pg Su] XX39h = 9 8400H = [Inizio] N/A XX39H = 9
74 XX2DH = - XX2DH = - XX01H = N/A N/A XX2DH = -
71 4B00H = [Sinistra] XX34H = 4 7300H = [ParSin] N/A XX34H = 4
76 N/A XX35H = 5 N/A N/A XX35H = 5
77 4D00H = [Destra] XX36H = 6 7400H = [ParDes] N/A XX36H = 6
78 XX28H = + XX28H = + N/A N/A XX28H = +
79 4F00H = [Fine] XX31H = 1 7500H = [CancLin]N/A XX31H = 1
80 5000H = [Giu'] XX32H = 2 N/A N/A XX32H = 2
81 5100H = [Pg Giu'] XX33H = 3 7600H = [CancPar]N/A XX33H = 3
82 5200H = [Ins] XX30H = 0 N/A N/A XX30H = 0
83 5300H = [Canc] XX2EH = . Boot Boot XX2EH = .

Note: N/A = non disponibile, XX = byte non significativo del codice