Глава 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 бит. Установлен при С-курсоре