Помимо непосредственного доступа к портам, управление клавиатурой возможно через прерывания BIOS INT 09h, INT 15h и функции DOS (INT 21h). Прерывание INT 09h инициируется аппаратурой (IRQ1) и предназначено для обработки нажатия и отпускания клавиш на клавиатуре. Обработчик INT 09h читает из порта 60h байт данных, формирует коды, которые сохраняет в буфере клавиатуры (переменные BIOS с адресами 0040:001A, 0040:001C, 0040:001E), а также устанавливает байты состояния 0040:0017 и 0040:0018 (табл. 5.5). Сохраненные обработчиком INT 09h 2-байтные коды содержат скан-код клавиши (старший байт) и код ASCII соответствующего символа. Скан-коды клавиш, не имеющих представляющего их ASCII-символа (функциональные клавиши F1-F10 или комбинации с клавишей Alt), преобразуются в расширенные коды, старший байт которых содержит номер расширенного кода, а младший — всегда 0. Номер расширенного кода обычно совпадает со скан-кодом клавиши.
При обработке BIOS нажатия некоторых клавиш (Alt, Ctrl, CapsLock, Shift, NumLock) и их комбинаций с другими клавишами будут выполняться специальные функции, закрепленные за ними.
Прерывание клавиатуры обновляет биты статуса, как только будет нажата одна из клавишей переключателей, даже если не было считано ни одного символа из буфера клавиатуры. Разряды 0-2 по адресу 418h определены только для 101-клавишной клавиатуры.
Таблица 5.5
Бит |
Значение по адресу: |
|
417h |
418h |
|
7 |
режим вставки |
нажата клавиша вставки |
6 |
режим CapsLock |
нажата клавиша CapsLock |
5 |
режим NumLock |
нажата клавиша NumLock |
4 |
режим ScrollLock |
нажата клавиша ScrollLock |
3 |
нажата клавиша Alt |
режим паузы |
2 |
нажата клавиша Ctr |
нажата клавиша SysReq |
1 |
нажата левая клавиша Shift |
нажата левая клавиша Alt |
0 |
нажата правая клавиша Shift |
нажата левая клавиша Ctrl |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.