|two pass disassemblers; math routines|
Message #4 Posted by Eric Smith on 17 Apr 2007, 4:07 a.m.,
in response to message #3 by Meindert Kuipers
The disassembler in Nonpareil, udis, is also a two-pass disassembler, but it only disassembles microcode (for Classic, Woodstock, and Nut architectures), and doesn't handle 41C module FATs. The version in the "current" (now very old) release of Nonpareil isn't very good; the one in the Subversion repository is much better. I'm still struggling to finish some big changes so I can release a new version.
udis generates labels based on the address and whether the address is ever called as a subroutine (prefix "S"), or only by jumps (prefix "L"). I've considered adding an additional class of local labels for addresses that are only the target of a small number of nearby branches.
I've found this to be very useful it tracing the evolution of the math routines in the various series and models. For instance, the 19C, 27, 29C, 67, and 97 all use basically the same math routines, which are different than those of the earlier Woodstock models (21/22/25). These are the changes described in the HP Journal sidebar "The New Accuracy". I expect that the same routines are used in the 91, 92, and 95C, but have not yet got ROM dumps of those models.
There were a few more changes made in the Spice series, but the math routines then remained almost unchanged through the 41C and Voyager series. In the 41C VASM listings, there are a few comments where peephole optimizations could be made to use new instructions of the Nut CPU; those changes were actually made in the Voyager series.