**HP48 FAQ Section 3: Questions about ROM versions**

Previous | Contents | Next |

**SX:**The HP48 S is the same as the HP48 SX except that the HP48 S does not have the two expansion slots of the HP48 SX. This means that the HP48 S cannot be expanded and can only access 32K of memory, versus 288K for the HP48 SX (two 128K RAM cards). (Actually, there are third-party RAM cards that contain 256K or 512K on a single card -- this memory is accessed via a bank-switching mechanism.)

**GX:**The HP48 G is the same as the GX except for two differences. The GX has the 2 expansion ports, and also has 128K RAM built in, whereas the G only has 32K.

If you plan on heavily using your calculator, you will probably find that 32K is not enough memory. In fact, some of the best HP48 Programs will not even fit in this memory!

The HP48 G/GX calculators are, basically, slightly faster (by 40%) versions of the HP48 S and HP48 SX calculators, with more features, such as 3D-plotting and a new forms-based interface. Much of the HP Solve Equation Library card is now built-in. See Appendix B-1 for a detailed list of GX features.

Note, however, that the HP48 G/GX is different from the HP48 S/SX in a number of significant areas:

- The HP48 GX comes with 128KB RAM, as opposed to 32KB RAM in the HP48 SX. The HP48 G still has 32KB RAM, however. The HP48 G/GX also has twice the ROM (512K), compared the HP48 S/SX (256K).
- Much of the HP48 G/GX internals have changed, compared with the HP48 S/SX. Unfortunately, this means that many programs written in assembly language or System RPL won't work on the HP48 G/GX. This is especially true of any program that tried to access the display memory directly.
- The HP48 G/GX CPU runs at 4 MHz, instead of the 2 MHz used with the HP48 S/SX CPUs. However, due to various overheads (memory bank switching, etc.), the speed increase between the S/SX and G/GX is less than 2 times. G/GX throughput is approximately 40% faster.
- Slot 2 of the HP48 GX can access up to 32 ports (ports 2-33) by bank switching. Each port is 128KB, for a maximum total of 4 MB in slot 2.

The HP48 G+ was announced 30 March 1998. It is essentially a HP48 G with more memory - it has 128K of memory instead of 32K. All G+ machines have revision R ROMs.

There is no change to other aspects of the calculator model offerings. Specifically, it looks like HP has added to the HP48 family without withdrawing anything. The G, G+, and GX will all continue to be sold.

The press release for the HP48 G+ is at: http://www.hp.com/pressrel/mar98/30mar98.htm

**GX:**Type the command "VERSION". Note that this command is not part of any key or menu, and so you must spell it out.

Type #30794h SYSEVAL. It returns a string, "HPHP48-x", where x is your ROM revision. This works for both SX and GX.

**SX:**- Turn the calculator on (press ON and then release).
- Press ON again, and hold it down.
- While holding down the ON key, press and hold down the "D" key (the fourth white key in the top row).
- While holding down the "D" key, release the ON key.
- Release the "D" key. The display should be blank, with the exception of three vertical lines (one down the centre, and one down each of the right and left sides).
- Press the backspace key (it says DROP and CLR over it). A meaningless string of digits should appear in the top line of the display (mine says "705D9:1B8DA178E5A111B6" -- yours may be different).
- Press and hold down the EVAL key. It should say
something like the following, where the ? is an
uppercase letter indicating the ROM version:
Version HP48-? Copyright HP 1989

- Release the EVAL key. Hold down ON and hit "C" (the third white key in the top row. This is a general reset operation that returns the calculator to normal from the diagnostic stuff (which is where ON-D puts you).

**Rom: A**- DEFINE rounds numbers in user-defined functions if STD is not the current display mode.
- KGET on a zero length file from another machine will cause the calculator memory to be cleared.
- NXEQ from the Graphics Environment with flag -3 set (SYM off in Modes) can overwrite the current equation with a number.
- Displaying the clock in 24-hour format causes the one-digits for minutes to be incorrect in the alarm catalog.

**Roms: A-C**- INV returns an incorrect result if used on an 8x8 or larger matrix. To get around this problem, divide the identity matrix with the matrix to invert.

**Roms: A-D**- Entering a symbolic complex number in polar form like (A,<B) (where < is really the funny little angle symbol), gives an expression in A and B that is wrong (the A and B are interchanged so A is the angle and B is the magnitude).
- If the clock is displayed during an ARCHIVE via RS-232, there is a chance (not 100%) that calculator memory will be cleared, after the transfer. The work-around is to turn the clock display off before doing the transfer. Should your memory be cleared, you will have to restore the contents of memory from the archive.
- 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 returns 'RND(UNKNOWN,7/8'

**Roms: A-E**- There's a bug in the EquationWriter that is "fixed" in the Rev J ROM. See Appendix C-1 for details.

**Roms: E, J**- BESTFIT: Occurs when a two dimensional array is stored in \GSDAT (SigmaDAT). Pressing the BESTFIT softkey multiple times will leave a lot of useless reals on the stack.

**Rom: K**- First HP48 G/GX released; includes various bugs affecting ports. Therefore, the version K ROM was only used in HP48 G units.

**Roms: K, L, M, P**- XROOT Function fails when used with list processing unless X=Y. It does not corrupt memory. FIX: Preceed any XROOT which will use list processing with a SWAP

**Rom: L**- Second HP48 G/GX released; fixed the port bugs. This ROM version is that present in the 2,000 HP48 GXs sold at the ASEE conference for $90 apiece.

**Roms: L, M**- HP48 GX may lose all of user memory when: clock is displayed,
a library object is be stored in user memory, and a RAM card
is lugged in to port one and merged with User Memory. If
all four of these conditions are present and the calculator
is turned on when the clock is being updated by the system,
a loss of all User Memory may occur.
FIX: Just type the following in on your calculator:
<< RCLF -> f << -40 CF OFF f STOF >> >> 91.3 ASN Then turn on USER mode

- EquationWriter/Character Picker Bug: If the size of the equation is greater than the regular size of the screen, calling the Character Picker in Equation Writer will garble the screen.
- If you store an object into a port > 1 while there is a card installed in slot 1, the end-of-obj-sequence marker (00000) is written to port 1 instead to the destination port. This will cause the 'Invalid Card Data' warning to pop up each power on after a while and, in addition, the memory of port 1 gets currupted (if it's writeable). A temporary fix is to remove the card from slot 1 when changing the contents of the card in slot 2. However a better fix is to get the STOFIX library (available on GD#10 or at HPCVBBS, ~1K in size).
- Tail Bug: The TAIL command returns an error on single length
strings. This was fixed to return an empty string in later
Roms. Examples:
"X" TAIL --> Error: Invalid Dimension (Rom M) "X" TAIL --> "" (Rom R)

- HP48 GX may lose all of user memory when: clock is displayed,
a library object is be stored in user memory, and a RAM card
is lugged in to port one and merged with User Memory. If
all four of these conditions are present and the calculator
is turned on when the clock is being updated by the system,
a loss of all User Memory may occur.
FIX: Just type the following in on your calculator:
**Rom: M**- Evaluating a tagged object which contains an operator (+, -, *, /, etc) as the second or subsequent character will leave an External and System Binary on the stack, as well as the original object.

**Roms: L, M, P**- SigmaDAT: Put a NON-MATRIX in \GSDAT (SigmaDAT), run STAT graphical apps, edit \GSDAT. Causes a crash.
- XRECV will fail or cause memory lost if the amount of free RAM left is not about twice the size of the expected file. FIX: See FXRECV on GD 9. Note that FXRECV is not necessary for Rom R, and in fact will not even run properly on Rom R.
- RREF does not transform the matrix into Row Reduced Echelon Form correctly if the first column of the matrix consists entirely of zeros. It may also return incorrect answers in some matrices. A work-around for this bug is to delete any leading all-zero column(s) from the matrix; this may be done using the Matrix Writer, via its -COL menu key, or via commands: 1 COL- DROP (to drop the first column). Since row-reduction operations never change any all-zero column, you already know in advance that the given column(s) must be all-zero in the final result.

**Roms: L, M, P, R**- portnum: { dir ... var } RCL/EVAL fails if portnum >= 2
- Rotation rate to angular frequency conversion bug. See Appendix C-2 for a complete write-up.

**Roms: M, P, R**- Repeated executions of FFT or IFFT can cause a memory loss.
The FFT and IFFT warmstart problem is caused by a CPU
return stack overflow during interrupt handling. The
problem can only occur when the argument to FFT or IFFT
is an MxN matrix with both M > 1 and N > 1. The vector
argument case is immune to this problem.
FIX: To compute the FFT of a matrix without risking warmstart,
expand the matrix into its row vectors using ->ROW,
compute the FFT of each row vector, collect the results
into a matrix using ROW->, expand the matrix into its
column vectors using ->COL, compute the FFT of each
column vector, and finally collect the results into a matrix
using COL->. Except for less precision, this is the
same result as would be obtained by applying FFT on the
original matrix. Use the same procedure with FFT replaced
by IFFT to compute the IFFT of a matrix.
Here are program examples implementing the "Matrix FFT"
and "Matrix IFFT":
MFFT << ->ROW FFTLP ROW-> ->COL FFTLP COL-> >> MIFFT << ->ROW IFFTLP ROW-> ->COL IFFTLP COL-> >> FFTLP << -> n << 1 n START n ROLL FFT NEXT n >> >> IFFTLP << -> n << 1 n START n ROLL IFFT NEXT n >> >>

- Equation Writer/Equation Library interaction bug: If you pick an equation from the EQ library, enter solver for that equation, enter an algebraic on the stack like 'X^2', and press the down arrow key to view algebraic in EquationWriter, the name of the equation will appear in the EquationWriter along with the unassociated algebraic.

- Repeated executions of FFT or IFFT can cause a memory loss.
The FFT and IFFT warmstart problem is caused by a CPU
return stack overflow during interrupt handling. The
problem can only occur when the argument to FFT or IFFT
is an MxN matrix with both M > 1 and N > 1. The vector
argument case is immune to this problem.
FIX: To compute the FFT of a matrix without risking warmstart,
expand the matrix into its row vectors using ->ROW,
compute the FFT of each row vector, collect the results
into a matrix using ROW->, expand the matrix into its
column vectors using ->COL, compute the FFT of each
column vector, and finally collect the results into a matrix
using COL->. Except for less precision, this is the
same result as would be obtained by applying FFT on the
original matrix. Use the same procedure with FFT replaced
by IFFT to compute the IFFT of a matrix.
Here are program examples implementing the "Matrix FFT"
and "Matrix IFFT":
**Roms: M, P**- BESTFIT: Occurs when a two dimensional array is stored in \GSDAT (SigmaDAT). Pressing the BESTFIT softkey multiple times quickly can cause a warmstart, or SigmaDAT to be erased. This occurs sometimes just by pressing BESTFIT repeatedly, regardless of \GSDAT content. This bug can also be triggered by pressing the BESTFIT softkey quickly after pressing any other key. Simply pressing MODL then BESTKEY quickly will trigger the bug.

**Rom: P**- PROOT: If you put a matrix of coefficients on the stack and press PROOT repeatedly, you will get a warmstart.

**Roms: A-R**- MatrixWriter Bug: This shows up when deactivating and reactivating any of the two direction movement fields. If you do this, the active matrix field won't move as it's supposed to. For example: Launch the matrix writer (check that your GOFORWARD field is activated). Type [1] [ENTER]. The active matrix field moves forward as it should. Deactivate the GOFORWARD field and activate it again. Now enter [2] [ENTER] [3] [ENTER]. The digits should show up on the same row, but they don't, because after you deactivated and reactivated the GOFORWARD field, the active matrix field stops moving according to the movement fields.
- DTAG Bug: When the
`DTAG`

command is executed without any arguments on the stack, the error message "XLIB 0 0 Error" is given, which is non-standard.

**Roms: K-R**- Equation Library Solver and Multiple Equation Solver Bug: Pressing MSOLVR or MUSER after setting user flag 63 can cause Memory Clear. Example: CLEAR, 63 CF, EQNLIB, down-arrow, ENTER, down-arrow, [SOLV], NXT, 63 SF, right-shift MUSER, DROP --> Memory Clear. This bug is also found in the HP Solve Equation Library Card (HP 82211B, but not 82211A) for the SX.

The revision J ROM has a faster equation writer, as well as some bug fixes. Scrolling of graphics is also faster.

One "problem" is that the revision J ROM changed some undocumented ROM entry points, which broke those programs that used them. If you have a Rev J ROM, you will not be able to run some old programs.

These versions either were never released to the public, or were skipped over.

I have received confirmation of the existence of a HP48 S with ROM revision F. So it appears revision F was in fact released to the public, although very few must have made before revision J came out.

When the G/GX first came out, HP had a trade in program. This is no longer in operation. The only option remaining is to try to sell your S/SX privately.

As far as I know, not any more. They had a program a in early '94, but it is over now. Contact the following for more info:

```
```
Hewlett-Packard Corporation
Calculator Support
1000 NE Circle Blvd
Corvallis, OR 97330
Phone: (970)-392-1001

- Revision R is the latest ROM version of the G/GX series.
- Revision J is the last ROM version of the S/SX series.

Here's the top reasons to buy a S/SX instead of a G/GX (Thanks to all who contributed):

- May be slightly cheaper, having only 32K RAM.
- It isn't THAT outdated.
- So what if it's a little slower?
- You didn't need all those useless equations, graphics capabilities, and math and science functions anyways!
- If you break it, you're out of less money!
- You like seeing how much you can fit into 32K RAM.
- You like slow file transfers, using Kermit instead of X-Modem.
- You want to be able to use all those lists of SYSEVALs for the SX.
- You like having only 3 ports available max. 33 is ridiculous!
- Since it doesn't have a built in equations library it is less likely to be banned on tests.
- Only wimps need GUI's, dialog boxes, and choose lists.

Previous | Contents | Next |