Программирование игр для Windows. Советы профессионала

       

Клавиатура


Клавиатура - это наиболее сложное устройство ввода, которое есть в ПК. Она даже имеет свою собственную микросхему - контроллер ввода. Я провел много бессонных ночей, вчитываясь в листинги 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.



Содержание раздела