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.