Функции BIOS для работы с клавиатурой
Функции BIOS для работы с клавиатурой
Прерывание 16 BIOS имеет функции для различных типов клавиатур: обычной —
84 клавиши и двух типов расширенной клавиатуры — 101\102 и 122-клавишной.
Выяснить функциональные возможности клавиатуры позволяет функция 09п:
Вход: АН - 09h.
Выход: AL = битовое поле, установленные биты которого обозначают поддерживаемые функции: 7 - резерв; 6 — поддержка клавиатуры со 122 клавишами (и функций 20h-22h (int 16h)); 5 — поддержка расширенной клавиатуры со 101-102 клавишами (и функций 10h-12h (int 16h)); 4 — поддержка функции 0Ah (int 16h); 3 — поддержка функции 0З0бп (int 16h); 2 — поддержка функции 0305h (int 16h); 1 — поддержка функции 0304h (int 16h); 0 — поддержка функции 0З00п (int 16h).
Прежде чем вызывать эту функцию, необходимо удостовериться в том, что
она поддерживается данной версией BIOS. Сделать это можно, вызвав функцию
OcOh прерывания int 15h.
Вход: АН = COh получить конфигурацию.
Выход: CF = 1 — BIOS не поддерживает эту функцию; CF - 0 — в случае успеха: ES:BX — адрес конфигурационной таблицы в ROM-памяти; АН = состояние (ООп — успех; 8бп — функция не поддерживается).
Формат конфигурационной ROM-таблицы:
Смещение | Размер | Описание |
00h | 2 байта | Число байтов в этой таблице |
02h | 1 байт | Модель BIOS |
03h | 1 байт | Подмодель BIOS |
04h | 1 байт | Издание BIOS: 0 — 1-я редакция, 1 — 2-я редакция и т. д. |
05h | 1 байт | 1-й байт свойств |
06h | 1 байт | 2-й байт свойств |
07h | 1 байт | 3-й байт свойств |
08h | 1 байт | 4-й байт свойств |
09h | 1 байт | 5-й байт свойств |
Если в результате этого вызова бит б второго байта свойств установлен, то BIOS поддерживает функцию 09п прерывания int 16h, с помощью которой определяются функциональные возможности клавиатуры.
Вход: АН = 10h, 20h чтение символа с ожиданием (для 101-102- и 122-клавиш-ных клавиатур соответственно).
Выход: для обычных клавиш (АН = скан-код BIOS; AL = символ ASCII); для клавиш и комбинаций с расширенным кодом (АН = расширенный ASCII-код; AL = 0); для дополнительных клавиш (АН - расширенный ASCII-код; AL = 0Eh).
Для ввода строки символов данные функции необходимо использовать в цикле. На примере показанной ниже программы, используя отладчик, можно исследовать содержимое АХ при нажатии различных клавиш и их комбинаций.
;prg05_02.asm - программа на ассемблере для ввода строки ;с использований функции ввода символа 10h
.data
string db 5 dup (0) len_string =$-string adr_stringdd string .code
mov cx,len_string
les di.adr_string ml: mov ah.O10h
int 16h
stosb
loop ml
Программа вводит 5 символов и сохраняет их в строке str.