Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C_Kurs_Lekt / DOC_RAZNOE / 1 / Сканкоды клавиатуры

.pdf
Скачиваний:
17
Добавлен:
13.02.2016
Размер:
56.01 Кб
Скачать

╔══════════════════════════════════════════════════════════════════════════════╗

Сканкоды клавиатуры

╚══════════════════════════════════════════════════════════════════════════════╝

Когда клавиатура вызывает аппаратное прерывание, она передает обработчику прерываний "сканкод". Обработчик преобразует сканкод либо в код ASCII, либо в расширенный код ASCII . Для совместимости между различными типами клавиатур разумно привязываться к BIOS-интерпретации нажатой клавиши.

┌──────────────────────────────┐

│ Стандартная клавиатура PC/XT │ При отпускании клавиши, клавиатура посылает └──────────────────────────────┘ тот же сканкод с включенным старшим битом (например, [Ctrl] посылает 1dH при нажатии и 9dH при отпускании).

────────────╥─────────────╥───────────────╥────────────────╥──────────────────

Hex Dec Key ║Hex Dec Key ║Hex Dec Key ║Hex Dec Key ║Hex Dec Key

────────────╫─────────────╫───────────────╫────────────────╫──────────────────

01

1

Esc ║12

18

E

║23

35

H

║34

52

. >

║45

69

NumLock

02

2

1

! ║13

19

R

║24

36

J

║35

53

/ ?

║46

70

ScrollLock

03

3

2

@ ║14

20

T

║25

37

K

║36

54

Shft(Rt)║47

71

Home

[7]

04

4

3

# ║15

21

Y

║26

38

L

║37

55

PrtSc

║48

72

 

[8]

05

5

4

$ ║16

22

U

║27

39

; :

║38

56

Alt

║49

73

PgUp [9]

06

6

5

% ║17

23

I

║28

40

" '

║39

57

spacebar║4a

74

K -

 

07

7

6

^ ║18

24

O

║29

41

` ~

║3a

58

CapsLock║4b

75

 

[4]

08

8

7

& ║19

25

P

║2a

42

Shft(L)║3b

59

F1

║4c

76

 

[5]

09

9

8

* ║1a

26

[ {

║2b

43

\ |

║3c

60

F2

║4d

77

 

[6]

0a

10

9

( ║1b

27

] }

║2c

44

Z

║3d

61

F3

║4e

78

K +

 

0b

11

0

) ║1c

28

Enter║2d

45

X

║3e

62

F4

║4f

79

End

[1]

0c

12

- _ ║1d

29

Ctrl ║2e

46

C

║3f

63

F5

║50

80

 

[2]

0d

13

+ = ║1e

30

A

║2f

47

V

║40

64

F6

║51

81

PgDn

[3]

0e

14

bksp║1f

31

S

║30

48

B

║41

65

F7

║52

82

Ins

[0]

0f

15

Tab ║20

32

D

║31

49

N

║42

66

F8

║53

83

Del

[.]

10

16

Q

║21

33

F

║32

50

M

║43

67

F9

 

 

 

11

17

W

║22

34

G

║33

51

, <

║44

68

F10

 

 

 

────────────╨─────────────╨───────────────╨────────────────╨──────────────────

┌────────────────────────────┐

│ 84-клавишная клавиатура AT │ Эта клавиатура посылает те же сканкоды, что и └────────────────────────────┘ типовая 83-клавишная, с тем добавлением, что

[SysReq] посылает сканкод 54H (десятичное 84).

Однако BIOS никогда не передает этот сканкод в прикладную программу. Вместо этого он вызывает INT 15H подф. 85H при нажатии и отпускании SysReq.

Отпускание клавиши обрабатывается иначе. При отпускании клавиши клавиатура посылает двухбайтовую последовательность: 0f0H, затем сканкод 'нажатия'. См. Функции клавиатуры AT о программировании такой клавиатуры.

┌──────────────────────────┐ │ 101-клавишная клавиатура │ Эта клавиатура имеет имеет три различных схемы

└──────────────────────────┘ сканкодов, выбираемых через порт 64H. На уровне сканкодов существует много существенных отличий от более старых клавиатур.

Эта версия Tech Help! не включает информации по 101-клавишной клавиатуре. Будущие версии будут содержать эти сведения (если вы попросите об этом). Посмотрите пока Расширенные клавиши ASCII - там есть интерфейс BIOS для этой клавиатуры. И, в конце концов, самое лучшее - привязаться к этому интерфейсу.

╔══════════════════════════════════════════════════════════════════════════════╗ ║ INT 16H: Сервис клавиатуры еще ║

╚══════════════════════════════════════════════════════════════════════════════╝

Это - интерфейс прикладного уровня с клавиатурой. Нажатия клавиш на самом деле обрабатываются асинхронно на заднем плане. Когда клавиша получена от клавиатуры, она обрабатывается прерыванием INT 09H и помещается в циклическую очередь.

См. Клавиатуру AT о способах ускорения клавиатуры и других сведениях.

AH Сервис

▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

00H читать (ожидать) следующую нажатую клавишу

Выход: AL = ASCII символ (если AL=0, AH содержит Расширенный код ASCII ) AH = Сканкод или Расширенный код ASCII

▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

01H Проверить готовность символа (и показать его, если так) Выход: ZF = 1 если символ не готов.

ZF = 0 если символ готов.

AX = как для подфункции 00H (но символ здесь не удаляется из очереди).

▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

02H Читать состояние shift-клавиш. Определить, какие shift-клавиши нажаты в данный момент, находится ли клавиатура в состоянии NumLock, и т.п. Выход: AL = статус клавиатуры -- см. Флаги клавиатуры

────────────────────────────────────────────────────────────────────────────────

Функции DOS: Символьный в/в Данные BIOS Функции ROM-BIOS

╔══════════════════════════════════════════════════════════════════════════════╗ ║ Флаги состояния клавиатуры еще ║

╚══════════════════════════════════════════════════════════════════════════════╝

Два байта с адресами 0:0417 и 0:0418 содержат состояние служебных клавиш и другую полезную информацию. Прерывание INT 16H возвращает первый байт в AL.

╓7┬6┬5┬4┬3┬2┬1┬0╖

 

 

 

║i│c│n│s│A│C│ │ ║

Вызовите INT 16H или извлеките байт по адресу 0:0417

╙╥┴╥┴╥┴╥┴╥┴╥┴╥┴╥╜ бит

 

 

║ ║ ║

║ ║ ║ ║ ╚═

0: правая клавиша Shift (AL & 01H) 01H=нажата

║ ║ ║

║ ║ ║ ╚═══

1: левая клавиша Shift (AL & 02H) 02H=нажата

║ ║ ║

║ ║ ╚═════

2: Ctrl

(AL & 04H) 04H=[Ctrl] нажата

║ ║ ║

║ ╚═══════

3: Alt

(AL & 08H) 08H=[Alt] нажата

║ ║ ║

╚═════════

4: ScrollLock

(AL & 10H) 10H=режим ScrollLock

║ ║ ╚═══════════

5: NumLock

(AL & 20H) 20H=режим NumLock

║ ╚═════════════

6: CapsLock

(AL & 40H) 40H=режим CapsLock

╚═══════════════

7: Insert

(AL & 80H) 80H=режим Insert

╓7┬6┬5┬4┬3┬2┬1┬0╖

 

 

 

║I│C│N│S│ │ │ │ ║

извлеките AL=байт по адресу 0:0418

╙╥┴╥┴╥┴╥┴╥┴╥┴╥┴╥╜ бит

 

 

║ ║ ║

║ ║ ║ ║ ╚═

0: Ctrl (левая клавиша Ctrl) (AL & 01H) 01H=нажата

║ ║ ║

║ ║ ║ ╚═══

1: Alt (левая клавиша Alt)

(AL & 02H) 02H=нажата

║ ║ ║

║ ║ ╚═════

2: SysReq

(AL & 04H) 40H=SysReq нажата

║ ║ ║

║ ╚═══════

3: задержка

(AL & 08H) 08H Ctrl-NumLock (пауза)

║ ║ ║

╚═════════

4: ScrollLock

(AL & 10H) 10H=[ScrollLock] нажата

║ ║ ╚═══════════

5: NumLock

(AL & 20H) 20H=[NumLock] нажата

║ ╚═════════════

6: CapsLock

(AL & 40H) 40H=[CapsLock] нажата

╚═══════════════

7: Insert

(AL & 80H) 80H=[Ins] нажата

Замеч: Биты 0-2 байта 0:0418 определены только для 101-клавишной клавиатуры. Бит 2 используется в PCjr для индикации ситуации "key click".

Некоторые старые программы изменяют биты NumLock и CapsLock (по адресу 0:0417), чтобы установить нужный статус. Это не следует делать, потому что современные клавиатуры снабжены световыми индикаторами, которые тем самым перестанут отражать текущий статус.

См. Клавиатуру AT на предмет более подробной информации.

Байты статуса PCjr по адресу 0:0488 опущены - неинтересно.

╔══════════════════════════════════════════════════════════════════════════════╗ ║ Расширенные клавиши ASCII еще ║

╚══════════════════════════════════════════════════════════════════════════════╝

Если

INT 16H

Fn 00H вернула AL=0, то

AH содержит

расширенный код клавиши ASCII,

как показано

в этих таблицах. Если функция символьного в/в

DOS возвращает

 

символ 00H, вы должны вызвать ее еще

раз, чтобы получить

расширенный код ASCII.

╓─────────────╥───────────────────╥───────────────────╥──────────────────╖

Key Hex

Dec ║

Key

Hex Dec ║

Key

Hex Dec ║

Key

Hex

Dec ║

╟─────────────╫───────────────────╫───────────────────╫──────────────────╢

F1

3b

59

Shift-F1

54

84

Ctrl-F1

5e

94

Alt-F1

68

104

F2

3c

60

Shift-F2

55

85

Ctrl-F2

5f

95

Alt-F2

69

105

F3

3d

61

Shift-F3

56

86

Ctrl-F3

60

96

Alt-F3

6a

106

F4

3e

62

Shift-F4

57

87

Ctrl-F4

61

97

Alt-F4

6b

107

F5

3f

63

Shift-F5

58

88

Ctrl-F5

62

98

Alt-F5

6c

108

F6

40

64

Shift-F6

59

89

Ctrl-F6

63

99

Alt-F6

6d

109

F7

41

65

Shift-F7

5a

90

Ctrl-F7

64

100

Alt-F7

6e

110

F8

42

66

Shift-F8

5b

91

Ctrl-F8

65

101

Alt-F8

6f

111

F9

43

67

Shift-F9

5c

92

Ctrl-F9

66

102

Alt-F9

70

112

F10

44

68

Shift-F10

5d

93

Ctrl-F10

67

103

Alt-F10

71

113

╙─────────────╨───────────────────╨───────────────────╨──────────────────╜

──────────────╥───────────────╥────────────────╥─────────────────╥──────────────

Key Hex Dec ║ Key Hex Dec ║ Key Hex Dec ║ Key Hex Dec ║ Key Hex Dec

──────────────╫───────────────╫────────────────╫─────────────────╫──────────────

Alt-A

1e

30

║ Alt-N

31

49

║ Alt-0

81

129

down

 

50

80

 

 

Alt-B

30

48

║ Alt-O

18

24

║ Alt-1

78

120

left

 

4b

75

║ ^left

73

115

Alt-C

2e

46

║ Alt-P

19

25

║ Alt-2

79

121

right

 

4d

77

║ ^right 74 116

Alt-D

20

32

║ Alt-Q

10

16

║ Alt-3

7a

122

up

 

48

72

 

 

Alt-E

12

18

║ Alt-R

13

19

║ Alt-4

7b

123

NUL

 

03

3

 

 

Alt-F

21

33

║ Alt-S

1f

31

║ Alt-5

7c

124

Shft-Tab 0f

15

 

 

Alt-G

22

34

║ Alt-T

14

20

║ Alt-6

7d

125

Del

 

53

83

 

 

Alt-H

23

35

║ Alt-U

16

22

║ Alt-7

7e

126

End

 

4f

79

║ ^End

75

117

Alt-I

17

23

║ Alt-V

2f

47

║ Alt-8

7f

127

Home

 

47

71

║ ^Home

77

119

Alt-J

24

36

║ Alt-W

11

17

║ Alt-9

80

128

Ins

 

52

82

 

 

Alt-K

25

37

║ Alt-X

2d

45

║ Alt--

82

130

PgDn

 

51

81

║ ^PgDn

76

118

Alt-L

26

38

║ Alt-Y

15

21

║ Alt-=

83

131

PgUp

 

49

73

║ ^PgUp

84

132

Alt-M

32

50

║ Alt-Z

2c

44

 

 

 

 

 

 

║ ^PrtSc 72 114

──────────────╨───────────────╨────────────────╨─────────────────╨──────────────

╔═══════════════════════════════════════════════╗ ║ Расширения 101-клавишной клавиатуры ──── BIOS ║

╓─────────╨─────────╥───────────────────────╥─────────────╨──────────╖ ║ Key Hex Dec ║ Key Hex Dec ║ Key Hex Dec ║

╟───────────────────╫───────────────────────╫────────────────────────╢

║ F11

85

133

║ Alt-Bksp

 

0e

14

║ Alt- K /

 

a4

164

║ F12

86

134

║ Alt-Enter

 

1c

28

║ Alt- K *

 

37

55

║ Shft-F11

87

135

║ Alt-Esc

 

01

1

║ Alt- K -

 

4a

74

║ Shft-F12

88

136

║ Alt-Tab

 

a5

165

║ Alt- K +

 

4e

78

║ Ctrl-F11

89

137

║ Ctrl-Tab

 

94

148

║ Alt- K Enter

a6

166

║ Ctrl-F12

8a

138

 

 

 

 

 

 

║ Alt-F11

8b

139

║ Alt-up

 

98

152

║ Ctrl- K /

 

95

149

║ Alt-F12

8c

140

║ Alt-down

 

a0

160

║ Ctrl- K *

 

96

150

║ Alt-[

1a

26

║ Alt-left

 

9b

155

║ Ctrl- K -

 

8e

142

║ Alt-]

1b

27

║ Alt-right

 

9d

157

║ Ctrl- K +

 

90

144

║ Alt-;

27

39

 

 

 

 

 

 

║ Alt-'

28

40

║ Alt-Delete

 

a3

163

║ Ctrl- K

[8] 8d

141

║ Alt-`

29

41

║ Alt-End

 

9f

159

║ Ctrl- K 5

[5] 8f

143

║ Alt-\

2b

43

║ Alt-Home

 

97

151

║ Ctrl- K

[2] 91

145

║ Alt-,

33

51

║ Alt-Insert

 

a2

162

║ Ctrl- K Ins[0] 92

146

║ Alt-.

34

52

║ Alt-PageUp

 

99

153

║ Ctrl- K Del[.] 93

147

║ Alt-/

35

53

║ Alt-PageDown

a1

161

 

 

 

╙───────────────────╨───────────────────────╨────────────────────────╜

Соседние файлы в папке 1