Клавиатура
Клавиатура - это наиболее сложное устройство ввода, которое есть в ПК. Она даже имеет свою собственную микросхему - контроллер ввода. Я провел много бессонных ночей, вчитываясь в листинги BIOS и пытаясь понять тайны, скрытые в работе с клавиатурой.
В этой жизни есть множество непонятных вещей - курс доллара, термический - коэффициент расширения рубидия и т. д. Несомненно одно - любовь людей к клавиатуре абсолютно необъяснима.
Для наших целей (для написания видеоигр) мы должны научиться хорошо работать с клавиатурой. Для этого вовсе не стоит разбираться с прерываниями, регистрами и портами. Мы будем использовать функции языка Си и BIOS для работы с очередью клавиатуры. Говоря о Си, я не имею в виду функции типа getch () и scanf (). Речь пойдет, скорее, о функциях типа _bios_keyboard ().
Примечание
Давайте приостановимся и немного подумаем, Общее правило для авторов игр - никогда не использовать BIOS. Верно? Хорошо, на самом деле BIOS вполне можно использовать для файловых операций и для выделения памяти. В общем, обращения к BIOS вполне допустимы в функциях, некритичных по времени. Попытка использовать его для работы с джойстиком или клавиатурой не будет для нас смертельна (в отличие от попыток организовать через BIOS вывод графики). Как я уже говорил, современные компьютеры достаточно быстры, чтобы нам не приходилось оптимизировать каждую запятую в тексте программы или писать ее целиком на ассемблере.
BIOS поддерживает несколько функций, которые мы будем использовать и которые приведены в таблице 3-1.
Таблица 3.1. Клавиатурные функции BIOS.
Bios INT 16h
Функция 00h - чтение символа с клавиатуры.
Вход: АН: 00h
Выход: АН - скан код
AL - ASCII-символ
Функция 01h - чтение статуса клавиатуры.
Вход: АН: 01h
Выход: АН - скан-код
AL - ASCII-символ
флаг Z: если 0, то в буфере есть символ, если 1 - нет символа.
Функция 02h - Флаги, возвращаемые клавиатурой.
Вход: АН: 02h
Выход: AL - байт статуса клавиатуры:
бит 0 - нажат правый
Shift;
бит 1 - нажат левый Shift;
бит 2 - нажата клавиша Ctrl;
бит 3 - нажата клавиша Alt;
бит 4 - Scroll Lock в положении ON;
бит 5 - Num Lock в положении ON;
бит 6 - Caps Lock в положении ON;
бит 7 - Insert в положении ON.