[comp.sys.handhelds] HP28: a better coding scheme

alonzo@microsoft.UUCP (Alonzo GARIEPY) (03/15/90)

Rick Grevelle does it again!  This is an extremely elegant solution.
I will see if I can find something similar on the 48.

--AMG

--- Forwarded mail from uunet!SIGMA.TAMU.EDU!FTG0673 

From: Rick Grevelle <sigma.tamu.edu!ftg0673>
Subject: CODE
To: microsoft!alonzo

            Alonzo,

             I have found the solution to the code problem. You can now
       code quickly and painlessly with less chance of error by using a
       machine subroutine from the ROM. It allows for easy documentation
       of user written machine programs and eleminates the problem of check
       sums not being able to differentiate between system objects. The ROM
       address of the machine routine that allows you to do this is #3B82h.
       According to Toonen's ROM map: 03B82  +_1string2string. This is a bit
       over simplified in that the routine will allow binary integers to be
       used as well as strings. I discovered that the routine works by using
       the prolog of the object in level 1 to determine the the object type
       after the addition. What this means is, if level 2 contains a binary
       integer and level 1 a null string, or any string, the prolog for the
       binary integer (#2A70h) is discarded for that of the string (#2A4Eh).
       Here I will use PIG as an example. I think you'll agree that there is
       no contest between using this approach to enter and run machine programs
       and any of the other previous ones.

       Enter PIG as follows:  PIG[8AFA]

                             { #3012310003B02C96h
                               #1631641961031341h
                               #3117451961031765h
                               #C808461241231h  }

       Now you are ready to enter the program that will turn the binary
       integers into executable form.

                  ->SYS[734D]

                  <<  " "  +  LIST->  2  SWAP      ; Intialize null string
                      START  #3B82h  SYSEVAL       ; Begin code loop
                      NEXT  #71BDh  SYSEVAL        ; End loop, set pointer
                      #3E9D7h SYSEVAL       >>     ; Get program, end user.

       Let me know what you think about the use of these addresses.

                                                 Thanks again,

                                                 Rick

--- End of forwarded message from uunet!SIGMA.TAMU.EDU!FTG0673