Программирование нажатия клавиш описывает особый способ программирования, при котором каждое нажатие клавиши на устройстве или приложении каким-либо образом записывается и затем воспроизводится, так что записанные нажатия клавиш могут повторяться несколько раз. Программирование нажатием клавиш чаще всего, но не исключительно, встречается в программируемых калькуляторах , но существуют программные приложения, программируемые нажатием клавиш, например, Vim (текстовый редактор) [1]
Пример: калькуляторы TI
Калькуляторы Texas Instruments TI-58 / TI-58C / TI-59 были программируемыми, а хранение программ имело форму последовательности кодов, которая (в основном) соответствовала положению клавиш на клавиатуре калькулятора. Вот упрощенная схема базовой раскладки клавиш:
х 1 | х 2 | х 3 | х 4 | х 5 | |
---|---|---|---|---|---|
1 х | А | B | C | D | E |
2 х | 2-й | INV | ln x | CE | CLR |
3 х | LRN | x⇌t | x² | √ х | 1 / х |
4 х | SST | СТО | RCL | СУММ | у х |
5 х | BST | EE | ( | ) | ÷ |
6 х | GTO | 7 | 8 | 9 | × |
7 х | SBR | 4 | 5 | 6 | - |
8 х | RST | 1 | 2 | 3 | + |
9 х | R / S | 0 | . | +/- | знак равно |
Каждой клавише присвоен двузначный код; для большинства (но не для всех) клавиш цифра десятков берется из номера строки (как указано в левой части таблицы), а цифра единиц - из номера столбца (как указано в верхней части таблицы).
Теперь рассмотрим очень простую программу, которая добавляет 2 к отображаемому числу, а затем останавливается. Программа вводится, начиная с ячейки программы 000, и выглядит так:
Место расположения | СОДЕРЖАНИЕ | Имея в виду | Комментарии |
---|---|---|---|
000 | 85 | + | |
001 | 02 | 2 | |
002 | 95 | знак равно | вычислить результат |
003 | 91 | R / S | остановить программу |
Чтобы использовать эту программу, вы должны ввести номер n, над которым будет работать, нажмите RST, чтобы убедиться, что текущая позиция программы была 000, затем R / S, чтобы начать выполнение. Когда программа останавливается (что должно произойти довольно быстро для такой простой программы), на дисплее будет отображаться число n + 2.
Вы можете видеть, что коды 85, 95 и 91 соответствуют положениям клавиш, помеченных + , = и R / S в сетке выше, но код для 2 не 83, как можно было бы ожидать от положения сетки, а 02. Этот последний код был выбран для более легкого понимания человеком, пытающимся прочитать программу. Строки 0 отсутствуют, поэтому коды 00 .. 09 используются для обозначения клавиш 0 .. 9 .
Контекстно-зависимые интерпретации
Эти калькуляторы 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 . Калькулятор может сказать, что это символическая ветвь, а не ветвь к пронумерованному месту, потому что цифра десятков байта, следующего сразу за кодом операции, не равна нулю.
Большинство клавиш на клавиатуре можно использовать как символические метки. Например, такие последовательности, как GTO STO и GTO GTO, являются допустимыми при условии, что STO и GTO фактически определены как метки где-то в программе.
Клавиши-модификаторы
У большинства клавиш было несколько функций, в зависимости от того, была ли нажата заранее INV или 2nd . INV вызвал «инверсию» (что бы это ни значило) следующей функции и был записан в программе как отдельное нажатие клавиши (код 22), в то время как 2nd вызвал совершенно другую функцию, которая была написана на лицевой панели клавиатуры чуть выше клавиши. Например, нажатие 2nd x² вызывает функцию sin , а INV 2nd x² (или INV sin ) дает вам арксинус.
Код для этой альтернативной функции получается из кода исходной ключевой функции путем добавления 5 к разряду единиц ( без переноса к разряду десятков). Таким образом, коды клавиш, соответствующие положению самой 2-й клавиши (21 и 26), никогда не используются в качестве кодов операций. Вот таблица кодов со вторым префиксом:
х 6 | х 7 | х 8 | х 9 | х 0 | |
---|---|---|---|---|---|
1 х | A´ | B´ | C´ | D´ | E´ |
2 х | INV | бревно | CP | CLR | |
3 х | ПГМ | P → R | грех | потому что | загар |
4 х | Ins | CM | Отл | Prd | Ind |
5 х | Del | Англ. | Исправить | Int | | x | |
6 х | Пауза | х = т | Нет | Op | Град |
7 х | Фунт | x≥t | ∑x | среднее (х) | Рад |
8 х | St flg | Если flg | D.MS | π | Град |
9 х | Писать | Dsz | Adv | Prt | Список |
Объединенные нажатия клавиш
Пром ключ позволяет косвенность: везде , где ссылка на регистр памяти или места программы допускается, этот ключ может быть использован для извлечения фактического значения из регистра памяти. Например, последовательность клавиш 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 | |
---|---|---|---|
6 х | Pgm Ind | Отл. Ind | Prd Ind |
7 х | СТО Инд | RCL Ind | SUM Ind |
8 х | GTO Ind | Op Ind | |
9 х | INV SBR |
Таким образом, последовательность ключей RCL Ind 1 0 будет закодирована как 73 10.
Обратите внимание на использование кода 92 для INV SBR (возврат из подпрограммы); в этом не было необходимости из-за двусмысленности, но было сделано для экономии места с такой общей последовательностью.