[comp.sys.handhelds] Latest HP48 Internals Address List

Jake-S@cup.portal.com (Jake G Schwartz) (04/03/91)

                 Revised HP48 Internals Address List 
                 
                   (1) Sorted by Object Type and Function
                   (2) Sorted by Increasing Address

        Including new contributions from Paul Dale and Rick Grevelle
                           April 2, 1991


Here is the latest list of HP48 internals addresses and short descriptions.
Since the list is useful being sorted both by address *and* function,
it is provided here in both configurations.

Paul Dale recently sent a rather large list of newly discovered 
constants in the HP48 ROM, including some in the "hidden" 32K ROM between
addresses 70000 and 7FFFF. Notes from Paul are below:

====================================================================

hiya,

I wrote some programs to search the rom-dump to extract constants of various
types.  I am including all the constants from the 48 that are of types
real, long real and long complex (the existing list of complex numbers
is already complete).  Where possible, I have added comments about some of


The rom version is revision E just in case.


							Pauli
seeya

Paul Dale               | Internet/CSnet:            grue@batserver.cs.uq.oz.au
Dept of Computer Science| Bitnet:       grue%batserver.cs.uq.oz.au@uunet.uu.net
Uni of Qld              | JANET:           grue%batserver.cs.uq.oz.au@uk.ac.ukc
Australia, 4072         | EAN:                          grue@batserver.cs.uq.oz
                        | UUCP:           uunet!munnari!batserver.cs.uq.oz!grue
f4e6g4Qh4++             | JUNET:                     grue@batserver.cs.uq.oz.au

   .
   .
   .

hiya,

I'm sending the list of ALL short integers that are present in the HP's rom
This includes bits of code that just happen to look like short integers.
My programs search for the header and then dump the object (if it is legal)
and then continue searching from just after the header.  This should
mean that every possible object has been located.  I've figured out a couple
more machine code entries as well.

(An earlier comment of mine:)
>With regard to built-in constants...I have thought about this for a few
>months now....One wonders why there are so many copies of the same reals
>in the ROM. It's a shame that they didn't collectively attempt to 
>remove as many duplicates as possible so as to save a little bit of
>space. I bet that perhaps a couple of hundred nybbles may have been
>spared in the process. Oh well. 

As an example of this, the short integer <00001h> occurs 56 times in the
rom (it might be an interesting code sequence, so it might not be a waste).
Changing this alone would save 55*10=550 nibbles!!!  One of the things that
I personally dislike, is the presence of local/global variables with the
same name multiple times in a short piece of code.  This wastes space and
I think that it also is slower than defining the variable once and re-using
that definition.  Better yet would have been to make the local variables
have less meaningfull names, which would also reduce the space requirements.

Oh well!

						Pauli
seeya


============================================================================

In addition, Rick Grevelle recently sent his latest list of prefixed 
machine code routine entry points which he researched. This includes a 
couple of dozen new entry points that have been added to the master list
(and as a result, the corresponding "empty" addresses previously identified 
as unknown have been replaced).


============================================================================

Notes from earlier editions of this list :

Rick Grevelle contributed a complete list of all "prefixed" RPL code
addresses along with definitions for the ones that he knew. The new addresses
which Rick added with definitions are marked with a dash as his "author
symbol". At the end of the sorted list are the remaining undefined prefixed
entry points in address order.  This will give an idea of what's left out
there to explore. 

Jim Cloos provided a list of HP's names for XLIB functions as he discovered
in the USRLIB code. New additions from Jim are marked with a semicolon. Also,
the existing XLIB entries are now labelled with "/U" (representing the USRLIB
HP name) followed by the name for the entry point.

---------------------------
Here is Jim Cloos' notes about his entries:

Here are the names of the builin romptr's (ie, XLIB's) and data types as
per the -l and -d output files from usrlib.  These come from the usrlib src,
but have been converted into the format of sad .symbols files.  As these
names can be seen by anyone with a copy of the usrlib executables (any
version)
and as I've already posted this, there should be no problem with including
it in the combined list.

Notice that each of the xlib's has the prefix x, alg, or rpn.  I presume
the x stands for either Xlib, eXternal, or type Xing.

Enjoy.

James H. Cloos, Jr.		Phone:  +1 716 673-1250
cloos@ACSU.Buffalo.ED    Snail:  PersonalZipCode:  14048-0772, USA
cloos@ub.UUCP			Quote:  <>

---------------------------
Below is Jan Brittenson's original notes on his symbols file entries:

Here is my
.symbols file as it looks today.  Symbols starting with a capital
letter (e.g.  `Foo') are RPL objects, all others are ML labels (e.g.
`foo'). A symbol, ending with `'p' is a predicate which returns True
(#3a81?) or False (#3ac0?). A symbol ending with `q' is questionable,
i.e. it's what I *think* it is, or a part of its function; it may for
instance be some test that also alters the heap, or messes with local
registers, or something, name `Testq'. Symbols ending with _ref or
_ref_<ordinal> are simply references, i.e. jump instructions. For
instance, "jump.a foo" may exist only for the purpose of addressing
foo using local branches, and could then be preceded with `foo_ref:'
or `foo_ref_2:' - you get the idea. A short is a 5-nibble integer, and
is the default operand type.  If only one operand type follows the
name, then all operands are of this type. For instance, `Sub' (Not
Substring, that would be `Sub_string' or `Substring_string'!)
subtracts two shorts, while `Sub_real"' subtracts two reals. They may
sometimes appear as `Sub_short_short' or `Sub_real_real' which are
essentially the same thing. The are still great possibilities for
amibiguity, though, my usage is not always coherent, and there are
typos. If a routine does more than one thing, then the names are
(ideally, in simple cases) concatenated, e.g. `Swap_Over' which tells
us that this piece of code is an RPL object that first Swaps, and then
does an Over. Or `Dup_Inc_Gtp' would do a Dup, Increment (short of
course) and test if Greater Than (always False).

   Other conventions I've used are: "Return" (i.e. End) exits the
current program level; "Ret" exits *two* levels (i.e. it exits the
level above, sorry about the stupid names); anything starting with a
type name (e.g. "Short_17h") is a constant; Get recalls something to
the stack; Set overwrites something (usually the top of the stack, but
sometimes a variable).
-------------

Derek Nickel's address list is fairly self-explanatory. 


Each version of the address list itself is separated into multiple parts 
since it is so large.

Jake Schwartz
 
P.S. - Please be patient....all the pieces may not be present immediately.