Программирование нажатием клавиш

Программирование нажатий клавиш описывает определенный способ программирования, при котором каждое нажатие клавиши на устройстве или в приложении каким-то образом записывается, а затем воспроизводится, так что записанные нажатия клавиш могут быть повторены несколько раз. Программирование нажатий клавиш чаще всего встречается в программируемых калькуляторах , но не исключительно, но существуют также программируемые нажатия клавиш приложения, например Vim (текстовый редактор) [1]

Пример: Калькуляторы TI

TI-58C

Калькуляторы 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 и выглядит следующим образом:

РасположениеСодержаниеЗначениеКомментарии
00085+
001022
00295=вычислить результат
00391Р/Состановить программу

Чтобы использовать эту программу, вам нужно ввести число 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 (возврат из подпрограммы); это не было необходимо из-за неоднозначности, а было сделано для экономии места при такой общей последовательности.

Смотрите также

Ссылки

  1. ^ «Документация Vim: Повторить».
Взято с "https://en.wikipedia.org/w/index.php?title=Программирование_нажатий_клавиш&oldid=1099281747"