Інтерфейсом
програм в персональному комп'ютері з клавiатурою є переривання 16h BIOS. Далі приводиться опис його
функцій.
АН=00h -
читання з очікуванням двухбайтового коду з буферу клавiатури. Прочитаний код повертається в регістрі АХ: молодший байт
- в регістрі AL, старший - в АН. Якщо натиснута
ASCII-клавіша, в AL розміщуюється ASCII-код символу, в АН - скэн-код. При натиску спеціальних клавіш AL
рівний 0, а в АН повертається розширений скэн-код.
АН=01h -
читання без очікування двобайтового коду з буферу клавiатури. Якщо буфер порожній, в 1 виставляється
прапор нуля ZF. В противному випадку в АХ повертається двобайтовий код з буферу клавiатури, але просування покажчика "голови" буферу не
виконується, т. ч. код "залишається" в буфері.
АН=02h -
визначення стану шіфт - і тригерних клавіш. В регістрі AL
повертається вміст байту за адресою 40:17h.
Описані далі
функції переривання 16h підтримуються тільки BIOS, дата якого ‑ 15.11.85 і пізніше.
АН=03h -
встановлення затримки і частоти повторення клавiатури. Якщо клавіша залишається в
натиснутому стані на протязі часу, що перевищує встановлену затримку (delay), апаратура комп'ютера починає
повторення передачі прямого скэн-коду клавіші з частотою, що називається
частотою повторення (typematic rate). При виконанні функції AL=5 в
ВН задається затримка (0 відповідає 250 мс, 1 - 500 мс, 2-750 мс, 3-1 с), в BL - частота повторення (0 відповідає частоті
30 раз/с, 2 - 26 раз/с,..., 1Eh - 6 раз/с, 1Fh - 2 рази/с.
АН=05h - запис
в буфер клавiатури двухбайтового коду клавіші, що повинен поміщуватися в регістр СХ: в CL молодший байт, в СН - старший.
Після виходу з функції регістр AL=0, якщо код клавіші записаний в буфер. Якщо ж
буфер порожній, AL=1.
Функція АН=05h
не має аналогів в бібліотеці Turbo С і може використовуватися для імітації натиснень клавіш в демонстраційних програмах,
програмах переносу тексту і т.д.
Функції АН =10
- 12h є аналогами функцій 00-02h, але передвизначені для використання в комп'ютерах з клавiатурою 101/102 клавіші.
Наведемо
приклад функції enter_kb_BIOS (),
призначеного для запису двобайтового коду клавіші key_code в буфер клавiатури. Працює для версій BIOS, подібних BIOS
IBM PC AT, що датувалися не раніше 15.11.85, і IBM PC XT, що датувалися не
раніше 10.1.86. Функція повертає 0 у випадку успіху і-1, якщо буфер порожній.
/*L7_5. C/
#include <dos. h>
int enter_kb_BIOS(unsigned key_code){
struct REGРАСK r;
r. r_cx=key_code;
r.
r_ax=0х0500;
intr(0х16, &r);
return r. r_ax & 0x00ff;
}
![]() |
![]() |
![]() |