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
Всё, теперь проверить нажата ли клавиша "A" например можно так:Код:;------------------------------------------------------------------------------------------------------------ ; Начало массива клавиш 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
Код:LD A,(KEY_A) OR A JR Z,переход_клавиша_нажата итд...




Ответить с цитированием