На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 4 / Опрос буфера клавиатуры прерыванием от таймера Int 1Ch Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Опрос буфера клавиатуры прерыванием от таймера 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.


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz