HP-55 Notes

Everything you didn’t want to know about a HP-55 …

If you flick the timer switch when the timer is operating, it will ignore you. The timer continues.

Timer mode puts two decimal points into the display. Normally, there are 14 BCD digits plus one decimal point (in FIXed or SCIentific notation) for a 15 digit display. Having two decimal points messes up some emulators. Even javascript ones that seem to be fine, can end up with 16 characters in the display area. The ones that seem to work manage to fit 16 characters within the display boundary. Those that don’t, poke out over the side. My first effort only had one of the “hundredths” digits shown. I solved that by trimming the display digits after the mantissa:

if (i==2 && dstr.length>12) dstr=dstr.substr(-12,12); // 20180331. trim L for >1 decimal points


i is 2 when it is about to output the 3 digits of the exponent (sign+2). This gives the two spaces between seconds and hundredths that is apparent in the photo in the owner’s manual. It also seems to be fine in all of the other display modes, including PRGM.

There is evidence to suggest that the HP-55 runs at 784 kHz, or more likely, one quarter of that. Articles on fitting a crystal to a HP-45 talk about using a 784 kHz crystal and some talk about getting one of those from a dead HP-55. 784 kHz / 56 bits per bus / opcode / display cycle = exactly 14000 op codes per second. 3500 (divide by 4) is more consistent with what I’ve seen for the HP-67 (“about 3000 instructions per second” per the card reader article in HPJ).

When the HP-55 timer is running, you can see the hundredths of a second increment at 05652. There are 35 instructions in a loop back to the next increment. That also suggests that (35 instructions for 1/100 of a second) there are 3500 instructions per second.

The X value spends most of its time in the M register rather than the C register.

LastX is in ram[20]

STO . 0 through STO . 9 are in ram[00-09]

STO 0 through STO 9 are in ram[10-19]

Program memory is 7 registers (7 steps per register x 7 registers = 49 steps) in ram[23-29].

Source code includes a comment that the M register, when it isn’t holding X, contains:
M= 00000abc0nn000, where
a= FIX/SCI
b= digits
c= DEG/RAD/GRD
nn= step

The values appear to be:
a: 0=FIX, 1=SCI
b: 0-9 for FIX 0-9 or SCI 0-9
c: 0=DEG, 1=RAD, 9=GRD
nn: 00-49 for program step 00-49

M[11] and M[10] appear to be used. These were both 1 when I looked.
When the X value is in M, the M value is usually in C.

Program step 01 is stored in ram[23][1,0].
Program step 49 is stored in ram[29][13,12].
The most significant digit is stored on the left (eg “02” might get stored as “99029999999999”).

The wait loop (in RUN mode) is 04170-04261. Only 15 instructions are executed if nothing is happening. Exits exist for s0=1 (key press), s5=1 (?) s11=1 (to timer mode) s3=1 (to prgm mode) s8=1 (?)

An error (eg 0 1/x or 5 CHS sqrt) flashes the display. If the emulator timing is correct it will be a noticeable flash. If the timing is too fast it might be noticeable as a flicker, if at all.

A HP-55 ROM listing was created from an address and octal instruction listing (.obj) in nonpareil.

You can try my experimental HP-55 emulator running at 3500 ops/sec. There may be bugs.

to be continued …

It's only fair to share...Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInShare on StumbleUponDigg thisPin on PinterestEmail this to someone

Leave a Reply

Your email address will not be published. Required fields are marked *