Hewlett-Packard HP-97

Datasheet legend
Ab/c: Fractions calculation
AC: Alternating current
BaseN: Number base calculations
Card: Magnetic card storage
Cmem: Continuous memory
Cond: Conditional execution
Const: Scientific constants
Cplx: Complex number arithmetic
DC: Direct current
Eqlib: Equation library
Exp: Exponential/logarithmic functions
Fin: Financial functions
Grph: Graphing capability
Hyp: Hyperbolic functions
Ind: Indirect addressing
Intg: Numerical integration
Jump: Unconditional jump (GOTO)
Lbl: Program labels
LCD: Liquid Crystal Display
LED: Light-Emitting Diode
Li-ion: Lithium-ion rechargeable battery
Lreg: Linear regression (2-variable statistics)
mA: Milliamperes of current
Mtrx: Matrix support
NiCd: Nickel-Cadmium rechargeable battery
NiMH: Nickel-metal-hydrite rechargeable battery
Prnt: Printer
RTC: Real-time clock
Sdev: Standard deviation (1-variable statistics)
Solv: Equation solver
Subr: Subroutine call capability
Symb: Symbolic computing
Tape: Magnetic tape storage
Trig: Trigonometric functions
Units: Unit conversions
VAC: Volts AC
VDC: Volts DC
Years of production: 1976-1982 Display type: Numeric display  
New price: USD 750.00   Display color: Red  
    Display technology: Light-emitting diode 
Size: 8"×9"×2½" Display size: 10+2 digits
Weight: 2.5 lbs    
    Entry method: Reverse Polish Notation 
Batteries: 4×"SubC" NiCd Advanced functions: Trig Exp Prnt Card 
External power: HP-82059 adapter (8VAC 3W)   Memory functions: +/-/×/÷ 
I/O:      
    Programming model: Fully-merged keystroke entry 
Precision: 10 digits Program functions: Jump Cond Subr Lbl Ind  
Memories: 26 numbers Program display: Keycode display  
Program memory: 224 program steps Program editing: Auto-insert program entry  
Chipset:   Forensic result:  

hp97.jpg (40112 bytes)Some ten years ago, a good friend of mine worked as the manager of a local flying club where I was taking flying lessons. I helped him with some computer problems there and he wanted to compensate me for my efforts. I told him that he shouldn't, but then I noticed this old, discarded HP-97 calculator collecting dust there on top of a filing cabinet, and asked him to give it to me. He happily obliged.

At home, I took the machine apart and cleaned it thoroughly. I then phoned Hewlett-Packard, and was delighted to find out that they still provided support for this model: I was able to order a new rechargeable battery, a manual, and a set of magnetic cards. When these arrived, I was able to power up the calculator, which worked perfectly.

For several years afterwards, I used the calculator and its built-in printer to help me with my tax calculations. I also wrote a couple of simple programs on it just for fun, reminding myself of the old days when calculator programming was one of the most important hobbies in my life.

Unfortunately about five years ago, the calculator's card reader began acting up, and eventually stopped working altogether. Cards weren't pulled through and when I tried, a yucky deposit appeared on them. Eventually the calculator fell into disuse.

Last year, I rediscovered this beast. Its battery was again dead of course, but to my delight, Batteries Plus rebuilt the pack professionally for a modest fee. The calculator was still working, without its card reader of course; but this time, I was determined to find out what was wrong and perhaps repair it if I can.

So I took the calculator apart and removed, then disassembled its card reader. The problem didn't take long to discover: the rubber of a wheel that is used to forward the cards through the reader (the rubber pinch wheel is what I believe it is called) has completely disintegrated. I did my best to remove all the rubber deposits from the reader, put the reader back together, and began scratching my head as to where I can find a suitable replacement for the pinch wheel.

Earlier this year I found a solution: a small rubber ball that we purchased as a toy for our cat seemed to have the right kind of material. I was able to shape a suitably round and smooth wheel out of it, which I inserted into the reader. I also managed to readjust the small pressure switches inside that sense the card as it moves through the unit. Another problem, as it turned out, was the worn clutch of the motor that drives the mechanism; worn because of repeated attempts to spin the motor when the reader mechanism itself was stuck. After many tries, however, I eventually ended up with a reader that was able to record and read cards perfectly, and has been working reliably for some time now. Being a software guy, I viewed my hardware success as a major victory!

This calculator works so well, in fact, that I now use it as a prototype testbed for some simple algorithms. It's really nice when you have a reliable card reader! Mind you, I still have this acquired habit of always recording my programs in triplicate and keeping two copies after I verified their readability... as they say, the Devil never sleeps. I also used my newly acquired skills to fix the card readers and other problems in two additional HP-97s that I recently obtained; these will be good as spares or as units for trade.

Turning to the subject of programming, the HP-97 (along with its printerless twin, the HP-67), a member of Hewlett-Packard's second generation of personal calculators, offered fairly sophisticated programming features. It had 224 fully merged program steps (many multikey functions, including some requiring three keystrokes, used only a single step of program memory), 26 data registers, a collection of flags, conditional statements, label addressing, and more. The entire contents of program memory could be recorded on the two sides of a magnetic card. Along with the usual complement of scientific and statistical functions, this made the HP-97 a very nice calculator indeed.

Here is my current implementation of the infamous Gamma function for the HP-67/HP-97. Unlike some of my other Gamma function programs, this one does not require that you enter any constants into data registers; the constants are part of the code. This program calculates the Gamma function for any real argument, except for negative integers, for which the function has no value. The program only uses registers D and E for temporary storage.

001	 21 11	LBL A
002	 01	1
003	-41	x-y
004	 21 02	LBL 2
005	 16-44	x>0?
006	 22 01	GTO 1
007	-21	ENTER
008	-31	Rv
009	-35	×
010	 16-31	R^
011	 01	1
012	-55	+
013	 22 02	GTO 2
014	 21 01	LBL 1
015	 35 15	STO E
016	-41	x-y
017	 35 14	STO D
018	 07	7
019	 06	6
020	-62	.
021	 01	1
022	 08	8
023	 00	0
024	 00	0
025	 09	9
026	 01	1
027	 07	7
028	 03	3
029	 36 15	RCL E
030	 01	1
031	-55	+
032	-24	÷
033	 08	8
034	 06	6
035	-62	.
036	 05	5
037	 00	0
038	 05	5
039	 03	3
040	 02	2
041	 00	0
042	 03	3
043	 03	3
044	 36 15	RCL E
045	 02	2
046	-55	+
047	-24	÷
048	-45	-
049	 02	2
050	 04	4
051	-62	.
052	 00	0
053	 01	1
054	 04	4
055	 00	0
056	 09	9
057	 08	8
058	 02	2
059	 04	4
060	 36 15	RCL E
061	 03	3
062	-55	+
063	-24	÷
064	-55	+
065	 01	1
066	-62	.
067	 02	2
068	 03	3
069	 01	1
070	 07	7
071	 03	3
072	 09	9
073	 05	5
074	 07	7
075	 02	2
076	 36 15	RCL E
077	 04	4
078	-55	+
079	-24	÷
080	-45	-
081	 01	1
082	-62	.
083	 02	2
084	 00	0
085	 08	8
086	 06	6
087	 05	5
088	 00	0
089	 09	9
090	 07	7
091	 04	4
092	-23	EEX
093	 03	3
094	-22	CHS
095	 36 15	RCL E
096	 05	5
097	-55	+
098	-24	÷
099	-55	+
100	 05	5
101	-62	.
102	 03	3
103	 09	9
104	 05	5
105	 02	2
106	 03	3
107	 09	9
108	 03	3
109	 08	8
110	 05	5
111	-23	EEX
112	 06	6
113	-22	CHS
114	 36 15	RCL E
115	 06	6
116	-55	+
117	-24	÷
118	-45	-
119	 01	1
120	-55	+
121	 16-24	π
122	 02	2
123	-35	×
124	 54	√
125	-35	×
126	 36 15	RCL E
127	-24	÷
128	 32	LN
129	 36 15	RCL E
130	 05	5
131	-62	.
132	 05	5
133	-55	+
134	 32	LN
135	 36 15	RCL E
136	-62	.
137	 05	5
138	-55	+
139	-35	×
140	-55	+
141	 36 15	RCL E
142	-45	-
143	 05	5
144	-62	.
145	 05	5
146	-45	-
147	 33	ex
148	 36 14	RCL D
149	-24	÷
150	 24	RTN