Для клавиатуры USB или иного устройства ввода, заменяющего клавиатуру в качестве консоли, прерывание Int 9h должно вызываться программно при обработке каждого клавиатурного события. Обработчик этого прерывания должен выполнять те же действия: скан-код пропускать через Int 15h(4Fh) и помещать в клавиатурный буфер, а также модифицировать флаги клавиатуры.

Интерфейс прикладного уровня для клавиатуры представляет BIOS Int 16h. Его основное назначение — извлечение слов из клавиатурного буфера. Функция задается в регистре АН при вызове, результат помещается в регистр АХ.

♦ АН = 00h — чтение (с ожиданием готовности) и выборка слова из буфера (меняется указатель хвоста). Индикаторы клавиатуры обновляются в соответствии с состоянием флагов. Если буфер пуст, то на AT выполняется прерывание Int 15h (подфункция 90), что может использоваться ОС, например, для переключения задач. Чтобы программа не «зависала» на ожидании символа, предварительно стоит проверить готовность функцией 01h. Символы расширенной клавиатуры фильтруются — преобразуются в их аналоги 83-клавишной клавиатуры.

♦ АН = 01h — проверка готовности, чтение без выборки (указатели не изменяются). Признак наличия символа в буфере — установленный флаг ZF.

♦ АН = 02h — чтение состояния флагов (в AL — байт 0:417h, см. выше).

♦ АН = 03h — установка задержки и частоты автоповтора: BL — код задержки (00=250, 01=500, 02=750, 03=1000 мс), ВН — код частоты (см. п. 9.2.1).

♦ АН = 05h — запись слова из регистра СХ в буфер (меняется указатель головы). Признак успешной записи — AL=0, если в буфере нет места, то AL=1.

♦ АН = 10h и AH = 11h — функции, аналогичные 00h и 01h, но предназначены специально для 101/102-клавишных клавиатур — в них не выполняется фильтрация символов расширенной клавиатуры. Для ряда клавиш, отсутствующих в клавиатуре АТ-84, эти функции дадут результаты, отличающиеся от вызовов 00h и 01h.

♦ AH=12h — чтение расширенного состояния флагов (в АХ — слово KbdShiftFlags101Rec), в котором младший байт совпадает с тем, что дает функция 02h (слово из 0:417h), а старший байт похож на слово из 0:418h. Назначение бит АХ:

 • бит 0 — клавиша Shift (правая) нажата;

 • бит 1 — клавиша Shift (левая) нажата;

 • бит 2 — клавиша Ctrl (любая) нажата;

 • бит 3 — клавиша Alt (любая) нажата;

 • бит 4 — включен индикатор Scroll Lock;

 • бит 5 — включен индикатор Num Lock;

 • бит 6 — включен индикатор Caps Lock;

 • бит 7 — включен режим Insert;

 • бит 8 — клавиша Ctrl (левая) нажата;

 • бит 9 — клавиша Alt (левая) нажата;

 • бит 10 — клавиша Ctrl (правая) нажата;

 • бит 11 — клавиша Alt (правая) нажата;

 • бит 12 — клавиша Scroll Lock нажата;

 • бит 13 — клавиша Num Lock нажата;

 • бит 14 — клавиша Caps Lock нажата;

 • бит 15 — клавиша SysReq нажата.

Функции чтения буфера (00 и 10h) в регистре AL возвращают ASCII-код символа, в АНскан-код. Символы, полученные нестандартным способом (в русском регистре или Alt-набором), сопровождаются нулевым скан-кодом. Alt-набор позволяет ввести в буфер любой символ — для этого его код в десятичной системе набирается на цифровой клавиатуре при нажатой клавише Alt, результат заносится в буфер при отпускании клавиши Alt.

При AL=0 регистр АН содержит расширенный ASCII-код (Extended ASCII Keystroke). Дополнительные клавиши 101/102 клавиатур при использовании функций 10h-12h генерируют код E0h в младшем байте и скан-код, соответствующий аналогичным управляющим клавишам 83/84-клавишных клавиатур.

Функция записи (05h), несколько неожиданная для клавиатуры, позволяет легко имитировать работу оператора для различных демонстрационных программ. Если прикладная программа не перехватывает обслуживание клавиатуры на уровне аппаратного прерывания (Int 9h), то резидентная программа может ей «подбрасывать» слова в буфер, которые будут восприниматься как нажатие клавиш.

ASCII-коды буфера, соответствующие нажатию клавиш, приведены в [1, 7]. При русификации (или другой локализации) клавиатуры отслеживание переключения регистров (языков) ложится на обработчик аппаратного прерывания клавиатуры.

<p>12.8.2. Int 10h — видеосервис</p>

Int 10h — видеосервис — предназначен для работы с графическим адаптером. Его первичной задачей является управление видеорежимом (BIOS Video Mode), определяющим формат экрана. BIOS адаптера должна выполнять программирование всех стандартных и специфических управляющих регистров для установки (смены) требуемого видеорежима и выбранных параметров развертки — кроме нее о способах этих переключений остальное ПО может и не знать.

Перейти на страницу:

Все книги серии Наиболее полное и подробное руководство

Похожие книги