Глава 6.
Основы работы с клавиатурой
В этой главе речь идет в основном о стандартной клавиа-
туре, хотя в тексте и будут встречаться некоторые коммента-
рии, касающиеся клавиатуры Спектрум+. Мы не будем рассматри-
вать специальные модели клавиатуры, такие как МС 5007 с
контроллером. В большинстве случаев всякие нестандартные
клавиатуры достаточно точно эмулируют стандартную клавиату-
ру.
В первой части этой главы объясняется, как происходит
взаимодействие с клавиатурой на аппаратном и программном
уровнях. Во второй части этой главы объясняется, как BIOS об-
рабатывает информацию, получаемую с клавиатуры, и делает ее
доступной для наших программ. Если вы намерены подробно уз-
нать о работе клавиатуры, то рекомендую сначала прочитать
эту главу. Один из достойных примеров использования этой ин-
формации — это написание своего драйвера клавиатуры, который
бы модифицировал работу клавиатуры, подобно тому, как это
сделано в моей программе Q-DOS.
6.1 Работа клавиатуры
Клавиатура Спектрума не содержит специальных микросхем,
которые выполняли бы часть рутинной работы. Когда клавиш на-
жата, соответствующий бит соответствующего порта сбрасывает-
ся. Всего существует 8 портов, которые контролируют 40 кла-
виш. Один порт контролирует, таким образом, 5 клавиш.
Когда мы нажимаем на клавиши, клавиатура ничего не знает
о значении нажимаемых клавиш, она просто отмечает о происхо-
дящих действиях.
6.2 Связь с компьютером
Каждый раз, когда нажимается или отпускается какая-ни-
будь клавиша на клавиатуре, изменяется соответствующий
бит.Каждые 1/50 секунды компьютер сканирует клавиатуру, вы-
рабатывая с помощью программ ASCII-код соответствующей кла-
виши.
Сначала с помощью сканирования клавиши получает
скен-код, потом с помощью таблиц, происходит декодирование,
транслирование, архивирование, скроллирование с целью полу-
чения ASCII-кода. Работа по переводу скен-кода усложняется
тем, что клавиатура имеет несколько операций по усложнению
регистров, меняющих значение нажатых клавиш. Например, нажав
клавишу CAPS SHIFT и одновременно клавишу С, по получим про-
писную С.
Клавиши регистров и клавиши-переключатели.
В дополнение к основным клавишам SHIFT и CAPS есть еще
клавиши-переключатели, которые также влияют на механизм переключения регистров клавиатуры — клавиши GRAPHICS, EXTERN
CAPS LOCK.
Информация о состоянии регистров храниться в области
системных переменных
23617/#5C41 0 — K, L, C режимы
1 — Е режим
2 и более — G режим
23658/#5С6А бит 3 установлен — C режим
сброшен — L режим
Всякий раз, когда BIOS получает скэн-код нажатия обычной
клавиши, проверяется состояние этих режимов и после этого
вырабатывается окончательный код.
Клавиши связи
Когда подпрограммы BIOS транслируют коды, она постоянно
проверяет их на определенные комбинации, такие как
CAPS+SPACE (BREAK). Эти команды заставляют немедленно вы-
полнить определенные действия, а иногда даже не помещать код
в память
Повторение действия клавиши
На клавиатуре компьютера действия клавиши может автома-
тически повторяться. С помощью специальных подпрограмм, оп-
ределяется, как долго остается клавиша в нажатом состоянии и
если это необходимо, с заданной частотой будет генерировать
код этой клавиши. За эту функцию отвечают 2 ячейки:
23561/#5С09 Время задержки между автоповтором и нажатием кла-
виши 23562/#5С0А Частота автоповтора
Повторяющиеся клавиши
На клавиатуре Spectrum’а+ есть повторяющиеся клавиши.
Например, » можно набрать нажатием одной клавиши, а можно
нажав SYMBOL SHIFT и Р. Но нет возможность определить, какая
из комбинаций все-таки нажата.
6.3 Порты клавиатуры.
Ранее мы вскользь упоминали о портах клавиатуры. Узнать
нажата ли какая-нибудь клавиша можно прочитав значение из
порта #FE (254). Вся клавиатура Спектрума разбита на восемь
рядов по пять клавиш в каждом. При нажатии на клавишу сбрасы-
вается один из младших битов (D0-D4) порта в зависимости от
клавиши. На практике необходимо знать точно, какая из клавиш
нажата. Для этого следует читать данные из порта, индувиду-
ального для каждого ряда.
Адреса портов представлены ниже. Биты D0-D4 в считанном
значении указывают какая клавиша полуряда нажата — соответствующий бит будет сброшен.
Внимательные заметят, что адрес можно формировать и дру-
гим способом: младший байт всегда равен #FE (254), а в стар-
шем сбрасывается соответствующий бит.
Хранимые данные
С работой клавиатуры явно или нет связано большое число
ячеек. Приведем основные:
23556/5С04 Код нажатой клавиши без учета клавиш изменения
состояния регистра. Символьные клавиши всегда
прописные.
23560/5С08 Код последней нажатой клавиши
23658/5С6А 3 бит. Установлен при С-курсоре