Post Reply 
HP-10C synthetic programming (nothing useful)
12-14-2022, 04:48 PM
Post: #1
HP-10C synthetic programming (nothing useful)
I've been studying the HP-10C microcode. In general the HP-10C microcode is most closely related to the HP-12C, with the obvious differences that the HP-10C doesn't contain the TVM and other financial functions, and adds the trigonometric and base 10 logarithm and exponential functions. It is very dissimilar to the HP-11C microcode, which I might naively have thought it would resemble. In hindsight, given that the HP-10C uses the same programming model as the HP-12C, with no insert/delete of program steps, no subroutines, and no labels, it is obvious why HP would have used the HP-12C firmware as a base for development of the HP-10C.

The 10C uses only 4K words of ROM, out of the 6K of ROM available in the R2D2 chips, and also doesn't use all of the RAM registers provided by the R2D2. In principle, HP could have made a reduced memory size version of the R2D2 chip, but there never would have been enough manufacturing volume to justify doing so. Aside from any cost differences due to manufacturing quantity, the production cost should have been exactly the same as that of the 11C, 12C, and 16C. It was deliberately defeatured as compared to the 11C, and priced lower, as product positioning.

There are 24 unused instruction codes. None of them appear to be useful in any way, and there is no known way to get them into a user program.

0x80 to 0x89 and 0x90 to 0x99 show as GTO 80 through GTO 99, and appear to actually execute as such, though steps 80 through 99 never exist, so they always result in Error 4.

The other four unused codes display and execute as random artifacts, and unsurprisingly don't do anything useful. They jump to unintended points in the code, and usually produce an error display, but could potentially corrupt memory.

0xcf displays with keycode 16, which is CHS, though it doesn't perform a CHS. There's a hole in an internal table that stores information for instruction codes 0xa0 through 0xd5, and a microcode two-word goto instruction was put in that hole. The second word is 0x016, which is used as the displayed keycode.

0xd5 displays with keycode "rE", using the two microcode instructions that follow the end of the table as a table entry. The second word is 0xae, and the display characters for hex a and e are "r" and "E".

0xd6 and 0xd7 display as keycodes "44 11P0" and "44 11P1". They do not come from the same table that's used for 0xa0 through 0xd5. There is a comparison and branch in the microcode that decodes the instructions, and 0xd6 and 0xd7 end up in a code path that is intended fro the STO arithmetic instructions which are 0xd8 though 0xff. However, since 0xd6 and 0xd7 are below that range, they turn into negative offsets. I haven't determined how the "11P0" and "11P1" come about.

The full 10C instruction table may be found at http://www.brouhaha.com/~eric/hpcalc/hp1...table.html
Find all posts by this user
Quote this message in a reply
12-15-2022, 12:16 AM
Post: #2
RE: HP-10C synthetic programming (nothing useful)
Interesting stuff. Still things to learn from all those years ago!

Thanks, Eric !
Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: 1 Guest(s)