Oleg N. Cher, самый правильный способ опроса клавиатуры в начале прерывания.
Включаешь режим IM2 настраиваешь вектор и вызываешь эту подпрограмму каждое прерывание:
Код:
CHECK_KEYS:
LD (SCAN_SP+1),SP
LD SP,KEY_TAB ; Опрос клавиатуры
LD DE,MAIN.KEY_MAP
LD BC,#29FF
SCANLP:
POP HL
LD A,L
IN A,(#FE)
CPL
AND H
ADD A,C
CCF
SBC A,A
LD (DE),A
INC E
DJNZ SCANLP
SCAN_SP:
LD SP,#0000
RET
; Таблица портов клавиатуры
KEY_TAB:
DB #FD,1 ;#14
DB #7F,16 ;#23
DB #FE,8 ;#21
DB #FD,4 ;#16
DB #FB,4 ;#0C
DB #FD,8 ;#17
DB #FD,16 ;#18
DB #BF,16 ;#19
DB #DF,4 ;#11
DB #BF,8 ;#1A
DB #BF,4 ;#1B
DB #BF,2 ;#1C
DB #7F,4 ;#25
DB #7F,8 ;#24
DB #DF,2 ;#12
DB #DF,1 ;#13
DB #FB,1 ;#0A
DB #FB,8 ;#0D
DB #FD,2 ;#15
DB #FB,16 ;#0E
DB #DF,8 ;#10
DB #FE,16 ;#22
DB #FB,2 ;#0B
DB #FE,4 ;#20
DB #DF,16 ;#0F
DB #FE,2 ;#1F
DB #EF,1 ;#09
DB #F7,1 ;#00
DB #F7,2 ;#01
DB #F7,4 ;#02
DB #F7,8 ;#03
DB #F7,16 ;#04
DB #EF,16 ;#05
DB #EF,8 ;#06
DB #EF,4 ;#07
DB #EF,2 ;#08
DB #7F,1 ;#27
DB #BF,1 ;#1D
DB #FE,1 ;#1E
DB #7F,2 ;#26
DB #00,#1F
Результатом работы этой процедуры будет массив с состояниями клавиш:
Код:
;------------------------------------------------------------------------------------------------------------
; Начало массива клавиш
KEY_MAP:
DS #29,#00
KEY_A EQU KEY_MAP+#00
KEY_B EQU KEY_MAP+#01
KEY_C EQU KEY_MAP+#02
KEY_D EQU KEY_MAP+#03
KEY_E EQU KEY_MAP+#04
KEY_F EQU KEY_MAP+#05
KEY_G EQU KEY_MAP+#06
KEY_H EQU KEY_MAP+#07
KEY_I EQU KEY_MAP+#08
KEY_J EQU KEY_MAP+#09
KEY_K EQU KEY_MAP+#0A
KEY_L EQU KEY_MAP+#0B
KEY_M EQU KEY_MAP+#0C
KEY_N EQU KEY_MAP+#0D
KEY_O EQU KEY_MAP+#0E
KEY_P EQU KEY_MAP+#0F
KEY_Q EQU KEY_MAP+#10
KEY_R EQU KEY_MAP+#11
KEY_S EQU KEY_MAP+#12
KEY_T EQU KEY_MAP+#13
KEY_U EQU KEY_MAP+#14
KEY_V EQU KEY_MAP+#15
KEY_W EQU KEY_MAP+#16
KEY_X EQU KEY_MAP+#17
KEY_Y EQU KEY_MAP+#18
KEY_Z EQU KEY_MAP+#19
KEY_0 EQU KEY_MAP+#1A
KEY_1 EQU KEY_MAP+#1B
KEY_2 EQU KEY_MAP+#1C
KEY_3 EQU KEY_MAP+#1D
KEY_4 EQU KEY_MAP+#1E
KEY_5 EQU KEY_MAP+#1F
KEY_6 EQU KEY_MAP+#20
KEY_7 EQU KEY_MAP+#21
KEY_8 EQU KEY_MAP+#22
KEY_9 EQU KEY_MAP+#23
KEY_SPC EQU KEY_MAP+#24
KEY_ENT EQU KEY_MAP+#25
KEY_CS EQU KEY_MAP+#26
KEY_SS EQU KEY_MAP+#27
KEY_ANY EQU KEY_MAP+#28
Всё, теперь проверить нажата ли клавиша "A" например можно так:
Код:
LD A,(KEY_A)
OR A
JR Z,переход_клавиша_нажата
итд...