Archive-name: hp48-faq/part2
Last-modified: 07/05/1994
Version: 2.00
Posting-Freqency: every 14 days or so

        *********************************************************
             HP 48 S/SX/G/GX  Frequently Asked Questions List
        *********************************************************
          PART 2 of 4: Programs and Programming: Sections V - VI
                           
                  Currently Maintained by: Keith Maddock
                  Originally Compiled by: Darryl Okahata

Key: ! =new Q/A  + =revised answer 

PART 2:    

V. Questions about programs
    5.1 Where can I get programs and information for the HP 48SX?
    5.2 What are the Goodies Disks and where do I get them?
    5.3 How do I get access to the HP Calculator BBS?
    5.4 What are files that end with ".zip", ".Z" or ".z"?
    5.5 What is a "ship" file?
    5.6 What is \->ASC or ASC\->?
    5.7 How can I get \->ASC and \->ASC?
    5.8 How do I get rid of the HYDE library?
    
VI. Questions about programing and advanced user functions
+   6.1 I've heard the names "RPL", "Saturn", "STAR", "Voyager", "GL", etc..  
        What do they mean?
    6.2 Why do SysRPL programs run faster than UserRPL programs?
    6.3 What library ID numbers have already been used?
    6.4 What information is there on the internals of the HP 48?
    6.5 Are there any viruses for the HP48?
    6.6 How do I store fields of variable length string data in a compact,
        rapidly accessible manner that does not require the overhead of
        storing strings in lists?
    6.7 What is "Vectored Enter", and how do I use it?
    6.8 What is "WSLOG"?
    6.9 What are SYSEVALs and LIBEVALs?
+   6.10 What are some useful SYSEVALs?
    6.11 What are some useful LIBEVALs? (GX)
    6.12 What is the format of a GROB object?

******************************************************************

V.  Questions about programs

******************************************************************

5.1 Where can I get programs and information for the HP 48SX?
    
    See Appendix H for more info.

******************************************************************

5.2 What are the Goodies Disks and where do I get them?
    
    See Appendix 4 of Appendix H for more info.

******************************************************************

5.3 How do I get access to the HP Calculator BBS?

    You can access the HP Calculator BBS via a modem (note that this is
    a long distance call for most people):

        (503)-750-4448          2400 baud, 8N1
        (503)-750-3277          9600 baud, 8N1

    For those people who have access to the Internet, you can also
    access the BBS via telnet to hpcvbbs.cv.hp.com [15.255.72.16].

    See Appendix H for more BBS sites.

******************************************************************

5.4 What are files that end with ".zip", ".Z" or ".z"?

    Files that end with ".zip" are PKZIP archives, which originated in
    the MSDOS world.  One program that can extract the files in ".zip"
    archives is the Info Zip "unzip" program.  An MSDOS binary can be
    found as:

          wuarchive.wustl.edu:/systems/hp/hp48/Posting/unz50p1.exe

    Sources for the unzip program can be found as:

          wuarchive.wustl.edu:/systems/hp/hp48/Posting/unz50p1.zip

    For binaries for other machines, see the file:

          wuarchive.wustl.edu:/systems/hp/hp48/Posting/README

    Files that end with ".Z" have been compressed using the Unix
    "compress" command.  To uncompress these files, you must use the
    "uncompress" command on Unix.  

    Files that end with ".z" have *probably* been compressed using the
    new "gzip" compression command.  To uncompress these files, you must
    use either the "gunzip" or "gzip -d" command.  These commands are
    not a standard part of Unix, and so you'll probably have to get the
    sources via anonymous ftp from prep.ai.mit.edu (as /pub/gnu/gzip*).
    Again, versions are supposedly available for non-Unix platforms.

******************************************************************

5.5 What is a "ship" file?

    In the past, programs for the HP 48 posted on comp.sources.hp48 were 
    posted in the "ship" format.  This format made it easier for the 
    comp.sources.hp48 moderator to distribute programs, but makes it 
    difficult for users to extract and use these programs.   Many people 
    still use ship. 

    To extract programs distributed in the "ship" format, you need the
    following:

     1. A copy of the "ship" program, compiled for your PC, Macintosh,
        Amiga, Unix workstation, or whatever.  The sources to "ship" can 
        be found at:

        cbs.cis.com: /pub/hp48g/dos/unship.zip

        This zip file also includes the dos executable.
    
        Binaries for MSDOS machines, Amigas, and some Unix workstations
        can be also be found on wuarchive.wustl.edu, in the directory
        "/systems/hp/hp48/Posting/ship_executables".

     2. A copy of the latest Info Zip "unzip" program, or a .ZIP
        unarchiver that understands the new PKUNZIP V2.04g format.  Note
        that you *CANNOT* use old unzip programs, as old unzip programs
        do not understand the new compression formats.  An MSDOS binary
        can be found as:

          wuarchive.wustl.edu:/systems/hp/hp48/Posting/unz50p1.exe

        Sources for the unzip program can be found as:

          wuarchive.wustl.edu:/systems/hp/hp48/Posting/unz50p1.zip

        For binaries for other machines, see the file:

          wuarchive.wustl.edu:/systems/hp/hp48/Posting/README

    Once you have a copy of the "ship" and "unzip" programs, you use
    "ship" to convert the ship-encoded file into a .ZIP file, and you
    use the "unzip" program to extract the HP 48 files from the .ZIP
    file.

******************************************************************
   
5.6 What is \->ASC or ASC\->?
    
    These functions were written by William Wickes to facilitate
    transferring HP 48 binary objects in an ASCII format (useful when
    transferring objects via electronic mail or bulletin boards).  Some
    HP 48 objects, like libraries, cannot normally be converted into
    ASCII, unlike program objects, and these functions make it possible to
    do so.
    
    The \->ASC function converts the object in level 1 into an ASCII
    string, which can then be uploaded to a computer for mailing.
    
    The ASC\-> function converts the string object in level 1 back into an
    object.  A checksum is used to ensure that the decoding is correct.
    
******************************************************************

5.7 How can I get \->ASC and \->ASC?
    
    A copy of these programs are given in Appendix A, near the end of this
    file.

******************************************************************
    
5.8 How do I get rid of the HYDE library?

    Getting rid of the HYDE library can be fun.  Here's how to do it:

     1. Go the HOME directory.

     2. Press left-shift (orange) LIBRARY.  The calculator is now
        displaying a menu of libraries attached to the HOME directory.

     3. Press the menu key that says "STRA".  You are now accessing the
        HYDE library.

     4. Press the menu key that says "JEKY".  You have now disabled the
        HYDE library and restored the old (standard) set of messages.

     5. Make sure that a pointer to the library is not on the stack.  The
        easiest way to do this is to clear the stack using CLR.

     6. Detach the library using:

          :0:998 DETACH

     7. Purge the library using:

          :0:998 PURGE

        When you execute the PURGE, the screen will "jump" or "be messed
        up" for a brief moment.  Don't worry about it -- it doesn't
        hurt.

******************************************************************

VI.  Questions about programming and advanced user functions

******************************************************************
  
6.1 I've heard the names "RPL", "Saturn", "STAR", "Voyager", "GL", etc..  
    What do they mean?

    ASAP
        This is a simple Saturn assembler, written in the Perl language.

    Chip8, Chip48, Schip, Schip8
        This is a machine-code program that was inspired by the chip8
        video game interpreter for the RCA CDP1802 microprocessor
        several years back.  Chip8 allows you to write a simple
        graphics-based video game for the HP 48SX.  Among the games
        written are "clones" of breakout, pacman, and pong, to name a
        few (about half?).

        Chip48, Schip and Schip8 are two different names for an enhanced
        version of chip8 specifically designed for the HP 48SX.  People
        have written programs to assemble Schip assembly language into a
        form directly usable by Schip on an HP 48.  Schip interpreters are 
        available for both G and S series.

    HYDE
        This is the "HYDE" library, whose only purpose is to change the
        error messages in the HP 48SX to make it "user unfriendly".

    GL
        GL (Game Language) is a language for the programmer who wants 
        almost the speed of assembly, but who doesn't want to spend a lot 
        of time and effort to learn all the tricks of assembly programming 
        on the HP48. GL has an assembly-like syntax, and there is an 
        assembler for PC and one for the HP48 itself. Since GL is an 
        interpreter, the GL library (3 KB in size) must be installed on the 
        HP48 to run GL programs. The instruction set is powerful, with 
        sprites and pixel based graphics, scrolling, sound, keyboard 
        control, and more. There are 256 1-byte registers which can be used 
        in pairs as 2-byte words. A GL program can be up to 64 KB in size. 
        GL was inspired by S-CHIP, but it is much better in all aspects. It 
        is suitable for many applications, not only games, that require 
        high speed. Of course it works on both the HP48S/SX and the G/GX. 
        GL is written by Erik Bryntse. 
        
    ML
        Machine Language.  This is usually used in reference to HP 48 
        assembly language programming.

    MLDL
        Machine Language Development Library.  This is a library that 
        allows you to debug machine language programs with only an HP 
        48. 

    PDL
        "Program Development Link".  This is an MSDOS program, sold by
        Hewlett-Packard, that allows you to write and develop HP 48SX
        applications from your IBM PC clone.  Programs are written on
        your PC, transferred to the HP 48SX, and tested from your *PC*
        (and *not* the HP 48SX).

        NOTE:  The GX version was not out in the May #63 Educalc Catalog, 
        but is probably coming soon...
    
    RPL
        RPL is the name of the language used to program the HP 48 and
        HP-28 series calculators.  RPL stands for "Reverse Polish Lisp".
        It's interesting to note that an HP Journal article incorrectly
        described RPL as "ROM-based Procedural Language".

    SASS
        SASS is a simple Saturn assembler, written in C/yacc (BSD Unix &
        Bison).  It uses Alonzo Gariepy's mnemonics.

    Saturn
        "Saturn" is the internal code name for the processor used in the
        HP 48, HP-28 series, and many other calculators (just about all
        HP calculators since the HP 18/28 series).

    STAR
        This is the "Saturn Macro Assembler" (how "STAR" comes from
        this, I don't know), an assembler that mostly uses Alonzo
        Gariepy's mnemonics.  It's written in C and runs on many
        different machines (PCs, Amigas, Unices, etc.).  STAR is
        available via anonymous ftp from ftp.ai.mit.edu in
        "/pub/star-1.04.4.tar.Z".  [Note: Rumor has it that this is 
        no longer available at this site.  If you know of a more 
        recent site, email the maintainer please.]  It's also 
        available from various bulletin boards (the HP handhelds 
        forum on CompuServe also has a copy).  The latest version 
        is "1.04.4".

    SWING
        SWING is a library program that displays a graphical tree
        structure of the directory hierarchy in your HP 48SX, and allows
        you to move from directory to directory using the arrow keys (it
        is supposedly based upon an old PD VMS utility).

    System RPL
        This is the name for the custom "operating system/language" used
        to program the CPU used in the HP 48 calculator.  System RPL
        is a superset of the normal user RPL commands; in addition to
        the normal, user-accessible RPL commands, system RPL includes
        many lower-level functions.  System RPL is a language one step
        higher than assembly language.

        HP has released a system development toolkit (for the IBM PC)
        containing a system RPL compiler, assembler, and loader,
        complete with a couple hundred pages of documentation.  This
        toolkit, while copyrighted, is, for the most part, freely
        copyable.  If you can find a BBS or archive site that has it,
        you can download all of the system RPL files and documentation.

        The HP development toolkit only runs on the MS-DOS operating 
        system. Alex Ramos has written a portable system RPL compiler 
        which runs primarily on Unix systems, and can emulate most of the 
        features available on the HP kit. The program is called RPL#+ (in 
        an analogy to 'C++'). RPL#+ is available from Ramos's email 
        server: send a message to ramos@engr.latech.edu with a Subject 
        line that reads: 
        "send hp48/rpp199c.zip" 
        without the quotes, and a daemon program will reply. 
        The program currently runs fine on Sun/OS 4.x, but bugs have been
        reported on other systems, including Linux (bugfixes welcome).

    USRLIB
        USRLIB is a program that takes the contents of an HP 48
        directory and turns it into a library object.  It currently runs
        under MSDOS.

    Voyager
        Voyager is an "interactive disassembler" for IBM PC clones that
        disassembles HP 48SX RPL and machine code.  You download a copy
        of the RAM *and* ROM in your HP 48SX to your PC, and run
        Voyager.  Using Voyager, you can then view the disassembled or
        unthreaded code.  Unfortunately (or fortunately), Voyager uses
        the HP mnemonics, and not Alonzo Gariepy's mnemonics.  Voyager
        is available from the HP BBS (I think), via anonymous ftp from
        the HP BBS (hpcvbbs.cv.hp.com [15.255.72.16]), and from various
        bulletin boards (the HP handhelds forum in CompuServe also has a
        copy).  The latest version is "1.07".

******************************************************************

6.2 Why do SysRPL programs run faster than UserRPL programs?

    SysRPL is the built in language, custom designed for the Saturn 
    processor used the HP48 family. UserRPL is a "subset" of SysRPL.  The 
    main reason for the speed difference is the fact that UserRPL commands 
    have built in argument and error checking.  In SysRPL, the programmer 
    is responsible for all error checking to avoid memory clears.
    
******************************************************************

6.3 What library ID numbers have already been used?

    This list was compiled from Joe Horn, and from the contributions of 
    others.
    
                  * * * * * * * * * * * * * * * * * * * * *
                  *                                       *
                  *  HP 48 LIBRARY ID'S CURRENTLY IN USE  *
                  *                                       *
                  *            16 FEBRUARY 1993           *
                  *                                       *
                  *           *** Unofficial ***          *
                  *        (Corresponds to Reality)       *
                  *       Compiled by Joseph K. Horn      *
                  *                                       *
                  * * * * * * * * * * * * * * * * * * * * *

     ID    BYTES  #CRC REVIEW Name (comment)         Where Available
    ---- -------- ---- ----------------------------- -------------------
    0004    103.0 3CB5 (Selectable config aborter)   GD8:HACKER
    0014    135.0 5329 X.PUB :Configs Aborter        GD7:FRANCE
    0262    125.5 6AD9 (powerup -> warmstart)        GD7:UTILS
    0262 105307.5 4B6E DEMO  :Demo Start  0.0        EduCALC #2804
    0266   4209.0 0414 (Catalog Utility)             HP 82211A/B
    0267  63011.0 BB68 (Equation Reference)          HP 82211B
    0267  70074.5 40CC (Equation Reference)          HP 82211A
    0268   6926.5 F89F UTILS :Utilities              HP 82211A
    0268  16093.0 5742 UTILS :Utilities              HP 82211B
    0269   6131.5 1BD9 MES   :Mult Eqn Solver        HP 82211A
    0269   6203.5 F4CC MES   :Mult Eqn Solver        HP 82211B
    0270   3184.0 7022 FIN   :Finance                HP 82211A/B
    0271   3751.5 E1F1 COLIB :Constants Libr         HP 82211A/B
    0272  26964.5 F6E6 PRTBL :Periodic Table         HP 82211B
    0272  27391.5 7922 PRTBL :Periodic Table         HP 82211A
    0273   7168.0 0580 EQLIB :Equation Libr          HP 82211A
    0273   7363.5 CC86 EQLIB :Equation Libr          HP 82211B
    0364      ?   ???? HP16C Emulator (ID=16C)       (under development)
    0368   1795.5 F46F COMPRESSION LIBRARY           GD9:UTILS
    0448 15721.5  D5C0 Super Car V1.0 (for G/GX)     HAY
    0501   4393.5 83C9 CLK                           GD3
    0700  14538.0 3B6A BoulderDasHP par ORUS         GD8:GAMES
    0703  28073.5 E47C PRTBL :Periodic Table         GD9:HP
    0752   2203.5 7A6A PDLXFER  PDL Xfer Util        HP 82208B
    0764   2122.5 38C9 XFLIB: X Functions            GD8:PROGRAMR
    0765   5145.5 EB7F CATLIB:Catalog Library        HPCVBBS
    0766   1226.0 7027 EPPRT :Graphic->Epson B       GD9:HP
    0767   1132.5 E407 HPPRT :Graphic->PCL B         GD9:HP
    0768   2825.0 2AF5 SW-B (stopwatch)              GD9:HP
    0769   2862.0 49FA TETRIS:1.3,(c)DM'91           GD6:GAMES
    0769   8277.0 3FF2 DB48 (Data Base v2.11)        GD5:WORK
    0769   8984.5 E2CB DB48 (Data Base v2.30)        GD7:WORK
    0769   9945.5 44C8 DB48 (Data Base v2.42)        GD8:WORK
    0769  32761.5 9703 CAS48: Casino 48S 1.02        EduCALC #2259
    0770   9597.5 3DF0 (PIM Utils & Data Browser)    EduCALC #2323
    0771 111436.5 9589 EEREF :EE Reference           EduCALC #2293
    0772 117511.5 8CE8 EEAPP :EE Application         EduCALC #2292
    0773  23124.0 01CF PIM   :Pers Info Mgr          EduCALC #2323
    0774 113708.0 FF57 MEREF :ME Reference           EduCALC #2291
    0775   6007.0 3BEE FCLIB :Flag Catalog           EduCALC #2283/4
    0775   6409.5 2665 ECHR (Character catalog)      GD7:PROGRAMR
    0775   7348.5 71A7 ECHR - Ver 2.50               HAY
    0776   8424.5 4B46 (Short Tool Library)          (commercial cards)
    0776   9407.5 AEFF TLLIB :Tool Library (ver B)   EduCALC #2283/4
    0777   3704.0 ???? (Short Title Browser)         (commercial cards)
    0777   3746.5 8512 TBLIB :Title Browser          EduCALC #2283/4
    0777  10406.0 ???? (TenK Game)                   HPCVBBS
    0778   4787.0 1D26 DBLIB :Data Browser           EduCALC #2283/4
    0782 116317.5 5EF0 MEAPP :ME Application         EduCALC #2290
    0783 117627.0 425D GCAPP :GC Application         EduCALC #2294
    0784 126049.0 463C GCREF: GC Reference           EduCALC #2295
    0785 117053.0 0488 MATH  :Mathematics            EduCALC #2324
    0786   4745.5 6BED (Short Data Browser)          (commercial cards)
    0798   1842.0 97FF SounderKit                    GD8:TUNES
    0799   4277.0 3B00 TIMER.APPLICATIONS            GD6:WORK
    0800  39509.5 58EB util (used by STRUCT)         \ EduCALC
    0801  90479.5 6B47 STRUCT (TDS card)             / #2487
    0803   2073.5 B8AB SWITCH (bank switcher)        EduCALC #2365 etc.
    0804  10730.5 AE71 finutil (used by TDSFIN)      \  EduCALC #2365,
    0805  14300.5 99EC TDSFIN (financial tools)      /  2475, 2476, 2482
    0807   3700.5 8F69 ROLDX :Rolodex ver 1.0        GD1, GD2:HORN2
    0809    269.5 6D06 MSGTST: v0.0,DM'91            GD6:HACKER
    0810  91634.0 49E1 EZ (E.Z. Math Card)           EduCALC #2443
    0815    633.5 9961 CHKIT :1.0 (c) DM'93          GD8:UTILS
    0817  65248.0 7185 SPC48 (State Plane Coord)     SMI
    0820  10238.0 4390 VADERS (Space Invaders game)  GD7:GAMES
    0821  25305.0 ???? SmartROM 1991 Flavio Casetta  \ EduCALC
    0822   4706.0 ???? Matrix Writer Plus            / #2574
    0823      ?   ???? SmartConverter Printer Driver EduCALC #?
    0825   4708.0 00E5 FILER : Memory Filer          Brian Maguire
    0826   2588.5 4653 CTBL : Character Table        Brian Maguire
    0826   4170.5 13E4 ARYTL: Array Tools            Brian Maguire
    0827   7292.0 BFE8 UITOOLS:User Infc. Tools      GD8:PROGRAMR
    0828   9122.5 251D OBJTL: Object Tools           Brian Maguire
    0829   2576.5 4720 META : Meta-Objects           Brian Maguire
    0830   5002.5 E33A PAINT : Graphic Appl.         Brian Maguire
    0830  56350.0 E47A SRPL :System RPL Tools        Brian Maguire
    0832   8502.5 520C FMGR  :File Manager           EduCALC #2474?
  * 0833 131043.0 ???? NAV48 :Navigation Pac         EduCALC #2636
    0834   8427.0 1E67 (browser utilities?)          (commercial cards)
  * 0835 112488.0 ???? CALCU :Calculus               EduCALC #2691
  * 0836  62282.0 ???? STAT  :Statistics             EduCALC #2743
  * 0837  93083.0 ???? GAMES :Games48 Pac            EduCALC #????
    0839  95837.5 ???? SPICE48: Ckt. Simulator       EduCALC #2589
    0841   5027.0 A1A9 DL+   CH.D 91                 GD7:FRANCE
  * 0843   9143.5 BE08 CWGS :CalcWare Games          EduCalc #2953/4
    0844 116760.0 ???? PHYS  :Physics                EduCALC #2599
    0845 116240.0 ???? SSELE :Solid State            EduCALC #2590
    0846   4058.0 9B9A CWMS :Calcware Mathematics    EduCalc #2953/4
    0847  10114.0 4BF7 CWRS :Calcware Refer.         EduCalc #2953/4
    0850  33805.5 FF5B CONST1                        Mike Seidl (SMI)
    0858  28673.5 FC38 Zephyr Games Pak I            SMI
    0860      ?   ???? Diamonds (game)               Doug Cannon
    0861      ?   ???? DCS (Diamonds Constr. Set)    Doug Cannon
    0873   1768.5 1D9D GATEWAY-48                    GD3
    0873   1932.0 18C4 Code-Lock                     GD7:UTILS
    0873   2192.0 20F3 GATEWAY-48                    GD7:UTILS
    0874   3782.0 36B5 REVERSI                       GD7:GAMES
    0874   8327.5 E262 FMLIB :File Manager           EduCALC #2474?
    0874   8351.5 F592 FMLIB :File Manager           EduCALC #2474?
    0876      ?   ???? DB48LB:Database               James Donnelly
    0879   1141.0 OD1E FATCAL Calendar               HAY
    0880   4117.5 DFD1 ASM  Library 0.0 E            GD7:FRANCE
    0880   4231.0 AD9C TLBOX :ToolBox 1.0A           GD7:FRANCE
    0888   9401.5 13C0 PTE Periodic Table v1         GD6:WORK
    0889    711.0 D9FF HKEY :HardKeys v2.0           HAY
    0898  19617.5 4609 DASM_V1.0                     GD3
    0900    701.5 37C6 HSTACK: Hyper Stack V1.1      GD7:UTILS
    0903   2078.5 296C RF: Chuck Renner              GD8:UTILS
    0905   1751.5 DD1F Qpirac :V3.0                  HAY
    0906      ?   ???? Enhanced Saturn Assembler     EduCALC #?
    0908   1036.0 61FF _5/7_:Display Utility         GD8:UTILS
    0910  75441.0 ???? Sun Finder                    Scott Ferry
    0911      ?   ???? (under development)           Scott Ferry
    0912   8688.0 B8E3 TRON (Paris, 1991)            GD7:FRANCE
    0912   9186.0 F2CC TRON 2+ (c) Christophe Nguyen GD8:GAMES
    0958  16508.0 97F9 NUM                           GD8:MATH
    0960   2109.5 AD53 MIND (5 columns, 8 colors)    GD7:GAMES
    0960   2185.5 9C15 MIND (4 columns, 6 colors)    GD7:GAMES
    0960   4405.5 1AB1 MIND (both of the above)      GD7:GAMES
    0961      ?   ???? ALGB (math & matrix routines) ?
    0962   4654.5 CE11 DB    :48G Database, 1.0      GD9:UTILS
    0966  20552.0 D49E HELP  :Online                 GD8:PROGRAMR
    0968  11139.5 CFB9 ANT (game w/ SCHIP)           GD5:GAMES
    0970   4008.5 3460 FLATTN: Flatten HELPdir, 1.0  GD8:PROGRAMR
    0986   7805.0 D9CA P.C.T. V3.14 (PC-Tools?)      GD8:UTILS
    0998   3679.5 5FAE Strange Case 998 (JEKYL/HYDE) GD2:DNICKEL
    0999      ?   ???? (Examples in Insights Vol 1)  Bill Wickes
    1000  10166.0 72D3 POKR :HP-48 POKER 1.0         GD7:GAMES
    1001  42559.0 ???? DANCER (animated striptease)  ?
    1011   2191.0 F931 Fraction                      GD7:MATH
    1012   3752.5 F6E7 (CRASH library, unnamed)      GD5:HACKER
    1013   1811.5 5CC7 Matrix                        GD7:MATH
    1030  32759.5 1AF6 48BC (SMI)                    EduCALC #2296
    1030  66741.0 491E 48SC (SMI)                    EduCALC #2298
    1030  98285.0 1A8E 48AC (SMI)                    EduCALC #2299
    1031   2933.5 0CD6 iNB   :0.02j 910718           GD7:WORK
    1031   5828.5 4229 DITCH (SMI)                   \
    1032   7629.0 4378 HYDRA (SMI)                    \
    1033   1662.5 EF50 EARTH (SMI)                     > EduCALC #2297
    1034   2729.0 0E59 HORC (SMI)                     /
    1035   3271.0 F029 VERT (SMI)                    /
    1041   2757.0 7CF5 BREAKLIB :V.00                GD9:HACKER
    1092   6930.0 6411 Saturn MLDL a1.01             GD3
    1092  10734.0 BB75 MLDL 1.04B                    EduCALC #2359
    1092  10745.0 2491 MLDL 1.05B                    EduCALC #2359
    1092  10763.0 3E8D MLDL 1.06A                    GD8:HACKER
    1092  10763.0 3E8D MLDL 1.06B                    EduCALC #2359
    1093      ?   ???? Poker 1.01 (game)             ?
    1101   1011.5 FC15 TLORG: TLLIB organizer        GD5:PROGRAMR
    1103   4473.0 5D05 TELE V3.2 (c)93 David Bal     GD9:UTILS
    1111   7602.0 F5FB Garbage (Sokoban; Box Jockey) GD6:GAMES
    1122   2550.0 E734 CD  :Change Directory         HAY
    1160   6508.0 3CAD AWARI-Ver-1.1                 GD8:GAMES
    1188   7268.5 8C78 Poly_mh : V1.2                GD8:MATH
    1189   5616.0 B454 Arit :V1.1                    GD8:MATH
    1200   5816.5 109F LIBMKR :Library Maker V       GD9:HACKER
    1200   5816.5 109F LIBMKR:Library Maker V        GD8:HACKER
    1200   5958.0 53A2 LIBMKR:Library Maker +        GD7:FRANCE
    1201   6213.5 3FC4 PACMAN:BOUHP Version          GD7:FRANCE
    1210  10541.0 50BF DBUG  :HP UnAssembler         GD7:FRANCE
    1211   9486.5 5C94 MATH :Math Library            HAY
    1214   2712.0 F675 HACKIT (v 1.04)               GD3
    1214   3021.0 9F5B HACKIT (v 2.04)               GD5:HACKER
    1214   3168.0 B8DF HACKIT (v 2.05)               GD8:HACKER
    1217  13854.0 B02D ASM  :HP Asm 6.1              ?
    1219   9123.0 D4DC VPOKER BY D SPRENKLE          GD8:GAMES
    1220   2373.0 793A HP<->HP FAST LINK             GD7:FRANCE
    1221   7742.5 72C2 <-LIB-> :2.0(c)93'DM,RH,RG,MH GD9:RPL48
    1224   2084.0 3B88 POLY  : 3.3 Carlos '93        GD8:MATH
    1234   4829.5 8FAA RPL :2.2 (c)DM'92             GD8:HACKER
    1234  22896.5 4D76 <-RPL-> :4.0b,(c)DM&RH'92     GD8:HACKER
    1234  31471.5 65BA RPL :3.21 (c)DM&RH'92         GD8:HACKER
    1275   3550.0 65E9 X-Y Modem v2.2                GD9:UTILS
    1280   8554.5 2713 ARKANOID : By HP mad          GD8:GAMES
    1281  29506.5 EF39 XENNON : By Hp mad            GD8:GAMES
    1300   3470.0 6983 FONE (phone book)             GD9:UTILS
    1303  15597.0 8684 StringWriter v3.0             GR8:PROGRAMMER
    1307  12051.5 35B6 TETRIS2                       HAY
    1314   4313.5 2120 BMXL  Binary Matrix Algebra   GD6:MATH
    1402    n/a    n/a HP-41C Emulator card          HP 82210A
    1402   3026.5 82E3 Bode                          GD7:WORK
    1403    n/a    n/a HP-41C Emulator card          HP 82210A
    1403   4906.5 C25F Biport                        GD7:WORK
    1404    n/a    n/a HP-41C Emulator card          HP 82210A
    1424   4152.5 405C COPY-ROM                      GD5:UTILS
    1433   2648.0 AE3A Rat  Rational Number Package  GD3
    1433   5664.5 09B0 Chip 48 (collection)          GD3
    1492  17860.0 3E6F Opinionmeter V, 1.0           Opinionmeter Inc.
    1492   4854.5 D4FB SCH48v2.0 HP48 SCHEDULER      GD9:UTILS
    1531     91.0 D371 (bare-bones :&:AUTOEXEC)      GD7:UTILS
    1537      ?   ???? FRACT :Fraction Units         (under development)
    1555   5447.0 8429 Vector Lib.                   HAY
    1616   5675.0 6DE4 SMTK: SmartKeys [1.59]        GD9:UTILS
    1617    495.5 421F Complex FACT                  GD3
    1634   4607.5 A07C ESCO v3.01 (c) 1992 J.M.      GD8:WORK
    1644      ?   ???? (SWING directory browser)     HPCVBBS
    1671   3278.5 9AA8 FCTR 1.2 Factoring            GD8:MATH
    1672  12161.5 F3F4 NTL2 2.8 Number Theory        GD8:MATH
    1696   2448.0 8191 UTIL:C  Brian Walsh           GD2:HORN2
    1697   1566.5 DC1E List:B  Brian Walsh           ?
    1700   2703.5 EFC3 TETRIS (ML version)           GD3
    1702   5568.0 1D4C INFO48 (SX memory browser)    GD9:UTILS
    1760  12420.5 8762 Bean Counter                  GD9:UTILS
    1785   4665.0 4275 TIMER LIB                     GD6:WORK
    1786  29070.5 2622 FLIGHT LIB                    GD6:WORK
    1791   8436.0 93CD TOOLS System Utilities        GD2:HORN2
    1791  13519.0 0141 CSINO PLUS (Demo)             GD7:GAMES
    1793    275.0 331C IF ERROR (ver. A)             GD2:HORN2
    1793    434.0 9CA1 IF ERROR  ver. B              GD3
    1795   1017.0 B2AB (LIB1795, Programmer's tools) GD7:FRANCE
    2000    124.5 97F9 (Runs AUTOEXEC at warmstart)  GD7:UTILS
    2046    n/a    n/a HP-41C Emulator card          HP 82210A
    ---- -------- ---- ----------------------------- -------------------

    BYTES and CRC are calculated by the HP 48 BYTES command on the library
    object itself, not its name.  The ID and bytes are in decimal; the CRC
    is in hex.

    The 41 Emulator Card's libraries are not proper RPL objects.
    Their size and CRC cannot be computed by the BYTES command.

    "GD7:FRANCE" means "in the FRANCE subdirectory on EduCALC Goodies Disk
    #7".  GD1 and GD3 had only one subdirectory each.

    "HAY" means Hither And Yon.  Files in the "HAY stack" can be found at
    various ftp archive sites, such as seq.uncwil.edu, and at various
    BBS's, such as HPCVBBS.  HAY is a polite way of saying: "It's
    everywhere, so I'm not going to help you find it."  The obvious
    analogy to the proverbial needle and haystack, however, is apt.

    +---------------------------------------------------+
    | HP 48 Resource Allocation Guideline: Library ID's |
    +---------------------------------------------------+
    | 0000 - 0256  Take-over libraries; do not use!     |
    | 0257 - 0512  HP ROM-based libraries; do not use!  |
    | 0513 - 0768  HP RAM-based libraries; do not use!  |
    | 0769 - 1536  3rd Party (assigned by HP)           |
    | 1537 - 1792  3rd Party (assigned by HP)           |
    | 1793 - 2047  Command-line; do not use!            |
    +---------------------------------------------------+

    Notice to programmers: User Flags 1 through 32 are reserved for end
    users' applications. Do not use them in libraries. User Flags 33
    through 64 may be used by libraries, but there is no HP channel
    through which they are officially allocated. Use them with caution and
    only if necessary.  (Cf. "HP 48 Insights" by Bill Wickes, page 176).

    Note: EduCALC #'s are Stock Numbers; for further info call EduCALC at
    (800) 677-7001 or (714) 582-2637, Mon-Fri 8am-5pm California Time.
    Goodies Disks' stock numbers are #GD1A, #GD1B, #GD2A, #GD2B, etc,
    where "GD" means Goodies Disk, "1" ("2", etc.) is the number of the
    disk, and "A" means 5.25 inch, "B" means 3.5 inch.

    HP #'s are HP part numbers, which EduCALC uses as their stock numbers.

******************************************************************

6.4 What information is there on the internals of the HP 48?

    The most important documents are part of the "System RPL" development
    tools, a completely unsupported set of IBM PC tools created by HP
    Corvallis (the creators of the HP 48).  The tools, which run on
    MSDOS machines only, contain documentation on:

        * System RPL (which includes information on HP 48SX display
          graphics, keyboard control, etc.).
        * Saturn assembly language ("Saturn" is the name of the CPU in
          the HP 48), including information on a Saturn assembler.
        * A system RPL compiler.
        * A Saturn object file linker.

    The completely unsupported system RPL development tools and
    documentation are available to customers free of charge to help them
    in HP 48 application development, subject to certain legal terms,
    which are given with the tools (they're too long and detailed to
    give here).

    You can get a copy in one of the following ways:

        * Anonymous ftp to hpcvbbs.cv.hp.com [15.255.72.16].
        * Get Goodies Disk #4. For info, see Appendix H.

******************************************************************

6.5 Are there any viruses for the HP48?

    There are several, and most are French.  In the United States, a 
    virus called the "Michigan virus" erupted a couple of years ago.  
    There is a program on Goodies Disk #8 that checks for the Michigan 
    Virus.  Currently, viruses do not pose an appreciable threat on HP48's 

******************************************************************

6.6 How do I store fields of variable length string data in a compact,
    rapidly accessible manner that does not require the overhead of
    storing strings in lists?

    See Appendix E, "Compact Data Storage", near the end of this file.

******************************************************************

6.7 What is "Vectored Enter", and how do I use it?

    Note: This works on the SX, but I have no idea whether or not this 
    works on a G/GX.  Use at your own risk :-).  If you try it, let me 
    know one way or the other so I can say if it works or not here in the 
    FAQ! 
    
    From: billw@hpcvra.CV.HP.COM (William C Wickes)

    The HP 48SX manuals do not document a very powerful feature that we call
    "Vectored ENTER," that allows you in effect to redefine or bypass the
    command line parser and to have a shot at the stack etc. after the command
    line has been executed.

    Keys that execute an automatic ENTER perform a two-step process:

    1.  The command line is parsed and evaluated.
    2.  The key definition is executed.

    When flags -62 and -63 are both set, the system extends this process as
    follows:

    1.  The current path is searched for a global variable named *aENTER
    (here "*a" is the Greek alpha character--character 140).  If present,
    the command line is entered as a string object and *aENTER is
    executed.  If absent, the command line is parsed and evaluated
    normally.

    2.  The key definition is executed.

    3.  The current path is searched for a global variable named *bENTER
    ("*b" is Greek beta--character 223).
    If present, then a string representing the key definition is put on the
    stack, and *bENTER is executed.  The string is the key definition
    object's name if it is a command, XLIB name, global or local name, or
    an empty string for other object types; its primary purpose is to implement
    things like the TRACE mode on other calcs, where you can print a running
    record of what you do.

    A simple example of the use of *aENTER is to create a more convenient
    binary calculator, where *aENTER slaps a "#" on the front of the command
    line so you don't have to bother when entering numbers.

******************************************************************

6.8 What is "WSLOG"?

    It is an undocumented feature which stands for "Warm Start LOG".
    Type in WSLOG in caps, and calc will list the time and cause of the
    last four warm starts.  This feature helps HP tech to fix your baby,
    in case it crashes.

    0 - log cleared by <ON> <SPC> then <ON>
    1 - low battery condition, auto deep sleep mode invoked to save battery
    2 - hardware failed during IR (time out)
    3 - run through address 0
    4 - system time corrupt
    5 - deep sleep mode wake up (alarm?)
    6 - unused
    7 - CMOS test word in ram was corrupted
    8 - abnormality was detected about device config
    9 - corrupt alarm list
    A - unused
    B - card module pulled
    C - hardware reset
    D - system RPL error handler not found in run stream
    E - corrupt config table
    F - system RAM card pulled

******************************************************************

6.9 What are SYSEVALs and LIBEVALs?

    SYSEVALs are addresses that point directly to a location in the HP48 
    ROM.  You must enter the SYSEVAL preceeded by the # sign, and end them 
    with a h(exadecimal), d(ecimal), b(inary), or other base notation.  
    You can use SYSEVALs in UserRPL programs.  Please note that "using 
    SYSEVAL with random addresses can corrupt your memory"  Some SYSEVALs 
    for the SX and GX are the same, and some are different.  This is one of 
    the reasons that many SX programs don't work on the GX.  LIBEVALs work 
    similar to SYSEVALs, however they are only available on the G/GX 
    series.  Used correctly, SYSEVALs and LIBEVALs can speed up certain 
    routines and allow you to do many things you wouldn't otherwise be 
    able to do in UserRPL.  Used incorrectly, they can erase your memory... 
    
******************************************************************

6.10 What are some useful SYSEVALs?

[NOTE: Note that some of the SX SYSEVALS do work on the GX series.  If you 
       find a SX SYSEVAL that works on a GX that I don't have listed here, 
       let me know.  If you know the different SYSEVAL for the GX let me 
       know.  Heck - if you know of any SYSEVALS to add to this list, let 
       me know.... keithm] 

Function                                 |   SX    |   GX    |
-----------------------------------------+---------+---------+
Place null '' on stack to access hidden  | #15777h | #15777h |
     directory                           |         |         |
Invoke EQ writer                         | #68B7Bh |         |
Version string                           | #30794h | #30794h |
Normal label for menu                    | #3A328h | #3A328h |
Directory label for menu                 | #3A3ECh | #3A3ECh |
"Modes" label with bullet for menu       | #3A38Ah | #3A38Ah |
Inverse "solvr" label for menu           | #3A44Eh | #3A44Eh |
Displays the current menu explicitly     | #3A1FCh | #3A1FCh |
Runs garbage collect                     | #05F42h |         |
Waits for keypress w/o busy annunciator  |         | #41F65h |
'A+B*C-D' -> { A B C D }                 | #353ABh |         |
Turns menu off (TURNMENUOFF)             | #4E2CFh | #4E2CFh |
Turns menu on (TURNMENUON)               | #4E347h | #4E347h |
Display string in row 8 (DISPROW8)       | #124CBh | #124CBh | 
Locks alpha entry mode                   |         | #40D25h | 
Unlocks alpha entry mode                 |         | #40D39h | 
Lock alpha entry for one keystroke       |         | #3AA0Ah | 
Starts MatrixWriter; creates new matrix  |         | #44C31h | 
Starts MatrixWriter; edits matrix        |         | #44FE7h | 
Switches LCD to stack display            |         | #1314Dh | 
Switches LCD to graphics display         |         | #13135h | 
Suspends the ticking clock display       |         | #39531h | 
Reclaims stack display                   |         | #130ACh | 
Turns menu display on                    |         | #4E347h | 
Converts string to name                  |         | #05B15h | 
Converts name to string                  |         | #05BE9h | 
Displays current menu, freezes menu      |         | #3A1E8h | 
Displays current menu                    |         | #3A1FCh | 
Updates Stack Display (DispStack)        | #39BADh | #39BADh |






******************************************************************

6.11 What are some useful LIBEVALs? (GX)

Function                                                 GX
-----------------------------------------------------+----------
                                                     |
Creates an XLIB name from two bints                  |  #7E50h
Displays message box with grob                       | #B1000h
CMD  last command window                             | #B2000h
CHARS application                                    | #B2001h
MODES application input form                         | #B41C1h
flag browser  (returns t/f to level 1, just drop it) | #B41CFh
MEMORY application  (aka variable browser)           | #B41D7h
SOLVE application choose box                         | #B4000h
solve equation input form                            | #B4001h
solve difeq input form                               | #B4017h
solve polynomial input form                          | #B402Ch
solve linear systems of equations input form         | #B4033h
solve TVM input form                                 | #B4038h
PLOT input form                                      | #B4045h
SYMBOLIC application choose box                      | #B4113h
integrate input form                                 | #B4114h
differentiate input form                             | #B4122h
Taylor polynomial expansion input form               | #B412Bh
Isolate a variable input form                        | #B412Dh
solve quadratic input form                           | #B4130h
manipulate expression input form                     | #B4131h
TIME application choose box                          | #B4137h
Set alarm input form                                 | #B4138h
Set time and date input form                         | #B415Bh
Alarm browser   (aka alarm catalog)                  | #B416Eh
STAT application choose box                          | #B4175h
single-var stat input form                           | #B4176h
frequencies input form                               | #B417Dh
fit data input form                                  | #B417Fh
summary stat input form                              | #B418Fh
I/O application choose box                           | #B4192h
Send to HP48 input form                              | #B4193h
Print input form                                     | #B4197h
Transfer input form                                  | #B41A8h
Get from HP48  (immediate)                           | #B50FFh
recalls the contents of the reserve variable Mpar    | #E4012h


******************************************************************

6.12 What is the format of a GROB object?

NOTE 1: Every HP object format is described in RPLMAN.DOC, see this
        file for more info.

NOTE 2: All HP objects are (of course) nibble based.  When viewing them
        on the PC, which is byte based, the low order nib is always read
        and written first.

NOTE 3: HP objects begin with a 5 nib prolog which identifies the object
        type (and other things).  This is the prolog for a grob object..

        02B1E pr HP:DOGROB
        02B1E @  Graphic prolog (/U GROB)

NOTE 4: Every 5 nib sub field of an object, such as prolog, length, etc.,
        is read in reverse order (low nib first).  The grob prolog would
        appear E1B20, or 1E 2B x0 in a hex dump on a PC.  The least
        significant nibble of the next field begins right at the x in x0.

NOTE 5: It is customary to always work with HP objects on the PC with the
        HPHP48-E header (substitute your favorite rom version letter)
        preceding the prolog.  This gives no hassles when downloading
        via Kermit or Xmodem.


PC hex dump of a grob object.. ( remember each 5 nib field is reverse order )

1_  "HPHP48-E" 8 byte ascii string with msb off
2_  5 nib prolog, 02B1E (hex)
3_  5 nib length field, includes length of body AND length and height fields!
    does not include 5 nib prolog.  So, the total #nibs the grob object
    takes in HP memory is this number + 5.  Important!
4_  5 nib height field  ( yes, it is height then width )
5_  5 nib width field
6_  body (described below)


The grob object looking at it using command line EDIT on the HP..

GROB <width (dec)> <height (dec)> < body >
The body is exactly the same looking at it on a PC hex dump or on the
command line EDIT.  Just remember to read low nibble first for hex dump.


The grob body
-------------

Because of hardware restrictions, the number of nibs required to represent
one horizontal line must be even (byte aligned).  So, use this method
to calculate the number of nibs in one line..   (pascal example)

  nibs:= width div 4;
  if nibs mod 4 <> 0 then nibs:= nibs + 1;
  if odd(nibs) then nibs:= nibs + 1;

Then to get the #nibs in the entire body, multiply it by height.
! Remember, the length field must be this total body length + 15 !

For example, a 131 wide grob requires 34 nibs for one horizontal line,
where 5 of the bits are unused.  The first nib in the second line begins
at nib 35 for this grob, etc.
If the grob is 64 lines, then the body is 2176 nibs.
Add 5 for the prolog, 5 for the length field, 5 for height, and 5 for width.
Total object size (on the HP) is 2196 nibs, or 1098 bytes.
The length field should contain 2196 minus 5 for prolog = 2191 (0088F hex)

Note that for each nib, the right-most bit is the left-most pixel on the
screen.  This is nearly always the case for graphic memory.

******************************************************************


END PART 2 OF 4
    
---------------------------------------------------------------------------
keithm@pchaos.dev.com                :-O                   Keith D. Maddock
From Raleigh Hills ( between Beaverton & Portland ), Oregon, USA    R.A.W.:
"Of course I'm crazy, but that doesn't mean I'm wrong. I'm mad but not ill"
KeyWords: Freightliner/GMI-EMI, HP48 FAQ Maintainer(GX-P), Eagle Scout, :-)
             
