КОМПЬЮТЕРНОЕ ЖЕЛЕЗО
HARDWARE FOR PC

Специализированные интерфейсы периферийных устройств

п.) из порта данных (60h). Трансляция обес¬печивает программную совместимость клавиатур XT и AT (см. ниже) по чтению скан-кодов из порта 60h. При получении посылки от мыши контроллер не выпол¬няет никаких преобразований и устанавливает в регистре состояния Моusе_0ВF-1, что приводит к генерации запроса прерывания IRQ12 (если это не запрещено ко¬мандным байтом). По этому сигналу данные от мыши должны быть считаны хос¬том из того же порта 60h. To же самое происходит и при программной записи байта в выходной буфер клавиатуры (код D2h) или мыши (код D3h), с установ¬кой соответствующих битов состояния и генерацией запросов IRQ1 или IRQ 12.
После получения команды, по которой контроллер должен возвращать данные, он устанавливает в регистре состояния OBF=1, что приводит к генерации запроса прерывания IRQ1 (если это не запрещено командным байтом). После этого дан¬ные должны быть считаны из порта данных (по адресу 60h). Если команда возвра¬щает несколько байтов данных, прерывание генерируется для каждого байта.
Взаимодействие с контроллером осуществляется подачей команд — записью в ре¬гистр команд (по адресу 064h). Перед посылкой команды необходимо убедиться в готовности контроллера к ее приему — бит 1 порта 64h должен иметь нулевое значение. Подробно команды контроллера описаны в литературе [2, 8]. Контрол¬леры клавиатуры различаются версиями встроенного ПО, поэтому замена кон¬троллера другим, с отличающейся версией ПО (КВС BIOS), может оказаться проб-лематичной — микросхема BIOS системной платы должна знать особенности контроллера клавиатуры.
8.1.3. Системная поддержка и программный интерфейс
Клавиатура имеет системную поддержку на уровне BIOS — обработку фактов нажатия и отпускания клавиш и обеспечение сервисов ввода символов с клавиату¬ры, а также управления ее параметрами (задержка и частота автоповтора) и инди¬каторами. Коды, принятые от клавиатуры ее контроллером, считываются и обра-

316
Глава 8. Специализированные интерфейсы периферийных устройств
батываются обработчиком аппаратного прерывания IRQ1 (вектор 09h). Результат обработки помещается в клавиатурный буфер, из которого по программному пре¬рыванию Int 16h этот результат для дальнейшей обработки может быть извле¬чен значительно позже. Нажатие «системной» комбинации Ctrl+Alt+Del, клавиши PrintScreen (SysRq) и некоторых других к записи в клавиатурный буфер не приво¬дит, а вызывает специальные процедуры. Прикладной программе, для которой требуется нестандартное использование клавиатуры (например, в качестве музы¬кальной), придется самой заниматься обработкой аппаратного прерывания IRQ1, перехватывая вектор Int 09h.

Hosted by uCoz