Системное программное обеспечение персональных ЭВМ


7.1. Прерывание от клавиатуры и скан-коды



7.1. Прерывание от клавиатуры и скан-коды

Работа клавиатуры организована на базе собственного микропроцессора. При нажатии или отпускании любой клавиши генерируется код (скан-код), который записывается в собственную память (аппаратный буфер) клавиатуры. При этом в центральный процессор выдается прерывание 9, сигнализирующее о появлении очередного скан-кода. Программа обработки этого прерывания может теперь прочитать код из клавиатуры. Если она этого не сделает, то сканкоды будут накапливаться в аппаратном буфере и могут быть прочитаны позднее. Чтение скан-кода производится из однобайтного порта 0x60. При выполнении только чтения скан-код не удаляется из аппаратного буфера, и при следующем обращении к порту 0x60 будет прочитан тот же скан-код. Для того, чтобы удалить скан-код из аппаратного буфера, необходимо послать в клавиатуру сигнал подтверждения: на короткое время выставить единицу в старшем разряде однобайтного порта 0 x61 (не разрушая при этом остальных разрядов этого порта). Каждая клавиша имеет собственный уникальный скан-код, в том числе и на 101-клавишной клавиатуре AT, где некоторые клавиши дублируются - например, левая и правая клавиши Shift имеют разные скан-коды. Распределение значений скан-кодов примерно соответствует расположению клавиш на панели клавиатуры. Скан-коды не совпадают с кодировкой внутримашинного представления символов, для которой применяется код ASCII. Преобразование скан-кодов в коды ASCII происходит программными путем. В некоторых источниках имеются расплывчатые формулировки, которые можно трактовать таким образом, что некоторые клавиши или комбинации клавиш (PrintScrn, Ctrl +Break, etc) не имеют скан-кодов - это ни в коем случае не так! Каждая клавиша имеет скан-код, который считывается в компьютер вышеописанным образом, а уж программа обработки этого кода может распорядиться им специальным образом.

Выше упоминалось, что скан-код генерируется и при нажатии, и при отпускании клавиши. Для 84-клавишной клавиатуры XT скан-код отпускания совпадает со скан-кодом нажатия, но содержит дополнительную единицу в старшем разряде.


- Начало -  - Назад -  - Вперед -