Item: 760 by billw at hpcvra.CV.HP.COM Author: [William C Wickes] Subj: HP 48 revisions Date: Mon Sep 17 1990 16:56 Eric Toonen recently posted a list of HP 48 bugs, and others have asked me various questions about the list. So here are some comments on those bugs. Also, many people have questioned my use of the term "version 1E", thinking that the "1" must mean something. It doesn't. In R&D we have always referred to the various HP 48 code versions as 1A, 1B, etc. I just forgot that the "1" hasn't been used "in public." Generally, a letter change represents a new version that has various defect fixes but no design functionality changes. A number change is associated with a major redesign, not defect fixes. For example, the HP 28C had versions 1BB and 1CC--two ROM's, two letters (There were 1AA prototypes built, but never sold.) The HP 28S did have functionality changes relative to the HP 28C, so its code was version 2BB. Since you never know when a revision will be necessary, the revision codes only work backwards. That is, a version 1E implies that there was a version 1D, but not that there will be a 1F--or a 2A. * Regarding the bugs in Version D: > [1] (This one was documented by HP) (X,\<)Y) in the equationwriter > has X and Y interchanged. Fixed in E. > [2] (This one was documented on the net) ARCHIVE crashes when done if the > clock is in the display. Fixed in E. Note that it doesn't always crash, and when it does it waits until the archive is finished. > [3] SST\|v recalls a directory rather than entering it. Side note: > it is made into a new object. (Solution: Use NEXT to check whether or > not the next is an unquoted directory name, and use SST if it is) Not changed in E. What SSTv is doing is recalling a stored object, then if it is a program it gets single-stepped, otherwise it gets executed. The 48 manual does not mention that this behavior is different from SST for directories. > [4] The evaluation of undefined local names does not function > properly. For example, try the following program. The 1 and 2 can be > any value. > > 1 2 > \<< \-> x > \<< > \<< \-> y 'x' > \>> > \>> > \>> > EVAL EVAL > > This program leaves an 'External' after giving the error "Undefined > Local Name" (This bug is in both HP28C's, the HP28S and HP48's A > through D !) Not fixed in E. This does not have anything to do with evaluating local names, but is a defect in ->, which forgets to mark the stack for error recovery. If the first object in an algebraic following -> is an undefined local name (an unresolved XLIB name would probably do the same), then as many "bad" objects are returned to the stack as -> took off. This bug is the new champion for longest undiscovered RPL bug. Fortunately, it doesn't really have any bad practical consequences, as long as you discard the system objects if you ever do run into this error. > [5] When you enter a command line (without starting PRG entry > mode), and you go to the PTYPE menu, select a plot-type, the command > line is evaluated, but left in the display, and you can start a new > command line underneath. Not fixed in E. Only cosmetic. > [6] You cannot enter a GROB of size 0 x 0 unless it is the last > thing on the command line. A syntax error occurs on the thing after > the "GROB 0 0". (Solution: You can type #0 #0 BLANK) Not changed in E. > [7] The calculator can be made to recurse by defining a unit in > terms of itself. (Press ON and C to exit the recursion.) Not changed in E, and not worth the performance penalty and complications to try to change. Solution: Don't Do That. > [8] The parser does not check enough in an edited Directory > object. With some holes resulting: > > [8a] Resulting from [8], the calculator can be made to recurse by > editing a Directory object, defining a variable as itself. (Press ON > and C to exit the recursion.) Not a bug. You can do the same with STO or by VISITing a variable, and you definitely would not want the calculator to prevent it. There are many circumstances in which it is desirable to store a variable's name in the variable. > [8b] Resulting from [8], you can 'hide' a variable, by editing a > Directory object, and name a variable the same. Then you have a > directory containing variables with the same name, of which only the > first can be evaluated, recalled or stored in. There are labels for > every entry, but only the first one determines whether or not a > directory overscore is displayed for (all) the labels. Never said you couldn't do this. Not a bug. > [8c] With [8b] in effect, if one of these (named-the-same) > variables is a directory, you can see the first (even if that one > isn't the directory!) in the plot-catalog. Ditto. > [9] When you VISIT a directory, it recalls and edits correctly, > but the edited directory cannot be stored back. Not a bug. This is part of the general rule that you can't store into a non-empty directory. > [10] When you strike any key, and quickly thereafter hit [ON], you > will go to the HOME directory. All flags are left intact, you can even > continue with your command line (if you had one). Fixed in E. > [11] While typing an equation in the equationwriter with implicit > () off, and then turn the implicit () on, when typing a backspace, the > equation changes as if implicit () were on all the time (losing the > correct equation). You cannot restore your original equation, because > if you reverse these actions, it inserts parentheses. (Bill Wickes > says this is not a bug, but STORC considers this a bug, because you > can not reverse this action.) He still says it's not a bug. > [12] Some kermit error messages have carriage-return and line-feed > characters at the end. This results in blocks on the screen. They > occur (at least) after the messages "Transfer failed" and > "Interrupted". Not changed in E. > [13] This is not really a bug, but it is weird. When you type CLUSR > (preferably in a list or a program :-), it is displayed as CLVAR. The > history of this fact is that CLUSR was the HP28 command, and CLVAR is > the HP48SX command. CLUSR is an alias for CLVAR, to help with execution of HP 28 programs. > [14] The keys STO and PURGE don't have correct string descriptors > inside. This is because the LASTARG work-around is in the key > descriptor, rather than in the command itself. This results in the > following facts: > > [14a] When you type STO or PURGE with too few arguments, you get > "Error:". When you type STO or PURGE with enough, but wrong type > arguments (reals, for example,) you get "STO Error:" (Yeah, or "PURGE > Error:") (Solution: (This disables the LASTARG work-around.) When Usr > mode is on, explicitly re-assign PURGE and STO to the PURGE and STO > keys. You can do this with the following command: { STO 32 PURGE 54.2 > } STOKEYS) > > [14b] \GbENTER (with vectored enter in effect) gets an empty string > when you pressed the STO or PURGE keys. (Solution: (This disables the > LASTARG work-around.) explicitly re-assign PURGE and STO to the PURGE > and STO keys. You can do this with the following command: { STO 32 > PURGE 54.2 } STOKEYS) The LASTARG recovery associated with the STO and PURGE keys is a feature, not a bug. > [15] \|vMATCH and \|^MATCH don't check for equations or > expressions. This results in the fact that you can get multiple equal > signs in a single symbolic. (You can do this with EXSUB on the HP28S > and HP28C.) Example: > > 'A=A' > { 'A' '7=8' } > \|vMATCH > > resulting in '7=8=7=8'. > > (Recalling this in the equation writer correctly results in an > "Invalid Syntax" error.) Not a bug. You wouldn't want MATCH to have to reparse an expression upon every substitution. If you don't like it, don't do it. > [16] If the custom menu is your current menu, and you enter a > directory of which the variable 'CST' does not contain a list (or a > name of a variable that does), you will cause a system halt. > (Solution: do not use bad values in 'CST' to disable the CST button.) Not fixed in E. Note that this is not a system halt--it's like the reset done in [10] above. The stack remains intact. > [17] TRNC and RND allow for an array in level 2 and a symbolic in > level 1 of the stack. This allows you to put an array in a symbolic. > Example: > [ 2 3 ] > '7/8' > RND > > returning 'RND(UNKNOWN,7/8)' Fixed in E.