Методические указания по лабораторным работам по курсу «Аппаратные средства компьютерных систем», страница 38

Помимо непосредственного доступа к портам, управление клавиатурой возможно через прерывания 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