Francois Roulet recently sent me a listing showing the startup sequence for the HP-55. It has a certain elegance to it and, as I believe Francois supports the sharing of knowledge, I’m including and discussing it here.
Here’s a copy of Francois’ HP-55 startup listing.
The listing is from his classic series HP-55 emulator and that uses decimal values consistently throughout, so don’t get confused if you see addresses with digits outside 0-7. I’ve chosen to use octal in most of my articles because it is easier to see goto destinations when delayed / rom / group select instructions are involved. That said, there are certain Woodstock instructions where hexadecimal would have been a better choice so, as with most things, there are trade-offs involved. Decimal has its own set of pluses and minus and is a better choice in some circumstances.
I was going to (did) go through each of the steps in the listing and explain what’s happening. However, summarizing the loops only served to make them less obvious than the original repetitions. You’ll probably find it easier to follow the original listing.
Some hints though:
1. The process is: clear status, clear regs (A-F,M), clear ram[0..9], clear ram[10..19], clear ram[20..29], create seven “GTO 00” instructions in a register, store those in ram[23..29], then setup FIX 2 and display “0.00”.
2. Setting C[0]=1 (steps 152/153) sets up 2-digit ram addresses, so it can access anything from 00 to 29.
3. Steps 159-167 are a loop that repeats for 0..9 (eg ram[00..09], ram[10..19], etc) and exits when the 9 overflows to 0 again.
4. “clear regs” already zeroed the stack (X,Y,Z,T are “CPU” registers C,D,E,F) so step 162 isn’t really needed.
5. Steps 10-16 could have been better done by setting P=13 at the start, exiting with P#0 instead of P#14, and not needing the “shiftl”. The loop with P=15 and P=14 does nothing.
6. s6 is used during startup to increment the tens digit of the ram address.
7. Steps 2150-2152 are just a delay loop prior to turning on the display (step 2153, 2167). You can tune out during those. (“2152 goto 102” is a “goto 2150” as 2152=2048+104 so 102 is two steps earlier).
8. Francois has flagged ram[20] as LastX, which it is. During startup just think of it as ram[20] during the standard loop through 10 ram registers, like all the others. Good to have it flagged though. You’ll need to know that one for later.
HP later chose to use hex code “00” for “GTO 00” or “R/S”. That makes the startup process a little shorter and leaves more ROM space for more features.