|
|
|
|
Опрос буфера клавиатуры прерыванием от таймера Int 1Ch
Вы можете обеспечить постоянный контроль клавиатуры подменой прерывания от таймера и проверкой буфера клавиатуры с помощью Вашей программы обработки
прерываний от таймера. Листинг 4-6 проверяет используемую клавишу при каждом прерывании от таймера. Если первый код клавиши в буфере клавиатуры
соответствует используемой клавише, новая TSR удаляет код клавиши и активизирует TSR. В противном случае новая ISR обращается к первоначальной программе
обработки прерываний от таймера.
Листинг 4-6. Использование прерывания Int 1ch
для опроса клавиатуры
----------------------------------------------------------------
HotKey DW (?) ; определение нажатой клавиши
; заметим, что ascii
; не может быть расширена
OldInt1c DD 0 ; запоминание старого адреса ISR
NewInt1c PROC FAR ; новый таймер isr
puch ax ; необходимо для int 16h
xor al,al ; xor быстрее очищает al,чем
inc al ; mov al,1
int 16h ; проверка буфера клавиатуры
jz NoHotKey ; если z - буфер пустой
cmp ax,HotKey ; не пустой -- нажатая клавиша?
jnz NoHotKey ; если nz -- клавиша не нажата
xor al,al ; al <== запрос чтения
int 16h ; удаление нажатой клавиши
call ActivateTSR; обращение к TSR
NoHotKey pop ax ; восстановление ax
jmp cs:OldInt1ch; передача отметки времени
NewInt1c ENDP
----------------------------------------------------------------
|
При использовании этого метода доступен только первый символ буфера клавиатуры. Распознавание присутствия обычного символа спрячет от этой
подпрограммы опроса горячий ключ. Предполагая, что пользователь никогда заранее не в состоянии предвидеть запросы программ на ввод, горячий ключ
будет обеспечивать ожидаемую реакцию при как угодно частом обращении. Но так как действия пользователя непредсказуемы, этот метод не является
надежным путем для распознавания горячего ключа. Еще раз заметим, что этот пример не обеспечивает окончательно безопасность завершения TSR.
|
|