HP48 FAQ Section 6: Questions about cards, data transfers, batteries, and hardware
From: Dave Arnett
The guts of the HP48 keyboard are assembled from several layers of mylar and similar material. Some of the layers have conductive ink to create switch contacts. Some are insulators, with appropriately located holes through which the switch contacts meet. Some are embossed with spherically domed areas, to provide the snap-spring feel when you press the plastic keys. The entire multi-layer sandwich is assembled onto plastic pegs on the backside of the HP48 top case, along with the metal chassis, and then the pegs are "heat stacked", positively capturing and holding the matrix together.
These parallel planes can act like a capacitive speaker. Most loudspeakers in home electronics are inductive: a sheet or cone moves because current passes through an attached coil positioned in a magnetic field. A capacitive speaker creates sound by moving a sheet or diaphragm due to electric charge forces, whether attracting or repelling. The HP48 keyboard has the necessary characteristics to be a very inefficient (therefore quiet) capacitive speaker.
When the HP48 "scans" the keyboard, charges are placed on the parallel sheets of mylar. They tend to move as a result of the charge, and create a faint squeal or whine. The loudness will depend on a number of factors, and can vary significantly from HP48 to HP48. Some folks report that, on their HP48, the sound is stronger on the back than on the front; others report the opposite.
It is possible to do this by opening up the case and adding some memory chips. There are several containing instructions and schematics available at:
There is a web page on how to open your HP48 from the back at http://www.contrib.andrew.cmu.edu/~drury/how2open.htm
This is an illustrated guide on how to open your HP48 from the back. It has full instructions, as well as 15 pictures of the calculator in various stages of disassembly.
An alternate way to open your HP48 and upgrade it to 256K is described at the following site, along with lots of pictures:
Another good site is:
WARNING: It is possible to ruin your HP in the process of performing any one of these upgrades. Do not even attempt it unless you are adept at working with small electronics. The FAQ maintainer and the authors of the instructions take no responsibility for anything you do to your HP!
From: Lee Studley <RStud39515@aol.com>
I recently did a modification to my 48G by replacing the 32K ram with a surface mount 128x8 RAM. Afterwards, I sandwiched 2nd and 3rd RAM chips by stacking them up and soldering. The 2nd CS was jumpered over to the expansion pin 21a. The decode for the 3rd part was easy to figure out. I've also added a lithium battery to insure memory retention. This thing now has 128K user memory, 128K in port 1, and 128K in port 2. Additional port 2 chips can easily be added.
The 3 volt lithium battery used was the generic coin type. I just made room for the holder and battery by removing the aluminum shield up to the plastic post near the piezo element. The positive terminal of the battery goes through a 470 ohm resistor into the anode of a schotky diode (only 0.2 volt forward drop). The cathode end of the diode feeds the positive side of the big 1000 uF capacitor near the added 74HC00. This is the memory retention cap when the batteries are removed.
This way, the lithium battery only gets used if the main batteries are removed or very low. Seems to work well so far. The ground connection broken by cutting the aluminum shield kills the reset and piezo contact points. To fix this, I stretched the original piezo contact spring and cut it in half. Then I soldered the cut piece to the ground "twisted" tab near the original spring. (readers should verify this ground with a meter.) This restored the lost functions.
Some places that sell the HP48 also sell the cable required for interfacing with a PC. Unfortunately, most don't.
For information on how to build your own cable, see Appendix D-1.
If you want to buy one, there are a few options. Places like ElekTek sell them for around $20-$25.
There are a few netters that make cables for sale also. Contact:
If you live in a larger city, you can look in the Yellow Pages for a listing of HP authorized dealers who either have the cables in stock or can order them in about the same time a mail order place can, but for a lower price..
HP offers two link kits, one which sells for about US$20, and the other which sells for about US$50. The only difference between the two is the higher priced kit comes with software and a manual. The cable, however, is the same in both kits.
As mentionned in the next question, free alternatives to this software are readily available. HP's software also includes some assorted miscellaneous programs and games, all of which are also available from HP via FTP or WWW.
In Windows 3.x you can use Terminal (in Accessories). In Windows 95 and OS/2 Warp, HyperTerminal can be used, or you can use any other "terminal emulator" package with some level of embedded Kermit file transfer capability.
However, the most complete functionality is available with full Kermit, which can be downloaded from ftp://kermit.columbia.edu/ or HP. Columbia University is the original site for Kermit and has versions for nearly all operating systems, including all forms of Unix, Amiga, and Macintosh.
Of course if you have a G/GX machine you can use X-Modem instead of Kermit (X-Modem is generally faster). [Hyper]Terminal works fine for X-Modem as well. Alternative file transfer software is available from the FTP sites mentionned in the Appendix, or can be purchased (e.g. Donnelly's HP48 File Manager).
Also of interest are several freeware/shareware programs, including the HP48 Explorer for use with Windows 95. This can be obtained at http://members.tripod.com/~nberry/hp48g/index.html.
It turns out that it is the receiver that is "crippled". The transmit range is somewhere around several feet, and some people have actually written programs to make the HP48 emulate some remote controls (see Appendix E-1 for suggested programs).
There are currently two stories going around as to why. I will present both of them in the interest showing all sides of the story. You are free to decide which you believe:
Yes, it can, although slowly. Set the HP100LX at 2400 bps, and put it in server mode (under the Kermit Commands menu). Then you can send stuff from your HP48 to your HP100LX.
From: David Johnson
I have had great success communicating via IR with my HP48 GX rev. R and a NEC Versa 6050MH notebook PC. However, I have found that speed is limited to 2400 bps. I have successfully used IR communication under Win95 with DOS Kermit 3.14, HyperTerminal, HP48 Explorer, Yellow Computing Transfile Win 48, and Kermit v0.85 (Win32).
I have had no success with Grab48 screen capture by HP or with HP PDL (only because I can't use a port higher than COM2). In my case DOS Kermit requires a command like:
set com3 \x03E8 \9 ; Syntax for nonstandard address or irq
Which is the port and IRQ specified in my BIOS setup. It doesn't seem to matter what IR speed I choose in the BIOS setup. However, in all cases (even native Win95 applications) I must disable the IR drivers in Win95 and talk straight to the port/IRQ specified in the BIOS. I can easily turn IR support on and off within a Win95 session with no ill effects via the control panel.
Note that the HP48 is not actually IrDA compatible, but communicates with IR devices in non-IrDA mode.
From: Derrik Pates
Yes you can, but you need the HP PCL library from http://www.hpcalc.org/hp48/utils/misc/pcl.zip. It allows you to communicate with any printer that supports PCL (all HP DeskJets and LaserJets, as well as some other laser printers and inkjet printers). You can hot-switch your resolution and turn PCL on/off with software commands.
Although newer HP printers such as the 5P and 5MP have an IR port, you cannot use it to print directly from your HP48.
Some versions of Kermit distinguish between ASCII and binary files, and so you have to worry about the transfer modes at both ends of the connection (the HP48 SX end and the computer end). For example, when receiving ASCII files, Unix Kermit must translate CR/LF pairs into LF. If the HP48 SX is transmitting a binary file, but the Unix Kermit is expecting ASCII, any CR/LF pairs in the binary file will get translated to LF, corrupting the binary file. Unfortunately, you cannot "uncorrupt" the corrupted binary file by simply reversing the transfer and expecting Kermit to translate LF to CR/LF. This is because the binary file may contain occurrences of LF that were not originally part of a CR/LF sequence.
When a binary file gets corrupted, it will display on the stack as a string, starting with the characters "HPHP48-", and continuing on with a bunch of garbage. Thanks to two programs, these strings can be reconverted to binary files right on the HP48. These programs are: FIXIT, by Joe Horn and Mika Heiskanen, or OBJFIX, written by our friends at HP. These are included in Appendix A-2.
The major difference between FIXIT and OBJFIX is the way they operate. I have never personally had any problems with either. FIXIT takes the bad "HPHP48-" string from level 1 of the stack, and replaces it with the correct binary object. OBJFIX takes the name of the variable in which the "HPHP48-" string is stored from level 1 of the stack, and puts the correct binary object directly in the variable where the bad string was stored. It's up to you which you prefer. I would suggest reading the documentation of both before using either of them.
There is also a quick fix available from Dan Kirkland:
Here is a simple SYSEVAL program that will return a pointer to the object in those data transfer strings that start with "HPHP48-"
Checksum: # 8FEh
That's all! (Simple huh!) Name? Whatever you want!! Works on all 48s (S/SX, G/GX)
<< "12" SWAP + # 402Bh SYSEVAL # 62B9Ch SYSEVAL >>
From: Jorge Costa
ASCII file headers such as %HPHP: T(3)A(D)F(.); are created by the HP48 when an ASCII file is sent to the PC and read when a HP48 ASCII file is received from the PC. They serve to preserve various settings on your HP that affect ASCII transfers. They do not affect binary mode transfers.
Three parameters are saved: (T)ranslation Mechanism, (A)ngle Mode, and (F)raction Mark.
The possible ASCII translation schemes are as follows:
T HP48 -> PC PC -> HP48 --------------------------------------------------------- 0 No translation No translation 1 char 10 -> chars 10,13 chars 10,13 -> char 10 2 Action 1 & translate Action 1 & translate chars 128 - 159 \000 - \159 to HP48 chars 3 Action 1 & translate Action 1 and translate chars 128 - 255 \000 - \255 to HP48 chars
To choose your favorite set, just type the number followed by the command TRANSIO on the HP48 command line. Depending on which translation scheme you are using, the HP48 converts a different set of characters to PC ASCII format. I would advise using option 3, since this forces the calculator to translate all symbols to pure ASCII (look for the table in page 27 - 16 of the HP48G series user's guide). If you choose to use option 0 or 1, all characters from code 128 to 255 would be interpreted following the current code page of the PC setup - it will be unreadable!
Also, if you are receiving ASCII files in your machine and you get a bunch of black squares, you can be fairly certain you are using translation mode 0, which makes the HP receive and store all newline characters (instead of eliminating them).
The HP48 can handle two types of fractions marks - the decimal dot or comma. This option is available from the MODES input form (48G/GX) or menu 64.01.
With regards to the ASCII header we have:
If you try manually editing an ASCII file on the PC without a header, then try to send it to the HP48 using Kermit, you can obtain the following results:
Number format Text sent Result (object stored) . 3.4 3.4 . 3,4 3 4 , 3.4 3 4 , 3,4 3,4
As you would expect, sending files with ASCII headers to the HP48 with mismatching fraction mark settings, leads to an "Invalid Syntax" error during transfer.
Now take a look at rows 2 and 3 of the table above - the object received by the HP48 is stored as a program object without the << and >> composed by two real numbers - well, that normally can't be done in User RPL!
In fact the resulting object is a very simple System RPL program object (the internal language of the HP48). The conclusion is that when a file is sent without an ASCII header, the HP48 translates numbers with mismatching formats into System RPL secondaries (programs) of the form:
:: %IntegerPart %FractionalPart ;
From: Dan Kirkland
The reason the HP48 Kermit routines are so slow is because they are written in System RPL. Everytime the HP48 receives a packet (received as a string), it copies the previously received packets (string #1) and the new packet (string #2) to a new string (which becomes string #1 when the next packet is received). This is why the HP48 Kermit gets slower and slower on big transfers (string #1 just keeps getting bigger).
As to sliding windows... Sliding windows really don't help much with a clean, lag-free connection. And as most people connect their HP48 directly to the computer they are transfering to/from with a very short line, it is almost always very clean and lag-free. So, sliding windows have very little to offer HP48 transfers.
Yes, properly written Kermit routines should be at least as good as ZModem, even without sliding windows. And with a dirty, lagged connection, Kermit with sliding windows will blow ZModem away. But then, this just doesn't happen very often with HP48 connections.
Some claim that the HP48 can't do ZModem without tons of trickery because it doesn't have a large enough input buffer. While this is true, it shouldn't be too hard to do. And the same is true for Kermit if it is going to get ZModem type speed! Small packets are more reliable, but much bigger packets are needed for speed.
Pre-Rev R. G Series 48's had a bug that would sometimes cause XRECV to fail if there was not twice the amount of room free for the incoming file. FXRECV, a fix for this bug, is available on the Horn 9 disk in the directory \HP as FXRECV. There is more info about this bug there as well. Note that FXRECV is not required for Rom R, and in fact will not run properly on Rom R.
To use the least memory when doing transfers, it is a good idea to use the built-in "Transfer..." application only to set parameters (Wire, Baud, etc...) but not to actually start a transfer with it; instead, press ENTER, then do either left-shift RECV (Kermit) or 0 FXRECV (Modified X-Modem). Avoiding the fancy "dialog box" application leaves more memory free at the time of actual transfer.
For best quick-start of a transfer, start the Kermit receive side before the transmit side. For X-Modem the opposite is true: start the transmit side before the receive side (with only a short interval between each side's start). Experiment a bit to find out what works best for you.
Here is a small program for Kermit that lets you receive directly to a port:
\<< -36 SF 1 \-> a \<< 'a' RECN a \>> SWAP STO \>>
For the argument use either just a number (if receiving a library) or a port-tagged name such as :0: name (for other objects, and in fact for libraries as well, but only the port number is used).
This program may be simpler to follow than the User's Guide directions for installing a library, since it encapsulates the several steps of storing in memory, recalling to stack, purging the variable, and finally storing to a port. Even if you forget to supply the portname argument, the received object will still appear on the stack (provided flag -55 is clear), and you can finish storing it afterwards.
The symbols in this document such as \-> and \GS+ are the ASCII representation of the special HP48 graphical characters. See the section "Character Translations" in the manual for a complete table of symbols <--> ASCII representations.
Chapter 33 (Volume II if 2 volumes)
Page 27-16 HP48 G Series User's Guide
Looking at the pins of the HP48 (the following diagram is showing the pins on the HP48, as you look at the calculator):
_________ | o o o o | \_______/ ^ ^ ^ ^ | | | \------ 4 Signal GND | | \-------- 3 RX (input to the HP48) | \---------- 2 TX (output from the HP48) \------------ 1 SHIELD Stated another way: HP48 IBM 9 PIN IBM 25 PIN (From the outside edge -> inward) SHIELD------------------- SHIELD---------------- SHIELD TX (Output)<-------------2 RX (Input)------------3 RX (Input) RX (Input)-------------->3 TX (Output)---------->2 TX (Output) SGND---------------------5 GND-------------------7 GND
This information is also on page 27-7 of the G/GX manual.
HP has made available an UNSUPPORTED document called the "HP48 I/O Technical Interfacing Guide", which contains information on the wired and serial I/O hardware. Another HP document available is the "HP48 I/O Software Interfacing Guide". Also, there are a number of guides contributed by users on making your own serial/IR hardware.
Look at http://www.hpcalc.org/hp48/docs/programming/ as well as the ftp sites listed in the Appendix. If you find a good document, let me know so I can put it here!
You use a program called "INPRT", which is available on GD #9. Any previous version will crash the GX. The new version's checksum is #EDF3h, and the old, SX-only version's checksum is #2280h.
For each program that you want to transfer, you use the HP 28S to print it to the I/R output; INPRT, running on the HP48, reads the I/R output of the HP 28S and converts it into a program string.
The Rayovac "Renewal" batteries have proven themselves to be reliable in the HP48, but there are some problems with Nickel Cadmium (Ni-Cad) batteries. You'll have to decide if using rechargeable batteries is worth putting up with the problems associated with them:
The following 48 program reports the status of the ALERT annunciator. The ALERT annunciator is activated by alarms or low battery.
This program is provided free of charge "as is" and has no warranty. No one is liable for any consequential damages. Preston
%%HP:T(3)A(D)F(.); \<< RCLF 8 STWS #FFh #0h + #10Bh #6595Ah SYSEVAL #8h AND #0h > SWAP STOF \>>
You forgot to turn ON the calculator before changing the battery. The HP only supplies power to the RAM card while the HP is turned on. While the calculator is turned off, no power is supplied by the calculator, and all power comes from the RAM card battery. If you then take out the battery from the RAM card while the calculator is turned OFF, the RAM card has no source of power, and you will lose all of the contents in the RAM card.
This message is usually seen when you plug a brand-new RAM card into an HP48. In this case, this message is normal and is harmless. It just means that there was no (valid) data on the card.
This message can appear when a RAM card contains ports you have never used. Press purple/left shift-LIBRARY. Hit NXT, then the PINIT softkey. This will initialize all available RAM ports. It does not affect data already stored on the card.
If you see this message under any other conditions, it could be one of the following:
If the battery is operational, then try to store something on the card. If you still get the error message, then backup all your info to a computer or another 48, and do a hardware reset.
While some cards may work, there is a chance that you may severely damage your HP48. You should only use cards specifically designed for the HP48. Naturally, HP sells such cards, and some third parties also make cards that will work in an HP48. Some cards work with both the S/SX and the G/GX. Some, however only work on the S/SX, or only on the G/GX. Make sure that the card is designed to work for your version before using it.
The S/SX can only naturally support up to 128K per port. HP sells 32K and 128K RAM cards. However, TDS, using software "bank switches" produces 256K and 512K RAM cards. These bank switching cards do not work in the G/GX series. CMT also makes 128K cards, which work in all HP48 calculators.
While you cannot use the TDS 256K and 512K cards, Sparcom has come out with 256K and 512K cards for the G/GX only. HP also sells 1MB RAM cards that work for G/GX only. The G/GX is able to accept a 4MB RAM card, but none are on the market at this time.
From: Dave Arnett
The HP48SX had three layers of write protection:
In developing the HP48GX, we changed card handling in some significant respects. I have recently posted information to the newsgroup on how the upper half of ROM and the card slot 2 are controlled through one pin of the Yorke CPU IC in a multiplexed fashion. There are some details about the Yorke chip related to how various Saturn Bus deviced configure and unconfigure which required me to make the following hardware assignment changes:
Hardware Resource HP48SX HP48GX CE1- Card Controller 1 Card 1 Bank Select Controller CE2- Card Controller 2 Card 2 Card 1 CE3- Card Controller 3 Unused Card 2 CDT1- Card Detect 1 Card 1 Card 2 CDT2- Card Detect 2 Card 2 Card 1
Clearly, we had to assign Card Controllers and Card Detects in pairs, as much as possible. Otherwise the hardware lockout would make a mess of things.
A write protected RAM card in GX slot 1 has hardware lockout protection, since CDT2 can lock write actions to CE2.
A write protected RAM card in GX slot 2 does not have the same HP hardware protection. CDT1 is hardware coupled to CE1, which drives the Bank Select Controller. Some may have wondered in my recent posts why the protocol for setting up bank settings uses READ operations rather than WRITE operations. Now you know: A WRITE operation to the Bank Select Controller would be ineffective if a ROM or Write-Protected RAM card is in Slot 2!
The closest approximation to hardware write protection lies in the BEN (Bank Enable) line, which is bit 6 of the Bank setting. Unless BE is set high, all attempts to access slot 2 are forbidden. BEN is pin 10 of the 74HC174 chip. This line goes to pin 5 of the NAND chip to prevent Card Pin 21 from going active.
The protocol in the HP48GX RPL Opertaing System implementation is to always leave BEN low, unless slot 2 activity is needed. BEN should be set low again after card access is complete.
So an HP48GX has three levels of card write protection as well:
Covered ports are created when a card is placed in slot 2 of the GX, that is all ports >= 2. The advantage of this is very large RAM cards are possible: 256K, 512K, etc... up to 4 MB. Cards larger than 128K are split into multiple ports of 128K each controlled by a bank switching mechanism.
The disadvantages are that the memory cannot be merged with user memory (even if only a 128K card is used). Furthermore, some programs may be sensitive to the bank switching in covered ports, and may run slightly slower, improperly, or simply refuse to run at all. In particular, many of the freeware programs written in machine language are affected. Some contain special code to allow them to execute from both covered and standard ports.
Display flicker is usually caused by fluorescent lights. The rapid pulsing of the fluorescent lights (60 Hz in the the U.S. and Canada), which is normally unnoticeable, interacts with the rapid pulsing/scanning of the HP48 LCD display (64 Hz refresh rate), which is also normally unnoticeable. The 60 Hz fluorescent lights alias with the display refresh (64 Hz) to produce a 4 Hz "flicker". It's normal and harmless.
Outside the U.S. and Canada, power is supplied at a 50 Hz rate, not 60 Hz. This means that the display "flickers" at a 14 Hz rate, which is still noticeable.
Unfortunately, as far as I am aware, you cannot get a replacement, the cheapest alternative is to send the calc in for "standard service" at HP, which is slightly cheaper than a new calculator. Opening an HP48 is quite difficult anyway.
There are many ways to protect the HP48's LCD. The solutions include:
An inexpensive solution to this is to go to Sears and get a Black Plastic Tool Box #9 65283 in the hardware deptartment. It sells for only US $4.95. The case is big enough for the calculator in its case, plus extra batteries.
The case is a good fit for the calculator. If you want to go a step further, you can get some foam, glue it into the top and bottom halves of the case, and cut out a calculator shaped hole in the bottom. The result is lightweight, strong, secure and still leaves a little room for you to store extra batteries, a cable, and/or cards for your ports. Another solution is to use a cheque book as a case. Some cheque books just happen to fit the HP48, and provide a fair amount of protection.
The final alternative is to purchase a case. Eric Finley <email@example.com> sells protective hard cases for the HP48. They are stainless steel, very strong, and look nice. The cost is US $30. For more information, either e-mail Eric or check his web page at http://www.ece.ucdavis.edu/~etfinley/.
Yes, however you need to have a few things, the first being an amateur radio license. The next thing you need is a terminal node controller. If you are able to, get a terminal node controller that supports XON and XOFF software flow control. This is good to have because the HP48 only has a 256 character buffer. When the buffer is full, the HP48 sends the "buffer full" signal and a terminal node controller with software flow control can quit sending data until the HP48 can keep new data in the buffer. If you don't have a terminal node controller with software flow control, you can still use it, but you may lose some data.
The next thing you will want is some software to use with the terminal node controller. You could make your own software using user-rpl commands such as BUFLEN, SRECV, and XMIT. However, there is a plethora of software available. All you need is software then can send and receive data from the serial port. There are several programs at http://www.hpcalc.org/hp48/utils/terminal/ that you might like to try.
There is also a site that has a lot of hp48 programs relating to ham radio. Connect to ftp://oak.oakland.edu/pub/hamradio/hp48/ Please inform the FAQ maintainer if you find additional software, so it can be added to this list.