Installation procedure for HP-71X MicroCode Emulator:

I am not responsible for anything you do with this software. The emulators are not designed to make any (software or hardware) damage but (due to the complexity of the code) if something goes wrong I am not responsible for that.

Again: Use this software at your (and only your) own risk!

As described on the main page, there are four variations of HP-71X according to the various calculator configurations and different user needs. The installation procedure is different for each version and is described separately.

Very important notice: Some features from the EXTENDED version are disabled or missing in DEMO version. And, of course, 'Memory lost' occurs every time you start the emulator :-(

It is assumed that a potential user of such software already knows how to transfer files from computer to calculator so this won't be explained here.

In the following sections I will refer any covered port by Port2 for simplicity. In all cases it is up to you to ensure that you have enough free memory in the calculator for the installation procedure to complete succesfully. Needless to say, RAM cards must not be write protected for the emulator to be installed and work properly.

The emulator works OK on the regular HP-48/49 system but it is not guaranteed to work on the system loaded with take-over libraries e.g. libraries which have tendency to take control over the calculator.

HP71X48 installation:

Before installation, make shure that Port1 (or Port2) is empty and writeable. If needed, initialize with PINIT and clear everything from Port1 (or Port2). Receive the HP71X file from the computer and store the backup object containing the HP-71B/Emulator ROM and 33.5K RAM (from the HP71X variable) to Port1 with 1 STO (or Port2 with 2 STO). Purge the HP71X variable and press ON+C to reboot the calculator. Receive the XQ71 file from the computer. Run the emulator with XQ71. Exit the emulator with ON&F. Press ON+C to reboot the calculator for the second time.

If available, you can now send two additional files to the HP-48GX. The first is XM71MATH with additional 96K RAM and MATH ROM. The second is XF71 with Forth/Assembler and HP-41 Translator ROM. In this case, HP71X is usually stored to Port2 and XM71MATH to Port1. XF71 must be stored to Port0. To avoid problems with 'Insufficient Memory' error use the following sequence: XF71 'XF71' PURGE 0 STO.

It is very important to free Port1 on HP-48GX because emulator will not start if Port1 remains merged ('Port Not Available' error will be generated).

HP71X48D installation (under Emu48):

Before installation, make shure that Port1 (or Port2) is empty and writeable. If needed, initialize with PINIT and clear everything from Port1 (or Port2). Load the HP71X file and store the backup object containing the HP-71B/Emulator ROM and 17.5K RAM to Port1 with 1 STO (or Port2 with 2 STO). Press ON+C to reboot the calculator. Load the XQ71 file and store it to a XQ71 variable. Run the emulator with XQ71.

Extremly important: Due to the very serious bug on HP-48GX ROM versions L and M, Port 1 could be corrupted after storing an object to Port >1. To avoid this, store everything what had to be stored to Port >1 first. If you got 'Invalid Card Data' warning after ON+C you have to execute PINIT. After this, you can store the remaining object(s) to Port 1.

HP71X49 installation:

Before installation, make shure that Port1 is empty. If needed, initialize with PINIT and clear everything from Port1. Receive the HP71X file from the computer and store the backup object containing the HP-71B/Emulator ROM and 33.5K RAM (from the HP71X variable) to Port1 with 1 STO. Purge the HP71X variable and press ON+C to reboot the calculator. Receive the XQ71 file from the computer. Run the emulator with XQ71. Exit the emulator with ON&F. Press ON+C to reboot the calculator for the second time.

If available, you can now send two additional files to the HP-49G. The first is XM71MATH with additional 96K RAM and MATH ROM. The second is XF71 with Forth/Assembler and HP-41 Translator ROM. XM71MATH must be stored to Port1 and XF71 to Port0. To avoid problems with 'Insufficient Memory' error use the following sequence: XF71 'XF71' PURGE 0 STO.

HP71X49D installation (under Emu48):

Before installation, make shure that Port1 is empty. If needed, initialize with PINIT and clear everything from Port1. Load the HP71X file and store the backup object containing the HP-71B/Emulator ROM and 17.5K RAM to Port1 with 1 STO. Press ON+C to reboot the calculator. Load the XQ71 file and store it to a XQ71 variable. Run the emulator with XQ71.

Execution:

Emulator must be executed with XQ71. If, at any time, XQ71 cannot find the appropriate backup object containing the HP-71B/Emulator ROM it will raise an "Object Not in Port" error. If you have (accidently) stored the emulator to more than one port, XQ71 will search them by port number order and execute the first one found. Don't mix XQ71 and HP71X from different versions of the emulator because crash of the calculator is guaranteed ...

HP-49G only: Due to some issues with port management on HP-49G, XQ71 SHOULD NOT be executed from either Port1 or Port2 - it should be executed from the main memory only.

If, for some reason, you have to reset the emulator through the reset hole you must immediately run the emulator again to recover it. Don't do anything else before you run the emulator or the HP-71B/Emulator ROM/RAM could be corrupted. Don't pay attention to the "Invalid Card Data" warning and don't even think to execute PINIT. This procedure isn't necessary if you perform the warm start with ON+C while the emulator is off (deeply sleeping).

INIT:1 occurs every time the emulator is executed. It's the way to protect the emulator from a possible memory changes made by user. After the emulator has been turned OFF (or after executing QUIT) it can be turned ON as usual (without INIT:1).

Keyboard mapping for HP-48GX and HP-49G:
(one HP-71B key can be assigned to more-than-one HP-48/49 keys)

 HP-71B

 HP-48GX

 HP-49G

 A

 A

 A

 B

 B

 B

 C

 C

 C

 D

 D

 D

 E

 E

 E

 F

 F

 F

 G

 G

 G

 H

 H

 H

 I

 I

 I

 J

 J

 J

 K

 Alpha&K

 K

 L

 L

 L

 M

 M

 M

 N

 N

 N

 O

 O

 O

 P

 Alpha&P

 P

 Q

 Alpha&Q

 Q

 R

 Alpha&R

 R

 S

 S

 S

 T

 T

 T

 U

 U

 U

 V

 V

 V

 W

 W

 W

 X

 X

 X

 Y

 Y

 Y

 Z

 Z

 Alpha&/ (Z)

 +

 +

 +

 -

 -

 -

 *

 *

 *

 /

 /

 /

 =

 DEL

 Alpha&<−, Alpha&LeftArrow 

 (

 Alpha&/

 Alpha&*

 )

 Alpha&*

 Alpha&-

 0

 0

 0

 1

 1

 1

 2

 2

 2

 3

 3

 3

 4

 4

 4

 5

 5

 5

 6

 6

 6

 7

 7

 7

 8

 8

 8

 9

 9

 9

 .

 .

 .

 ,

 Alpha&.

 Alpha&.

 ON

 ON

 ON

 f

 RightShift

 RightShift

 g

 LeftShift

 LeftShift

 RUN

 Alpha&SPC, Alpha&ENTER 

 Alpha&SPC, Alpha&ENTER 

 Left

 <−, LeftArrow (P)

 LeftArrow, <−

 Right

 RightArrow (R)

 RightArrow

 SPC

 SPC

 SPC

 Up

 UpArrow (K)

 UpArrow

 Down

 DownArrow (Q)

 DownArrow

 ENDLINE

 ENTER

 ENTER

Note: In the latest releases the function of LeftShift and RightShift keys has been corrected because there isn't any reason for them to be reversed (I still cannot remember why have I reversed them in the beginning and I appologize for the inconvenience).

As you have seen above, some HP-71B keys must be shifted with Alpha key because there isn't enough keys on HP-48/49. For Alpha&key combinations you have to press Alpha and keep it down while pressing another key or you can press and release Alpha and then press the required key. With shift keys, you can press either Alpha or Left/Right-Shift first. If you want to keep Left/Right-Shift down while keying other keys in Alpha mode, you must press and release Alpha key first and then press and keep Left/Right-Shift down (because there isn't such thing as 'three-key rollover' on HP-48/49). On HP-48GX, I decided that I use arrow keys more requently than K, P, Q and R keys but, if you don't agree with me, you can press ON&Alpha to reverse their function (arrow keys are shifted with Alpha now, other keys are intact).

Pressing ON&Alpha again will return to the usual state (arrow keys and SPC not shifted).

Other ON&key combinations are:

ON&F: Return to the HP-48/49 operating system.
ON&L: Restart the emulator.
ON&H: Activate hibernation mode.
ON&S: Activate deep-sleep mode.

ON&+ and ON&-: Change display contrast.

ON&LeftArrow: Scroll the display one column to the left.
ON&RightArrow: Scroll the display one column to the right.
ON&<−: Cancel ATTN (so it doesn't interrupt anything).

ON&4: Activate Forth/Assembler ROM in Port #5 (if installed).
ON&1: Activate HP-41 Translator ROM in Port #5 (if installed).

ON&A: Toggle card pulling automatic/manual.
ON&C: Rewind the reading card to the beginning.
ON&W: Rewind the writing card to the beginning.

ON&2: Activate DISPlaying on the HP-48/49 LCD.
ON&.: Dectivate DISPlaying on the HP-48/49 LCD.

ON&3: Activate PRINTing to the HP-48/49 LCD.
ON&5: Activate PRINTing via IR LED (RedEye) mode.
ON&6: Activate PRINTing via IR serial mode.
ON&*: Activate PRINTing via RS-232 (Wire) serial mode.
ON&SPC: Deactivate PRINTing.

ON&ENTER: Redirect display output to the HP-48/49 LCD.
ON&7: Redirect display output to the printer via IR LED (RedEye) mode.
ON&8: Redirect display output to the printer via IR serial mode.
ON&9: Redirect display output to the printer via RS-232 (Wire) serial mode.
ON&0: Deactivate display output redirection.
ON&N: Toggle between LCD narrow (26-chars) and normal (22-chars) mode.

ON&/ is functioning exactly as on the real HP-71B.

ON&BackSpace is very useful in cases when ON key has been hit accidentally – it will cancel ATTN and the execution will be continued as if ON key hasn't been depressed. Also, with the help of ON&BackSpace, the execution of the program can be paused by holding the ON key down and then depressing BackSpace key to resume execution.

Note: ON&5/ON&6 act as ON&* and ON&7/ON&8 act as ON&9 on HP-49G.

ON&* or ON&9 must be used when printing to HP-82240A/B InfraRed Thermal Printer Emulator.

New keywords:

Several new keywords have been built in the emulator:

AREAD: Assigns the contents of command line buffer to a numeric/string variable at the start of the program.

REFRESH: Refresh HP-71B display.

DSPLCD: Activate DISPlaying on the HP-48/49 LCD.
DSPOFF: Dectivate DISPlaying on the HP-48/49 LCD.

PRTLCD: Activate PRINTing on the HP-48/49 LCD.
PRTRS: Activate PRINTing on the printer via RS-232 (Wire) serial mode.
PRTIR: Activate PRINTing on the printer via IR serial mode.
PRTLED: Activate PRINTing on the printer via IR LED (RedEye) mode.
PRTOFF: Deactivate PRINTing.

Note: PRTIR and PRTLED act as PRTRS on HP-49G.

OUTLCD: Redirect display output to the HP-48/49 LCD.
OUTRS: Redirect display output to the printer via RS-232 (Wire) serial mode.
OUTIR: Redirect display output to the printer via IR serial mode.
OUTLED: Redirect display output to the printer via IR LED (RedEye) mode.
OUTOFF: Deactivate display output redirection.

Note: OUTIR and OUTLED act as OUTRS on HP-49G.

BAUD <RS-232>[,<IR>]: Set baud rate for both RS-232 and IR serial modes.

Valid baud rate values are: 0 (1200), 1 (1920), 2 (2400), 3 (3840), 4 (4800), 5 (7680), 6 (9600) and 7 (15360).

UNDERL ON: Activate LCD underline mode (same as CHR$(27)&"U").
UNDERL OFF: Deactivate LCD underline mode (same as CHR$(27)&"L").
INVERT ON: Activate LCD invert (negative) mode (same as CHR$(27)&"I").
INVERT OFF: Deactivate LCD invert (negative) mode (same as CHR$(27)&"N").
WIDE ON: Activate LCD double-wide mode (same as CHR$(27)&"W").
WIDE OFF: Deactivate LCD double-wide mode (same as CHR$(27)&"S").
NARROW ON: Activate LCD narrow (26-chars) mode (same as CHR$(27)&"6").
NARROW OFF: Deactivate LCD narrow mode (same as CHR$(27)&"1").

CHR$(27)&"E" can be used to reset LCD to the default settings.

POWOFF: Activate hibernation state from the program (from the command mode acts like the usual BYE/OFF).

JPC ON|OFF: Activate/deactivate JPC ROM extensions (ON by default).

QUIT: Return to the HP-48/49 operating system and resume execution when starting the emulator again (no INIT:1 will be executed on entry). This is very useful when you want to return to the HP-48/49 operating system, execute something and then return to the emulator and resume execution.

Replacing XF71 with XR71:

XR71 is a special 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). Port #6 initially contains SYMBOLIX program (it contained FINANCE and CIRCUIT modules before but I never used them) together with JPCLEX file (containing DBLIST, PBLIST, RENUMREM keywords from JPC ROM). Port #7 contains MATH ROM together with UTILEX file (containing FINPUT keyword from JPC ROM and a few other keywords originally intended to be part of the built-in BASIC but left out due to memory constraints like AND$, COMP$, EXOR$, INLINE, KEYNAM$, KEYNUM, LTRIM$, LWC$, LWRC$, MEMBER, MSG$, OR$, REV$, REVBIT$, ROT$, RPT$, RTRIM$, SBIT, SBIT$, SCROLL, SPAN, STD$, ENG$, FIX$ and SCI$). If you don’t need Forth and HP-41 Translator then you can load XR71 instead of XF71 and have 225.5K RAM in total, with 161.5K of main configureable RAM free.

Card reader support:

ON&A combination can be used to toggle manual/automatic card pulling (pulling is automatic by default).

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.

The cards included with the emulator are in the HP-48GX format by default. To convert them to the HP-49G format you have to use CNV49 program (included with the HP-49G version).

Utilities included with the emulator:

There are several utilities (for PC) included, mainly oriented towards CRD/LIF files management and conversion. These are:

CRD71.EXE: HP-71X LIF to CRD File Converter.
Usage: CRD71 [</49>|<-49>] <FILENAME.LIF> [<FILENAME.CRD>]
Purpose: To convert standard HP-71B LIF files (BASIC, LEX, TEXT, ...) to the CRD (card) files which can then be loaded into HP-71X.

LIF71.EXE: HP-71X LIF Volume-to-File Converter.
Usage: LIF71 <VOLUME.LIF>
Purpose: To extract all files from the LIF volume.

CNV49.EXE: HP-48GX to HP-49G File Converter (included with the HP-49G version only).
Usage: CNV49 <FILENAME.CRD>
Purpose: To convert CRD files in HP-48GX format to the HP-49G format and vice versa.

Known bugs/issues:

(*) In some very rare occasions, an ‘File Protect Error’ is reported after INIT: 3 (this never happened on the real calculator so it is very likely an Emu48 issue).

(*) Time seems to be corrupted after hibernation mode during the night but as I cannot reproduce this bug anymore it has probably been fixed somehow.

Tips and tricks:

(*) Set an HP-48/49 alarm, start HP-71X and turn it OFF: when the alarm comes due it will wake up the emulator (STARTUP, if any, will be executed automatically). You can acknowledge the alarm after exiting to the operating system with ON&F. This trick doesn't work in the hibernation mode (because it isn't needed in this mode) and cannot be used with demo version.

(*) ON&L combination is very useful for loading many cards in succession: put all of them on the stack, load first card, press ON&L, load second card, press ON&L ... repeat until all cards have been loaded. Also, cards can be concatenated together.