|common ROM code in Spice calculators|
Message #1 Posted by Eric Smith on 12 July 2005, 8:33 p.m.
There were some ROMs shared beteen the 67 and 97, and between the 19C and 29C, which is not surprising because those were pairs of printing and non-printing machines that were otherwise nearly identical.
And there are certainly many code similarities between various models.
But I was surprised to discover that the Spice series has some large
blocks of identical code shared between different models.
The 32E, 34C, and 38C all share the same ROM code for the first "quad", which is octal 0000-1777 (1 Kword). This contains the basic arithmetic, logarithmic, and exponential routines, and probably more that I haven't yet identified. There are several jump tables of entry points to the various routines; this is the first time that jump tables were used to provide stable entry point addresses in HP handheld calculators. The routines are quite similar to those of the 41C (File cn6b of the HP-41C mainframe VASM linstings), and somewhat different than those of the Woodstock calculators. It
appears that this first quad was intended to be a general-purpose math ROM which could be exhausively tested and then reused as-is in multiple calculators, almost like a "BIOS". This is a departure from their earlier designs, in which even code shared between models, such as the math code, was massaged to fit into each model differently.
Similarly, the 37E and 38E share the same ROM code for the first "quad", but it is significantly different than the first quad of the 32E/34C/38C. In addition, the 37E and 38E share the code from octal 2000-2777, with the exception of eleven words which are different. I suspect that this region contains the core financial calculations, but have not yet attempted to identify the routines.
Interestingly, the 33C first quad does not match either the 32E/34C/38C or the 37E/38E. And it is particularly interesting that the 38E and 38C code does not match. There are probably few actual code differences, but the code organization in the ROM address space appears to be completely different.
I do not yet have ROM dumps of the 31E or 33E for comparison. I expect them both to use the same first quad as the 32E/34C/38C.
The Voyager calculators reverted to each calculator having a completely unique assembly code arrangement; although the math routines are similar if not identical, they are at different addresses in each calculator.