Contributed by Claus Buchholz

The TI-55 shares some memory between registers and program steps, similarly to the TI-58/9 but without partitions. Steps 17 through 23 make up the fourteen digits (one digit for both signs, eleven for the mantissa, and two exponent digits) of register 9. Steps 25 through 31 constitute register 8.

The TI-58/9 uses the same BCD codes for program steps and for register digits but that is not so with the TI-55. For example, enter keycodes 01 and 85 (keys 1 and =) into program steps 17 and 18, exit learn mode, and recall register 9. You see 1.57 instead of 1.85. Try other keycodes in step 18 and you build the following table:

    Key Column
    1 2 3 4 5 6 7 8 9 0

K
e
y

R
o
w

1   20 30 40 50 18 28 38 48 58
2 11 21 31 41 51 19 29 39 49 59
3 12 22 32 42 52 20 30 40 50 60
4 13 23 33 43 53 21 31 41 51 61
5 14       54 22 32 42 52 62
6 15       55 23 33 43 53 63
7 16       56 24 34 44 54 64
8 17   37 47 57 25 35 45 55 65
0 01 02 03 04 05 06 07 08 09 00

The TI-55 is translating keycodes into different codes before storing them in memory. We will call these internal codes "opcodes." The table above has a pattern but with some confusing repetition, shown in italics. You can use a second method to compare keycodes with opcodes: Store 1.42 into register 9 and then examine program step 18 to find 34. This verifies that opcode 42 equates to keycode 34, not to 58. Try other numbers and you find that all the italicized opcodes are not true.

There is no requirement that internal opcodes must be BCD. If we allow non-BCD opcodes, then the pattern in the table makes more sense. If keycode 36 is really opcode 1A (written here in hexadecimal form) then the TI-55 would display it as a decimal: 10+A = 10+10 = 20. Likewise, opcode 5F would display as 50+F = 50+15 = 65. Replace the italics with hexadecimal opcodes and the table's pattern becomes clear. Some more experimentation also reveals alternate opcodes for the number keys. The table becomes:

    Key Column
    1 2 3 4 5 6 7 8 9 0

K
e
y

R
o
w

1 10 20 30 40 50 18 28 38 48 58
2 11 21 31 41 51 19 29 39 49 59
3 12 22 32 42 52 1A 2A 3A 4A 5A
4 13 23 33 43 53 1B 2B 3B 4B 5B
5 14 24 34 44 54 1C 2C 3C 4C 5C
6 15 25 35 45 55 1D 2D 3D 4D 5D
7 16 26 36 46 56 1E 2E 3E 4E 5E
8 17 27 37 47 57 1F 2F 3F 4F 5F
0 01 02 03 04 05 06 07 08 09 00

Perhaps these binary opcodes are the native codes used for internal operations. They may also be a way to save ROM space. A table in ROM indexed by BCD keycodes would be larger than one indexed by straight binary opcodes.

The table shows that it is not possible to write opcodes of many 2nd functions such as R/S and RST into register 8 or 9, simply because they are not BCD values. However, you can write BCD opcodes greater than 5F which do not correspond to any keycodes in the table. Forty extra opcodes can be explored. I found that four of them, when executed, cause entry of letters into the display! The table below shows twelve opcodes corresponding to the numeric keypad and operation keys. Nine extra opcodes correspond to a virtual extension of the keypad, including the letters A, b, C, and d:

    Opcode
    2n 3n 4n 5n 6n 7n 8n

n

4 7 8 9 × b C d
5 4 5 6 - 8 9 A
6 1 2 3 + 5 6 7

Try this: Press Clear All. Then store 1.856474 into register 8. Press R/S and see the display flash 1AbC000. Press = and see the entry change to 2122000. The letters were true hexadecimal digits and their excess values carried into the next digits! You might think by extrapolation that either opcode 94 or 63 would enter the letter E and 73 would give F. No such luck. I have not found a way to enter those hex digits.

When my kids show off their fancy TI-30XIIB or TI-84+Silver, I just turn on the old TI-55 and enter 5.054704 EE 84 STO 8 8.485 EE 77 SUM 8 R/S.

Claus Buchholz
Michigan, USA