This software is retired - it is not available anymore!

What is HP-71X?

It is an HP-71B Extended MicroCode Emulator for HP-48GX/49G calculators. This famous vintage calculator is fully recreated because I emulated the real CPU behavior and the emulator executes a code from the real HP-71B ROMs. Beside the emulation, I added various advanced features to the original specifications.

Important notice: Features described below refer only to the full version - they could be missing from demo version.

There are four variations of HP-71X according to the various calculator configurations and different user needs. These are:

HP71X48: The EXTENDED version for HP-48GX with one or two 128K RAM cards in either Slot1 or Slot2 (card in Slot2 can be >=128K, of course). Uses one card for the HP-71B/Emulator ROM with 33.5K RAM (Port #0) and (eventually) the other card for additional 128K RAM (Ports #1..#4) giving the total of 161.5K freely configureable RAM. Forth/Assembler and HP-41 Translator ROMs can be loaded to Port0 of HP-48GX (Port #5 inside HP-71X). Furthermore, additional 64K of non-configureable RAM (Ports #5 and #6) and 32K ROM containing MATH ROM (Port #7) can be loaded to Port0 instead of Forth/Assembler/HP-41 Translator ROMs. The emulator automatically configures itself according to the installed components.

HP71X48D: The DEMO (17.5K RAM) version for HP-48GX with only one >=128K RAM card in either Slot1 or Slot2. Uses this card for the HP-71B/Emulator ROM with 17.5K RAM (Port #0).

HP71X49: The EXTENDED version for HP-49G. Uses Port1 for both the HP-71B/Emulator ROM with 33.5K RAM (Port #0) and (eventually) additional 128K RAM (Ports #1..#4) giving the total of 161.5K freely configureable RAM. Forth/Assembler and HP-41 Translator ROMs can be loaded to Port0 of HP-49G (Port #5 inside HP-71X). Furthermore, additional 64K of non-configureable RAM (Ports #5 and #6) and 32K ROM containing MATH ROM (Port #7) can be loaded to Port0 instead of Forth/Assembler/HP-41 Translator ROMs. The emulator automatically configures itself according to the installed components.

HP71X49D: The DEMO (17.5K RAM) version for HP-49G. Uses Port1 for the HP-71B/Emulator ROM with 17.5K RAM (Port #0).

The number in the parenthesis is the total amount of the supported RAM.

Display refresh:

Display and annunciators are refreshed as usual. The HP-71B display organization is very different from the HP-48/49 display and this slows down the emulator significantly so it is marginally faster (about 15-20%) than a real HP-71B when display refresh is involved (it is more than 3x faster otherwise). Under some circumstances, display refresh could be a little different with a slightly different timings compared to the real calculator.

Because HP-71B display is 132 dots wide, only first 131 dots are visible on the HP-48/49 display. There is an ability to scroll the display if it is really necessary to see the last column.

Timers:

The internal HP-71B timers are supported so you can use ON TIMER, WAIT and similar statements inside the emulator as usual. On start, HP-71X time is synchronized to the HP-48 time. In the usual deep-sleep state the emulator doesn't respond to timer interrupts (timer cannot wake up the emulator) but there is also a hibernation mode in which waking up the emulator by timer is possible.

The emulator can be sent to hibernation from the program by executing POWOFF regardless of the active hibernation/sleep state. Hibernation state should not be active for more than 3 days otherwise HP-48/49 date/time will be corrupted (this is the limitation of HP-48/49, not HP-71X). For the same reason, maximum alarm time is limited to 3 days in this mode. It is not recommended to stay a long time in hibernation mode on HP-48GX, either, because the emulator is stored on the RAM card and executed from there so the calculator must hold active lines to the card even when powered off which results in slightly increased power consumption compared to the deep-sleep mode. We are not talking about large values here, something like 0.4-0.5mA which is much less then idle power consumption but still more than in a true deep-sleep mode.

Auto power-off:

Auto power-off feature is supported - the emulator shuts the calculator down after approx. 5 minutes of inactivity.

Port memory:

HP-71X supports up to 5 main RAM ports (#0..#4 with 32K each) which can be used either as main or independent RAM. They can be CLAIMed in ascending order only so you cannot, for example, CLAIM Port #3 while #1 or #2 are still designated as independent. Ports can be FREEed in the opposite (descending) order only.

After installation, Ports #0 and #1 are designated as main memory (64K) while Ports #2, #3 and #4 are independent. Initially, Port #4 is occupied by the MATH ROM but otherwise can be freely used as any other RAM port.

Forth/Assembler and HP-41 Translator Pac:

HP-71X supports Forth/Assembler and HP-41 Translator ROMs installed as Port #5. ON&4 and ON&1 key combinations can be used to toggle between them as both of them cannot be used at the same time. There is also a possibility to replace Forth/Assembler and HP-41 Translator ROMs (if they are not needed) with another object containing 64K of non-configureable RAM (which cannot be CLAIMed or FREEed and is always designated as Ports #5 and #6) together with 32K ROM (Port #7) containing MATH ROM thus providing 225.5K RAM in total and leaving 161.5K of main configureable RAM free.

HP-71X doesn't support the Soft Forth ROM because 64K ports needed by this ROM aren't emulated/supported and I don't intend to emulate/support it in the future.

JPC ROM:

Big part of the JPC ROM is built into the emulator so it doesn't occupy any port. Because the emulator space is limited, the following items from JPC are excluded: all keywords related to the printer and HP-IL, all address file keywords (ADDCREATE, ADDDELETE etc.), DDIR, PDIR, DBLIST, PBLIST, RENUMREM and FINPUT. If any of these keywords are needed they can be loaded with the aid of additional LEX files.

Card reader support:

Card reader and card writer are separated inside the emulator so you can read and write cards independently. Pulling cards is automatic by default but can be manual, too (ON&A). Verifying is automatic and actually doesn't make any sense on the emulator.

Card reader/writer is supported via the usual COPY TO CARD, COPY CARD, CAT CARD, PROTECT/UNPROTECT, RUN :CARD and CHAIN :CARD statements. As a result of the COPY TO CARD statement, the single character string object containing all cards will be put on the HP-48/49 stack on exit. When using COPY CARD, CAT CARD, RUN :CARD or CHAIN :CARD you have to put the character string object containing the cards on the HP-48/49 stack before executing the emulator. With PROTECT/UNPROTECT you can protect and unprotect the whole card writer, but you cannot protect and unprotect the individual cards (which doesn't make much sense on the emulator, anyway).

ON&C and ON&W combinations can be used for rewinding cards to the beginning. For example, after CAT CARD you have to press ON&C if you want to execute COPY CARD with the same card set. Powering the emulator off rewinds the cards to the beginning, too.

In order to save space, only real data is saved on the card - various zero and 'hardware recognized flag' bytes aren't saved.

LIF files loading:

I wrote an utility called CRD71 which can convert any HP-71B LIF file into a coresponding CRD (card) file which can then be loaded into the emulator. This ability makes loading all kinds and types of HP-71B files a breeze ...

I also wrote a program called LIF71 which can extract all files from the LIF volume.

Extended output:

Some keywords like DISP, PRINT, PLIST and similar are extended to privide output to the 5 unused lines of the HP-48/49 LCD (DSPLCD, OUTLCD and PRTLCD) or printer (OUTIR, OUTLED, OUTRS, PRTIR, PRTLED and PRTRS). This is a simplified way of communication which doesn't rely on HP-IL so you don’t have to load HPILROM in order to use this feature.

LCD device is able to respond to several escape CHR$(27) sequences in order to control underline, invert (negative), double-wide and narrow (26-chars) modes. Furthermore, LCD device is able to respond to the DELAY setting (as the regular display).

Printer output:

Currently, printer output works in 3 modes: RS-232 (Wire) serial mode, IR serial mode and IR LED mode. IR modes aren't available on HP-49G for obvious reasons.

While RS-232 mode primary function is to communicate with the real printer, IR serial mode is especially useful for communication with another HP-48 calculator (data can be received with the SRECV command). Of course, RS-232 mode can be used for this purpose on both HP-48/49, too. IR LED mode is mainly aimed at printing on the HP-82440 thermal printer or receiving data with INPRT program on HP-48.

Printer devices don't respond to the DELAY setting.

HP-IL emulation:

If you need to communicate with the peripherals at more advanced level then HP-IL emulation is just for you ...

Compatibility:

Although I have made everything to make HP-71X compatible with the real HP-71B as much as possible, there are some differences between the emulator and the real calculator (beside the obvious user interface differences like display/annunciators and keyboard layout):

(*) DELAY resolution is 1/16 sec and the smallest delay is 0.125 seconds
(*) SCROLL behavior is different and there are only two settings: 0 and <>0 (!)
(*) Display refresh could be a little different or occur at a slightly different moments
(*) Keyboard behavior could be a little different as well as repeat timings (!)
(*) CAT behavior has been changed - no delay after header, etc. (!)
(*) Deep-sleep (not hibernation) mode is default on HP-71X (!)
(*) Cold start (INIT: 3) doesn't clear time & date (!)
(*) Ports can be CLAIMed in increasing order only (0,1,2,3)
(*) Ports can be FREEed in decreasing order only (3,2,1,0)
(*) Auto power-off timeout is about 5 minutes (!)
(*) There is only one level of beeper volume (loud)

These differences are mainly caused by the different hardware but some of them, marked with (!), are modified according to my needs.

Direct access to the HP-71B hardware (display, keyboard, card reader, timers, annunciators, etc.) usually don't work on HP-71X because the hardware layer is emulated and not directly accessible. But if you use only HP supported (and many unsuported) entries chances are almost 100% that everything will be working properly. So, don't access the hardware directly (and don't use LEX files which are accessing hardware directly) – use HP entries instead and everything will be fine ...

Here are few samples captured from the emulator running under Emu48 for Windows:

Installation guide with description of many other (advanced) features is here.