As you key in a merged keycode the calculator has to remember which keys led up to this point. After all, pressing the [0] key produces very different results if it was preceded by [f], [g], [h], [STO], [RCL], [STO] [+], and so on. Here’s how it keeps track:
The “state” information (where it is up to) is stored in a combination of the S register bits and the M1[x] nibbles like this:
keys | s | m1 | notes |
GTO | 7,10,13 | 0d0 | |
GTO f | 4,6,10,13 | 0d0 | |
GTO . | 7,8,10,13 | ff0 | |
GTO . n | 7,8,10,13 | fn0 | |
GTO . n n | 7,8,10,13 | nn0 | |
GTO [0-9,A-E,(i)] | final | ||
GTO f [A-E] | final | ||
GTO . n n n | final | ||
DSP | 13 | 060 | |
DSP [0-9,(i)] | final | ||
f | 4,6,13 | 000 | |
f GSB | 7,13 | 0b0 | |
f LBL | 7,13 | 0f0 | |
f others | final | ||
f GSB [0-9,A-E,(i)] | final | ||
f LBL [0-9,A-E] | final | ||
g | 4,6,7,13 | 000 | |
g GSB f | 6,7,13 | 0a0 | |
g LBL f | 6,7,13 | 0e0 | |
g GSB f [A-E] | final | ||
g LBL f [A-E] | final | ||
g others | final | ||
STO | 4,7,13 | 090 | |
STO – | 4,7,8,13 | 0a0 | |
STO + | 4,7,8,13 | 0c0 | |
STO * | 4,7,8,13 | 0e0 | |
STO / | 4,7,8,13 | 080 | |
STO [0-9,A-E,(i)] | final | ||
STO – [0-9,(i)] | final | ||
STO + [0-9,(i)] | final | ||
STO * [0-9,(i)] | final | ||
STO / [0-9,(i)] | final | ||
RCL | 4,10,13 | 070 | |
RCL [0-9,A-E,Sum,(i)] | final | ||
h | 4,6,8,13 | 000 | |
h SF | 6,8,13 | 080 | |
h CF | 6,8,13 | 060 | |
h F? | 6,8,10,13 | 050 | |
h STI | final | ||
h RCI | final | ||
h SF [0-3] | final | ||
h CF [0-3] | final | ||
h F? [0-3] | final | ||
h others | final | ||
others | final |
When you press the [0] key it needs to check the S register and M1[x] to see what you mean.
There’s more to untangle yet but here’s a trace/listing for prefixes then [0].