[comp.sys.handhelds] HP48SX Internal Addresses Sorted by Function

Jake-S@cup.portal.com (Jake G Schwartz) (01/30/91)

             A Combined HP48SX Internals Address List
                Sorted by Object Type and Function

The list to follow this message is a  combined HP48 internals list, sorted 
by object type and function. It includes Jan Brittenson's symbol table, 
his recent internal constants list, Derek Nickel's internals list, and a
newly acquired list of entry points from Rick Grevelle. 
     Several modifications have been made to this list since the last posting 
in increasing address order.  Addresses originating from Jan's list are 
followed by either a colon or equals sign, addresses from Rick's list are 
followed by a dash, and those from Derek's list have just a space. In order 
to save space, multiple definitions of the same address have been merged
onto the same line (wherever possible).  These entries were left intact 
in order to get the most possible information about the addresses in question.
     When a entry point second definition appears on a given line, 
it is separated from the first by a slash followed by a colon (/:), equals 
sign (/=) or dash (/-) based on the originator of the additional definition.  
(The definition at a specific address always begins with Derek's entry first,
if it exists.) If a third meaning is present, an additional slash and author's
symbol (/:, /= or /-) is used in front of this definition as well. If there 
is no room on the line for all definitions, they continue onto a second line 
without the address being repeated.

------------------------------------------
Just a couple of terms:

  GC  = Garbage Collect
  TOS = Top Of Stack (i.e., level 1; TOS-1 is level 2, etc.)
  SB  = System Binary (also "Syst Bin" and "Short")
  MC  = Machine Code (also "code")
   R  = Real
 Push = Item goes into stack level 1 and others move up the stack
  Pop = Item from stack level 1 is removed (and used) and others move down
   Nm = Name

Notes:

If a function name is followed by "(boolean)" this means that this is a
test which returns a True or False to stack level one.
An attempt was made to fix typos wherever found, and also to check for
inconsistencies and repair them. In a future version of this list, the
multiple definitions shall be collapsed down to single, clear ones. This
list is not perfect and should not be assumed to be so, as errors can
creep in. It might be useful to keep the prior list (sorted by address)
handy as a cross-reference, especially when disassembling by hand. As
new address lists appear, I shall try to incorporate them into this list.

Jake Schwartz
-------------------------------------------

Jan Brittenson's notes on his symbol table (corresponding to all entries
here which have a colon or equals sign after the address or after the
slash if the definition is an auxiliary one):

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).

Enough. Help yourself to whatever is new to you.
--------------------------------------------------------------------------

(The list appears in three parts, due to its size.)