Keystroke programming
Keystroke programming describes a specific way of programming by which each keystrokes on a device or application is recorded in some way and then played back so that the recorded key-presses can be repeated multiple times. Keystroke programming is most commonly but not exclusively found in programmable calculators, but there are keystroke-programmable software applications, too, for example Vim (text editor)[1]
Example: TI Calculators
The Texas Instruments TI-58/58C/59 calculators were programmable, and program storage took the form of a sequence of codes which (mostly) corresponded to the position of keys on the calculator keypad. Here is a simplified diagram of the basic key layout:
x1 | x2 | x3 | x4 | x5 | |
1x | A | B | C | D | E |
2x | 2nd | INV | lnx | CE | CLR |
3x | LRN | x⇌t | x² | √x | 1/x |
4x | SST | STO | RCL | SUM | yx |
5x | BST | EE | ( | ) | ÷ |
6x | GTO | 7 | 8 | 9 | × |
7x | SBR | 4 | 5 | 6 | - |
8x | RST | 1 | 2 | 3 | + |
9x | R/S | 0 | . | +/- | = |
Each key is assigned a two-digit code; for most (but not all) keys, the tens digit comes from the row number (as indicated down the left of the table) and the units digit comes from the column number (as indicated across the top of the table).
Now consider a very simple program, which adds 2 to the number being displayed, and then stops. The program is entered starting from program location 000, and looks like this:
Location | Contents | Meaning | Comments |
000 | 85 | + | |
001 | 02 | 2 | |
002 | 95 | = | compute result |
003 | 91 | R/S | stop program |
To use this program, you would enter the number n to be operated on, press RST to ensure the current program location was 000, then R/S to start execution. When the program stops (which should happen quite quickly for such a simple program), the display will be showing the number n + 2.
You can see that the codes 85, 95 and 91 correspond to the positions of the keys labelled + , = and R/S on the grid above, but the code for the 2 is not 83 as you would expect from the grid position, but 02. This last code was chosen to be more easily understandable by a human trying to read the program. There is no row 0, so the codes 00 .. 09 are used to represent the keys 0 .. 9 .
Context-Dependent Interpretations
These TI calculators allowed for addressing up to 100 data memory locations, numbered 00 to 99 (some models had a lower limit than this). A keystroke sequence like STO 4 2 (store the currently-displayed number into memory 42) would be encoded as 42 42. In this case the first 42 is the key code for the STO key, but the second 42 is not a key code, but a memory register number. The calculator knows to interpret it as such because that’s what has to follow the code for the STO key.
Program addresses were 3 digits, potentially allowing programs to consist of up to 1000 steps, numbered 000 to 999 (though in fact none of the models produced allowed for this maximum). A branch instruction, for example GTO 3 4 5 (unconditional branch to location 345) would be encoded as 61 03 45. In this case the hundreds digit of the branch destination is in the units digit of the second instruction byte (after the opcode), with a zero tens digit; and the remaining digits are in the third instruction byte.
A code sequence like 61 11, on the other hand, represents the keystrokes GTO A , which is a branch to the location marked by the symbolic label A . The calculator can tell this is a symbolic branch, rather than a branch to a numbered location, because the tens digit of the byte immediately following the opcode is not zero.
Most of the keys on the keypad can be used as symbolic labels. For example, sequences like GTO STO and GTO GTO are legitimate, provided that STO and GTO have in fact been defined as labels somewhere in the program.
The “2nd” Key
TBD
Merged Keystrokes
Ind
TBD more to come