.ASM
Home Page
Programação
de Hardware
Programação
do Teclado
Int 09h - IRQ01
A programação do teclado é muito simples, se comparada
aos outros dispositivos de hardware, por isso resolvi iniciar por ele,
a cada tecla pressionada é gerada a int 09h, para podermos saber
o que aconteceu devemos ler a porta 060h.
Para cada tecla existe um valor associado, esse valor é chamado
de scan code (código de varredura), este código é
armazenado nos 7 bits mais baixos da porta 060h, o bit mais significativo,
se zerado significa que a tecla foi pressionada e se setado que a tecla
foi liberada. Por exemplo se precionarmos a tecla ESC, a porta mostrará
o valor 01 (o código de varredura da tecla ESC é 01), e a
int 09h, será geranda enquanto a tecla permanecer pressionada, quando
liberamos a tecla, uma última interrupção é
gerada e o valor da porta 060h, passa de 01 para 129 (valor 01 da tecla
ESC com o bit mais significativo setado).
Além das teclas normais existem as teclas extendidas, quando uma
tecla extendida é pessionada, a int 09h é gerada e a porta
060h vale 224 (0E0h), isto indica que quando a próxima int 09h for
gerada o valor contido na porta 060h será o valor da tecla extendida,
vejamos por exemplo o caso do control esquerdo e do direito, no caso do
esquerdo seu código é 29, e o direito é o extendido,
então quando pressionamos a tecla control direita, a int 09h é
gerada e o valor da porta 060h será 224, então quando o teclado
gerar a nova int 09h, o valor da porta 060h será 29, mas se referente
ao código extendido, esta mesma coincidência ocorre com as
teclas alt, e as setas direcionais (teclas do teclado numérico e
as normais). Mas como em todo o mundo da informática sempre existem
excessões, são elas a tecla Print Screen/SysRq e Pause/Break.
Print Screen/SysRq
Nesta tecla temos uma série de particularidades, pois quando pressionamos
a tecla PrintScreen, ao contrário das outras teclas extendidas,
não serão gerados dois códigos mas sim 4 (note que
para cada novo valor uma nova int 09h é gerada) a sequêencia
é 224,42,224 e 55, você deve prestar atenção
pois a tecla shift possui o código 42, e quando a tecla for liberada
a nova sequência será 224,170,224 e 183. As particulariadades
dessa tecla não param por aí, se alguma tecla shift ou control
for pressionada em conjunto com ela a sequencia será de 2 byte ela
é 224 e 55 e com a liberação 224 e 183, por fim a
última particularidade dessa tecla, quando pressionamos alt+PrintScreen(
System Request), o código não será extendido e o valor
da porta 060h será 84.
Pause/Break
Com certeza esta tecla é a mais complicada de todas do teclado,
se você pressionar esta tecla junto com qualquer tecla control, você
receberá o código extendo 70, e em todas as outras vezes
você receberá a sequência 225,29,69,225,157,197, preste
atenção pois o código de caracter extendido neste
caso é 225 e não 224, uma outra característica é
que essa tecla não aceita a repetição automática.
Códigos de Varredura
Código
|
Tecla
|
Código
|
Tecla
|
Código
|
Tecla
|
Código
|
Tecla
|
Código
|
Tecla
|
01
|
ESC
|
21
|
Y
|
41
|
` ~
|
61
|
F3
|
81
|
3 Pg Dn
|
02
|
1
|
22
|
U
|
42
|
Shift Esq.
|
62
|
F4
|
82
|
0 Insert
|
03
|
2
|
23
|
I
|
43
|
|
63
|
F5
|
83
|
. Del
|
04
|
3
|
24
|
O
|
44
|
Z
|
64
|
F6
|
84
|
|
05
|
4
|
25
|
P
|
45
|
X
|
65
|
F7
|
85
|
|
06
|
5
|
26
|
[ {
|
46
|
C
|
66
|
F8
|
86
|
|
07
|
6
|
27
|
] }
|
47
|
V
|
67
|
F9
|
87
|
F11
|
08
|
7
|
28
|
Enter/Ret.
|
48
|
B
|
68
|
F10
|
88
|
F12
|
09
|
8
|
29
|
Ctrl Esqu.
|
49
|
N
|
69
|
Num Lock
|
89
|
|
10
|
9
|
30
|
A
|
50
|
M
|
70
|
Scro. Lock
|
90
|
|
11
|
0
|
31
|
S
|
51
|
, <
|
71
|
7 Home
|
91
|
|
12
|
- _
|
32
|
D
|
52
|
. >
|
72
|
8 Up
|
92
|
|
13
|
= +
|
33
|
F
|
53
|
/ ?
|
73
|
9 Pg Up
|
93
|
|
14
|
BS
|
34
|
G
|
54
|
Shift Dir.
|
74
|
- Keypad
|
94
|
|
15
|
TAB
|
35
|
H
|
55
|
* Keypad
|
75
|
4 Left
|
95
|
|
16
|
Q
|
36
|
J
|
56
|
Alt Esqu.
|
76
|
5 Keypad
|
96
|
|
17
|
W
|
37
|
K
|
57
|
Espaço
|
77
|
6 Right
|
97
|
|
18
|
E
|
38
|
L
|
58
|
Caps Lock
|
78
|
+ Keypad
|
98
|
|
19
|
R
|
39
|
; :
|
59
|
F1
|
79
|
1 End
|
99
|
|
20
|
T
|
40
|
' "
|
60
|
F2
|
80
|
2 Down
|
100
|
|
Códigos de Varredura Extendidos
Código
|
Tecla
|
Código
|
Tecla
|
Código
|
Tecla
|
Código
|
Tecla
|
Código
|
Tecla
|
28
|
Enter Keyp
|
75
|
Esquerda
|
|
|
|
|
|
|
29
|
Control Dir
|
77
|
Direita
|
|
|
|
|
|
|
42
|
Prt. Screen
|
79
|
End
|
|
|
|
|
|
|
53
|
/ (KeyPad)
|
80
|
Down
|
|
|
|
|
|
|
55
|
Prt. Screen
|
81
|
Pg. Down
|
|
|
|
|
|
|
56
|
Alt Dir.
|
82
|
Insert
|
|
|
|
|
|
|
71
|
Home
|
83
|
Delete
|
|
|
|
|
|
|
72
|
Up
|
111
|
Macro
|
|
|
|
|
|
|
73
|
Pg. Up
|
|
|
|
|
|
|
|
|
Retornar
xandre@convex.com.br