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 - активное состояние):
7 Состояние Insert - обычно каждая программа реальзует вставку сама;
6 Caps Lock - символы становятся прописными по умолчанию;
5 Num Lock - принудительная установка цифрового режима;
4 Scroll Lock;
3 Нажата клавиша Alt;
2 Нажата клавиша Ctrl;
1 Нажата левая клавиша Shift;
0 Нажата правая клавиша Shift;
Байт 0040:0018h:
7 Нажата клавиша Ins;
6 Нажата клавиша Caps Lock;
5 Нажата клавиша Num Lock;
4 Нажата клавиша Scroll Lock;
3 Активно состояние "останов" - была нажата Pause;
2 Нажата клавиша Sys Reg;
1 Нажата левая клавиша Alt;
0 Нажата левая клавиша Ctrl.
Клавиатуры позволяют вводить любые коды в их десятичном представлении. Для этого необходимо нажать клавишу Alt и удерживая ее набрать требуемое значение на дополнительном цифровом поле, передача кода в ЭВМ осуществляется при отпускании Alt.
С работой клавиатуры связано несколько прерываний:
09h аппаратное при поступлении скан-кода из клавиатуры;
16h программное для получения кода нажатой клавиши;
1Bh программное если ROM BIOS обнаружил Ctrl-Break;
23h программное если DOS обнаружил Ctrl-Break