The following warnings occurred:
Warning [2] Undefined array key 71584 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 71602 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 71611 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 71626 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined variable $thread - Line: 295 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 295 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Trying to access array offset on value of type null - Line: 295 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 295 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined variable $fid - Line: 295 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 295 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 71602 - Line: 331 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 331 errorHandler->error_callback
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 304 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 71626 - Line: 331 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 331 errorHandler->error_callback
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 304 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined variable $theme - Line: 3 - File: inc/plugins/threaded_mode.php(305) : eval()'d code PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php(305) : eval()'d code 3 errorHandler->error_callback
/inc/plugins/threaded_mode.php 305 eval
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Trying to access array offset on value of type null - Line: 3 - File: inc/plugins/threaded_mode.php(305) : eval()'d code PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php(305) : eval()'d code 3 errorHandler->error_callback
/inc/plugins/threaded_mode.php 305 eval
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined variable $theme - Line: 3 - File: inc/plugins/threaded_mode.php(305) : eval()'d code PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php(305) : eval()'d code 3 errorHandler->error_callback
/inc/plugins/threaded_mode.php 305 eval
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Trying to access array offset on value of type null - Line: 3 - File: inc/plugins/threaded_mode.php(305) : eval()'d code PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php(305) : eval()'d code 3 errorHandler->error_callback
/inc/plugins/threaded_mode.php 305 eval
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined variable $lang - Line: 5 - File: inc/plugins/threaded_mode.php(305) : eval()'d code PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php(305) : eval()'d code 5 errorHandler->error_callback
/inc/plugins/threaded_mode.php 305 eval
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Attempt to read property "messages_in_thread" on null - Line: 5 - File: inc/plugins/threaded_mode.php(305) : eval()'d code PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php(305) : eval()'d code 5 errorHandler->error_callback
/inc/plugins/threaded_mode.php 305 eval
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks





HP-97 reverse engineering progress



#5

I've been studying logic analyzer traces of the HP-97 bus. I was surprised to find that there are a lot more hitherto unknown instructions than I expected. From the HP Journal article on the 91 (or was it the 92?) I knew that there were about six instructions for the printer, and an unknown number for the keyboard and card reader, but thus far I haven't captured any traces involving printing.

The PIK chip controls both the printer and the keyboard (with buffer), so I expected that there would be at least one new keyboard-related instruction. I've been able to identify the instruction that tests whether there are any keycodes available in the buffer.

Reading a keycode out of the buffer doesn't use a new instruction; actually it can't, because it's not possible for chips external to the ACT processor to add new instructions that transfer data into ACT internal registers. So instead, it is mapped as RAM, to address 0xFF. (The actual RAM inside the combined RAM/ROM chips appears to be mapped from 0x00 through 0x3F.) I've determined a portion of the hardware keycode encoding information, but not yet all of it.

Thus far I've seen 13 "new" instructions, of which one is the keyboard status test.

Probably some of the extra instructions are asking the card reader whether a card has been inserted, and asking the printer whether it is in the home position. Maybe this will become more apparent when I capture traces with the printer or card reader in active use. I will need to refurbish the card readers in my 97 (and 67) before doing any reverse-engineering of that.

The ROM bank switching on the 97 does NOT appear to use the same instruction as used in the Spice models. I know there is some form of ROM bank switching going on, because the ACT can only address 4K of ROM, but the 97 has 6K, and some other ACT-based calculators including the 67 and 19C have 5K. I'm hoping that it uses essentially the same scheme they used in the later Spice series and merely a different opcode, but I don't yet have enough trace data to find it.

Right now I'm limited to capturing about six seconds of execution at a time.

I think it will take a long time to build up a full understanding of the HP-97, but once that is done I should be able to simulate all of the Topcat models as well as the HP-19C.


#6

Finished mapping all of the internal keycodes.

I think I've identified which instruction asks the CRC chip for the state of the PRGM/RUN switch. Should be fairly easy to find the instruction that ask the CRC about the NORM and ALL states of the printer switch (TRACE is encoded as the absence of either NORM or ALL).

Edited: 10 Apr 2005, 4:09 a.m.

#7

It would be interesting to do gate-level simulations of these machines---for one thing, a gate model would be more debuggable than the real hardware and might help with this sort of instruction-inference. It would certainly be the authoritative source for instruction semantics if it could be understood.

A netlist of each chip would be needed, which would be challenging to construct (I've been wanting to try this, but there just hasn't been time). An FPGA with the actual ACT and ROM guts inside would be amusing. The synthesis tool would optimize the design, though, so if one didn't entirely trust the tool, for extra correctness one could do a really dumb translation directly to LUT primitives and accept a slow cycle time (probably this is overly paranoid).

Or I imagine a desktop machine with a reasonably clever cycle-based simulator might come close to real time.


#8

Quote:
It would be interesting to do gate-level simulations of these machines

Definitely an interesting idea.

I'm told that there are services that will take a chip and return you a netlist or even an HDL model, but that they are very expensive.

There was a CAE tool named "LayBool" developed at a university that did part of this process; it would turn geometric layout information into logic equations. I'm not sure that it would be able to handle old dynamic PMOS stuff. But it was acquired by a CAE tool vendor. It may or may not still be available (perhaps under a different name now), but it was incredibly expensive at one time, and probably still is.

I'm going to try to glean as much as I can from logic analyzer captures, but if that isn't satisfactory, the next step will be to replace the ACT with my own hardware that can act as a stimulus to probe the behavior of the PIC and CRC chips.

If all else fails, maybe these chips are simple enough (compared to even 1980s chips) to decapsulate and photomicrograph, and generate a netlist by hand. I know a tiny amount about CMOS circuit design, and have an old book by AMI (one of the fab houses HP used for these chips) on PMOS design, so I suppose I could learn enough to do it.

And once I had the photomicrographs, mabye I could write tools to automatically recognize certain features and do some of the work.


Possibly Related Threads…
Thread Author Replies Views Last Post
  HP48GX - looking for Chotkeh Engineering Review Software MANUAL giancarlo 0 1,340 12-06-2013, 04:28 PM
Last Post: giancarlo
  [OT] engineering student chalenge cyrille de Brébisson 1 1,287 11-25-2013, 10:06 PM
Last Post: FORTIN Pascal
  HP 50g - displaying result in engineering format Sean Freeman 10 3,157 11-24-2013, 05:44 AM
Last Post: C.Ret
  HP-67/97 Mechanical engineering PAC cover Ignacio Sánchez 0 999 10-30-2013, 04:35 AM
Last Post: Ignacio Sánchez Reig
  Crowdfunding the Prime "engineering" firmware Eelco Rouw 24 6,381 10-28-2013, 01:23 AM
Last Post: Howard Owen
  Nibble reverse (HP-48,49,50g) Gerson W. Barbosa 44 11,827 07-28-2013, 10:10 PM
Last Post: Gerson W. Barbosa
  Software for Reverse Polish Notation Calculator JC Howard 4 1,662 03-27-2013, 03:25 PM
Last Post: Mike T
  Reverse Polish Notation Calculator Thomas Klemm 1 1,022 12-24-2012, 12:18 PM
Last Post: Paul Dale
  DIY5 calculator progress Eric Smith 7 2,334 09-13-2012, 05:01 PM
Last Post: Walter B
  Rapid Reverse Branching & Label Searches Matt Agajanian 2 1,117 04-30-2012, 11:09 AM
Last Post: Matt Agajanian

Forum Jump: