Обслуживание клавиатуры

10/04/94 09:52pm klaviat.lek
П.Нортон, Р.Уилтон "IBM PC и PS/2 руководство по программированию" перевод В.Н.Григорьева М "Радио и связь" 1994
Роберт Журден "Справочник программиста на компьютере фирмы IBM"

Клавиатура

Клавиатура IBM/PC имела 83 клавиши. Для PC/AT была изготовлена клавиатура с 84 клавишами (добавилась клавиша Sys Reg и дополнительное цифровое поле было отделено от основного. На машинах серии PS/2 используется 101/102 клавишный вариант. Последняя клавиатура, познее, стала стандартной для всех IBM - совместимых компьютеров.

Обслуживанием клавишного набора занимается специализированная микро-ЭВМ, расположенная внутри корпуса клавиатуры. Связь компьютера с клавиатурой осуществляется по 5-жильному кабелю в последовательном коде.

Сканируемые коды.

При каждом изменении состояния клавиш, клавиатура посылает в компьютер последовательность 8-битовых чисел. У большинства клавиш код сканирования однобайтовый. При нажатии генерируется число, 7 младших битов которого содержат номер клавиши а старший равен 0; при отпускании значение младших битов повторяется, а старший равен 1. Если речь идет о AT - клавиатуре, то в обоих случаях генерируетсся один и тот же код, но при отпускании он предваряется кодом F0h. Программа, выполняющая обработку сканируемых кодов, долна знать какая клавиатура используется.

На клавиатуре имеются повторяющиеся клавиши ини формируют РАЗНЫЕ скан-коды!

Связь с ROM BIOS.

При поступлении скан-кода в контроллер клавиатуры он генерирует прерывание 09h, и управление передается BIOS. Обработчик прерывания транслирует полученный код в двухбайтовое значение: младший байт содержит код ASCII, соответствующий нажатой клавише; старший - обычно исходный сканируемый код.

Если нажата специальная клавиша (функциональная или дополнительная цифровая), то младший байт равен 0. Созданные пары помещаются в очередь с адреса 0040:001Eh (длина буфера 32 байта). Голова очереди 0040:001Ah; хвост - 0040:001Ch (двухбайтовые величины).

Клавиши - переключатели.

Клавиши переключения регистров обрабатываются отдельно. Для хранения информации об их состоянии отведено два байта в области данных BIOS.

Пользователь может влиять на генерацию ASCII кодов, программно изменяя значения статусных байтов.

Байт 0040:0017h (1 - активное состояние):

Байт 0040:0018h:

Клавиатуры позволяют вводить любые коды в их десятичном представлении. Для этого необходимо нажать клавишу Alt и удерживая ее набрать требуемое значение на дополнительном цифровом поле, передача кода в ЭВМ осуществляется при отпускании Alt.

С работой клавиатуры связано несколько прерываний:


Stay-at-home