Программирование нажатия клавиш
Программирование нажатий клавиш описывает особый способ программирования, при котором каждое нажатие клавиши на устройстве или приложении каким-либо образом записывается, а затем воспроизводится, так что записанные нажатия клавиш можно повторить несколько раз. Программирование нажатий клавиш чаще всего, но не исключительно, встречается в программируемых калькуляторах , но существуют и программные приложения, программируемые нажатиями клавиш, например Vim (текстовый редактор). [1]
Пример: Калькуляторы TI
[ редактировать ]Калькуляторы Texas Instruments TI-58 / TI-58C / TI-59 были программируемыми, а хранилище программ имело форму последовательности кодов, которые (в основном) соответствовали положению клавиш на клавиатуре калькулятора. Вот упрощенная схема основного расположения клавиш:
х 1 | х 2 | х 3 | х 4 | х 5 | |
---|---|---|---|---|---|
1 х | А | Б | С | Д | И |
22x | 2-й | ИНВ | пер х | ЭТОТ | среда CLR |
33x | ЛРН | x⇌t | х 2 | √ x | 1/х |
44x | ССТ | ЧТО | РКЛ | СУММА | и х |
55x | летнее время | ЭЭ | ( | ) | ÷ |
66x | ГТО | 7 | 8 | 9 | × |
77x | См. | 4 | 5 | 6 | - |
8 х | РСТ | 1 | 2 | 3 | + |
99x | Р/С | 0 | . | +/- | = |
Каждой клавише присвоен двухзначный код; для большинства (но не всех) ключей цифра десятков происходит от номера строки (как указано в левой части таблицы), а цифра единиц — от номера столбца (как указано в верхней части таблицы).
Теперь рассмотрим очень простую программу, которая добавляет 2 к отображаемому числу, а затем останавливается. Вход в программу начинается с позиции программы 000 и выглядит следующим образом:
Расположение | Содержание | Значение | Комментарии |
---|---|---|---|
000 | 85 | + | |
001 | 02 | 2 | |
002 | 95 | = | вычислить результат |
003 | 91 | Р/С | остановить программу |
Чтобы использовать эту программу, вы должны ввести номер n , с которым нужно работать, нажать RST, чтобы убедиться, что текущая позиция программы равна 000, а затем R/S , чтобы начать выполнение. Когда программа остановится (что должно произойти довольно быстро для такой простой программы), на дисплее отобразится число n + 2.
Вы можете видеть, что коды 85, 95 и 91 соответствуют позициям клавиш, отмеченных + , = и R/S на сетке выше, но код для 2 — это не 83, как можно было бы ожидать, судя по положению сетки, а 02. Последний код был выбран для того, чтобы его было легче понять человеку, пытающемуся прочитать программу. 00..09 используются для обозначения ключей 0..9 Строки 0 нет, поэтому коды .
Контекстно-зависимые интерпретации
[ редактировать ]Эти калькуляторы TI позволяли адресовать до 100 ячеек памяти данных с номерами от 00 до 99 (некоторые модели имели более низкий предел). Последовательность нажатий клавиш, такая как STO 4 2 (сохранение отображаемого в данный момент номера в памяти 42), будет закодирована как 42 42. В этом случае первая цифра 42 является кодом клавиши STO , а вторая цифра 42 не является кодом клавиши. а номер регистра памяти. Калькулятор знает, как это интерпретировать, потому что это то, что должно следовать за кодом клавиши STO .
Адреса программ были трехзначными, что потенциально позволяло программам состоять из до 1000 шагов, пронумерованных от 000 до 999 (хотя на самом деле ни одна из выпущенных моделей не допускала такого максимума). Команда ветвления, например GTO 3 4 5 (безусловный переход к ячейке 345), будет закодирована как 61 03 45. В этом случае цифра сотен пункта назначения ветвления находится в цифре единиц второго байта инструкции (после кода операции). , с нулевой цифрой десятков; а остальные цифры находятся в третьем байте инструкции.
С другой стороны, кодовая последовательность типа 61 11 представляет собой нажатие клавиши GTO A которое является ветвью к месту, отмеченному символической меткой A. , Калькулятор может определить, что это символическая ветвь, а не ветвь к пронумерованному месту, поскольку разряд десятков байта, следующий сразу за кодом операции, не равен нулю.
Большинство клавиш клавиатуры можно использовать в качестве символических надписей. Например, такие последовательности, как GTO STO и GTO GTO, являются допустимыми при условии, что STO и GTO фактически определены как метки где-то в программе.
Ключи-модификаторы
[ редактировать ]Большинство клавиш имели несколько функций, в зависимости от того, INV или 2nd была ли предварительно нажата . INV вызывала «обратную» (что бы это ни значило) следующую функцию и записывалась в программе как отдельное нажатие клавиши (код 22), в то время как вторая вызывала совершенно другую функцию, которая была написана на лицевой панели клавиатуры чуть выше клавиши. Например, нажав 2-й x 2 вызвал функцию sin , а INV 2nd x 2 (или INV sin ) дал вам арксинус.
Код этой альтернативной функции получается из кода исходной ключевой функции путем добавления 5 к разряду единиц ( без переноса на разряд десятков). Таким образом, коды клавиш, соответствующие положению самой 2-й клавиши (21 и 26), никогда не используются в качестве кодов операций. Вот таблица кодов, созданных со вторым префиксом:
х 6 | х 7 | х 8 | х 9 | х 0 | |
---|---|---|---|---|---|
1 х | А' | Б' | С' | Д' | И' |
22x | ИНВ | бревно | КП | среда CLR | |
33x | Пгм | P→R | грех | потому что | загар |
44x | Инс | CM | Отлично | Прд | В |
55x | Принадлежащий | анг | Исправить | Int | |х| |
66x | Пауза | х=т | Нет | На | Ты |
77x | LBL | x≥t | Σx | среднее (х) | Рад |
8 х | Санкт-Флг | Если флаг | D.MS | п | Степень |
99x | Писать | Дсз | Реклама | Прт | Список |
Объединенные нажатия клавиш
[ редактировать ]Ключ Ind допускает косвенность: везде, где разрешена ссылка на регистр памяти или местоположение программы, этот ключ можно использовать для получения фактического значения из регистра памяти. Например, последовательность ключей RCL Ind 1 0 означает выборку значения из регистра памяти 10 и использование этого значения, в свою очередь, в качестве номера регистра памяти, содержимое которого должно быть выбрано в качестве текущего операнда. Однако в этом случае Ind не может быть закодирован как код 40, поскольку кодовая последовательность 43 40 будет интерпретироваться как RCL 4 0 , а не RCL Ind .
Но из-за использования кодов 00...09 для клавиш 0 ... 9 коды 62-64, 72-74, 82-84 и 92 доступны для других применений. Таким образом, большинство из них перераспределяются для представления op Ind последовательностей :
х 2 | х 3 | х 4 | |
---|---|---|---|
66x | Pgm Индий | Exc Индийский | Прд Инд |
77x | СТО Индий | RCL Индия | СУММА Инд. |
8 х | ГТО Индий | оператор Индийский | |
99x | ИНВ СБР |
Таким образом, последовательность ключей RCL Ind 1 0 будет закодирована как 73 10.
Обратите внимание на использование кода 92 для INV SBR (возврат из подпрограммы); в этом не было необходимости по причинам двусмысленности, но это было сделано для экономии места при такой общей последовательности.
См. также
[ редактировать ]- Программирование нажатия клавиш FOCAL
- Устройство записи макросов
- Программирование путем демонстрации