Программирование нажатий клавиш описывает определенный способ программирования, при котором каждое нажатие клавиши на устройстве или в приложении каким-то образом записывается, а затем воспроизводится, так что записанные нажатия клавиш могут быть повторены несколько раз. Программирование нажатий клавиш чаще всего встречается в программируемых калькуляторах , но не исключительно, но существуют также программируемые нажатия клавиш приложения, например Vim (текстовый редактор) [1]
Калькуляторы Texas Instruments TI-58 / TI-58C / TI-59 были программируемыми, и хранение программ принимало форму последовательности кодов, которые (в основном) соответствовали положению клавиш на клавиатуре калькулятора. Вот упрощенная схема базовой раскладки клавиш:
х 1 | х 2 | х 3 | х 4 | х 5 | |
---|---|---|---|---|---|
1 х | А | Б | С | Д | Э |
2 х | 2-й | ИНВ | ln x | СЕ | КЛР |
3 х | ЛРН | х⇌т | х 2 | √ х | 1/х |
4 х | ССТ | СТО | РКЛ | СУММА | у х |
5 х | БСТ | ЭЭ | ( | ) | ÷ |
6 х | ГТО | 7 | 8 | 9 | × |
7 х | СБР | 4 | 5 | 6 | - |
8 х | РСТ | 1 | 2 | 3 | + |
9 х | Р/С | 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. Этот последний код был выбран для того, чтобы его было легче понять человеку, пытающемуся прочитать программу. Строки 0 нет, поэтому коды 00 .. 09 используются для представления клавиш 0 .. 9 .
Эти калькуляторы TI позволяли адресовать до 100 ячеек памяти данных, пронумерованных от 00 до 99 (некоторые модели имели меньший предел, чем этот). Последовательность нажатий клавиш, например STO 4 2 (сохранить отображаемое в данный момент число в памяти 42), будет закодирована как 42 42. В этом случае первые 42 являются кодом клавиши для клавиши STO , но вторые 42 не являются кодом клавиши, а номером регистра памяти. Калькулятор знает, что его нужно интерпретировать как таковой, потому что это то, что должно следовать за кодом клавиши STO .
Адреса программ состояли из 3 цифр, что потенциально позволяло программам состоять из 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), тогда как 2nd вызывала совершенно другую функцию, которая была написана на лицевой панели клавиатуры прямо над клавишей. Например, нажатие 2nd x 2 вызывало функцию sin , тогда как INV 2nd x 2 (или INV sin ) давало вам арксинус.
Код для этой альтернативной функции получается из кода исходной функции клавиши путем добавления 5 к цифре единиц ( без переноса в цифру десятков). Таким образом, коды клавиш, соответствующие положению самой 2-й клавиши (21 и 26), никогда не используются в качестве кодов операций. Вот таблица кодов, полученных с 2-м префиксом:
х 6 | х 7 | х 8 | х 9 | х 0 | |
---|---|---|---|---|---|
1 х | А' | Б' | С' | Д' | Э' |
2 х | ИНВ | бревно | КП | КЛР | |
3 х | ПГМ | П→Р | грех | потому что | загар |
4 х | Инс | CM-менеджеры | Экск | Прд | Инд |
5 х | Дель | анг | Исправить | Инт | |х| |
6 х | Пауза | х=т | Нет | Оп | Градус |
7 х | Lbl | х≥т | Σx | среднее(х) | Рад |
8 х | St flg | Если флг | Д.М.С. | π | Град |
9 х | Писать | Дсз | Adv | Прт | Список |
Клавиша 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 | |
---|---|---|---|
6 х | Pgm Инд | Экск Инд | Прд Инд |
7 х | СТО Инд | RCL Инд | СУММА Инд. |
8 х | GTO Инд | Оп Инд | |
9 х | ИНВ СБР |
Таким образом, последовательность ключей RCL Ind 1 0 будет закодирована как 73 10.
Обратите внимание на использование кода 92 для INV SBR (возврат из подпрограммы); это не было необходимо из-за неоднозначности, а было сделано для экономии места при такой общей последовательности.