1. General
Emu71 is based on the sources of Emu48 and is an emulator for the Hewlett Packard Titan calculator HP-71B hardware. This calculator emulation is based on the 1LK7 Saturn CPU, the 1LF3 display driver, the 1LG7 ROM and 1LG8 RAM chips. The calculator emulation can be expanded by the emulation of additional RAM and ROM modules and by a simulation of the HP-IL modules inside the ports 0 to 5.
2. Acknowledgements
A big thank to Jean-François Garnier for his technical assistance and his code simulating the HP-IL I/O processor. Lode Vandevenne spent the PNG image decoder. Also thanks to Sebastien Carlier for his Emu48 v1.0, without him this emulator would never have been created. And finally I want to thank all the people making the IDS documents available.
3. ROM Images
You need ROM images. The necessary ROM images are copyrighted by Hewlett Packard and I have no license to distribute them. Please don't ask me, I will not send you mine.
This is a ROM dump program from Jean-François Garnier reading the HP-71B ROM content and sending the data to a HP-IL printer device. In this case I prefer using his PIL-Box with ILPer for capturing the data in the ILPer Printer area.
10 DIM A$[64]
20 A=HTD("0") ! start address of ROM to transfer
30 FOR I=0 TO 64*32-1 ! length of ROM (here for 64Kb)
40 A$=PEEK$(DTH$(A+I*64),64)
50 OUTPUT :1 ;A$
60 NEXT I
The output format is a memory dump file like used by Derek S. Nickel's Voyager program. With the program Dmp2rom.exe from the file tool package the memory dump file can be converted to the necessary ROM file format.
If you made the ROM dump, you may also modify the program above to read the HP-IL ROM module content.
10 DIM A$[64]
20 A=IP(HTD(ADDR$("HPILROM"))/256)*256 ! start address of HPIL ROM to transfer
30 FOR I=0 TO 16*32-1 ! length of ROM (here for 16Kb)
40 A$=PEEK$(DTH$(A+I*64),64)
50 OUTPUT :1 ;A$
60 NEXT I
ROM images are valid in a packed (even address lower nibble, odd address higher nibble) or unpacked (one nibble per byte with even address first) form. Files in the packed form have the same format like the files used in Emu71 for DOS from Jean-François Garnier. They can be validated with the TITANCHK.EXE command line utility. TITANCHK.EXE is part of the Emu71 installation package or binary distribution or can be downloaded separately here. To do that, start a Command Prompt while running Windows, and type:
Titanchk <image-file>
where <image-file> is the ROM image you want to test. As result you will get a report of the Checksum check.
4. Installation
To install Emu71, unzip the emulator and the required emulator skins into an empty directory or use the Emu71 installer package. Finally copy your ROM images into this directory and adjust the ROM image name to the name used in the corresponding KML script. When you first run Emu71, it will detect the directory in which you installed it, and will write the configuration to the registry at HKCU\Software\Emu71.
5. How to Start
When Emu71 is installed and you have put the valid ROM image into your Emu71 installation directory, you can start Emu71. You'll see a "Choose Your KML Script" box.
KML (Keyboard Mapping Language) scripts define the visual aspects of Emu71, the behaviour of the buttons, of the keyboard, ... It's a great way to customize your copy of Emu71.
Check in this dialog that the path in the "Emu71 Directory" text area points to the directory in which you installed the Emu71 KML files. Click the refresh button ("V") after modifying the directory path manually to update the list box or use the ("...") button to start a directory browser.
Choose a KML script in the list box for your calculator ROM you put into Emu71's directory.
Available scripts from the author at the moment are:
- Christoph's Real HP71B for 800x600
- Christoph's Real HP71B for 1024x768
There's also a 3rd party scripts collection with module overlay background images.
These scripts use "HP71B.ROM" as Name for the ROM image file.
If you are interested in writing new scripts, get the KML 2.0 documentation from the authors Emu48 page.
Having selected a script, press OK to start the emulator. In most cases, when Emu71 crash after pressing the OK button, you are using an invalid ROM image. While it's running, you can use the "View/Change KML Script..." command to change the visual aspect of Emu71.
6. Command Line
The command line syntax is "Emu71 [file]". The parameter sets the filename of the emulation state file independent from the "LastDocument" setting, normally reponsible for opening the last used state file. The argument is optional.
7. Virtual Keyboard
There are two ways to use the virtual keyboard on the emulated calculator:
The easiest way to use the emulated calculator is by using the mouse. The KML script defines buttons with an area where mouse clicks take effect. The active area is indicated by changing the cursor from an arrow to a hand cursor. Pressing the left mouse button over an active area will press the virtual button. When the mouse cursor leaves the virtual key area with still the left mouse button pressed, the virtual button is automatically released. The visual aspect of a pressed or released virtual button is defined in the KML script. In some cases you need to press more than one key on the emulator. For these cases press the virtual key with the right mouse button. When you release the mouse button or leave the area of the virtual key, the key is still held. To release all held virtual buttons, just use the left mouse button again. A single release of a hold virtual key isn't possible.
Another convenient way is using the PC keyboard. The KML script language supports a large variety of commands to implement this feature. So keyboard usage mostly depends on your used KML script and not on the emulator. Because of this it's impossible to say what's happen when you press a key on the PC keyboard. Some Windows specific accelerator keys like F10 cannot be overloaded by the KML script. For further details read the KML 2.0 documentation mentioned before please.
8. File Menu
8.1 New...
Creates a new emulation session. You're asked for a KML script where you can select the calculator type and skin to emulate.
8.2 Open...
Opens a previously saved emulation session. The emulation continues at the same position where the session was aborted. Loading emulation sessions made with a different ROM revision may destroy the memory content or may cause other unpredictable results.
8.3 Save
Saves the current session with the actual name.
8.4 Save As...
Saves the current session with a new name. You're also get this dialog when you Exit a new session without a state file name.
8.5 Close
Closes the current session without closing the emulator.
8.6 Settings
This calls the Settings dialog. This dialog has four sections: General, Disassembler, Sound and Infrared Printer.
8.6.1 General section
- Authentic Calculator Speed
When this option is checked, the emulation speed will be similar to the real calculator.
- Show Title
When this option is checked, the window title bar is visible.
- Show Menu
When this option is checked, the menu bar is enabled. If unchecked, the menu is accessible as context menu in the client area outside the calculator button definitions.
- Always On Top
When this option is checked, the emulator windows will always be the topmost one.
- Activation Follows Mouse
This option enables a X-Mouse style windows activation. When the mouse is moved over the emulator window, the emulator is getting the focus and popping up into foreground.
- Single Instance
When this option is checked, only one instance of the emulator can be started. If another running instance is detected, the detected instance is set into foreground as active window and get a request to change his state file to the given one by the current instance. Then the current instance is terminated.
- Automatically Save Files
When this option is checked, the current state file will be saved automatically when you change to another state file, but not when you close the emulator program.
- Automatically Save Files On Exit
When this option is checked, the current state file will be saved automatically when the emulator program is closed.
- Always Show KML Compilation Result
When this option is checked, you see the results of the KML (Keyboard Mapping Language) interpreter at every KML script load.
8.6.2 Disassembler section
Choosing the assembler syntax:
- HP Mnemonics
This is the standard syntax used by HP.
- Class Mnemonics
Class (Clarke assembler) was written by Lutz Vieweg in 1991, at a time when HP had not published their own development tools. The syntax is very similar to the AG and STAR mnemonics used at this time.
8.6.3 Sound section
A new implementation of the sound engine made ROM patches for sound output obsolete. The new sound engine emulates the behaviour of the beeper output ports and only work in connection with a sound card. Using the legacy PC speaker mode isn't possible any more. The old beeper method with a ROM patch has been removed, so you have to remove the ROM beep patches from your KML scripts. Actually the program informs you when detecting ROM beep patches by opening the "KML Script Compilation Result" dialog reporting an error.
For the sound generation the calculator must know his own CPU strobe frequency. On the real calculator the speed depends on various settings like component tolerances, actual temperature, humidity and other variables. The actual speed is measured by the calculator firmware at Power-On and Power-Off and stored in the =CSPEED variable. The content of this calculator variable has direct influence on the resulting frequency and duration. On the emulator the CPU strobe frequency is set by the registry key HKCU\Software\Emu71\Emulator\SaturnCycles. The content of this variable multiplied by 16384 is the CPU strobe frequency in Hz used by the emulator. Because older versions of the emulator were not able to measure the CPU strobe frequency properly or the content of the SaturnCycles has been changed since the last measurement, the =CSPEED variable of this session file may contain a wrong frequency value. You easily may discover this by measuring the actual duration of a 10s beep. A deviance less than 1s is ok, otherwise you should perform a power cycle sequence of the calculator emulation in this session file. This recalls the measuring routine and save the result in the speed variable.
- Volume
The output volume can be set with the Volume slider relative to the Windows Master Volume control. Be aware that the HP-71B has two steps of loudness controlled by the system flag -25 please.
- Device
By default the sound device is set to "Standard Audio", but you can also manually choose the output device. When you change the Standard Audio device in the Operating System settings dialog, the internal device numbering may change, and so the manually selected audio device.
8.7 Exit
Quit emulation. The default actions at finishing are defined in the Settings dialog. If the current session is "Untitled" you are asked for a session file name using the Save As... dialog. If you quit the emulator without a given filename, you're asked for choosing a KML script at next startup.
9. Edit Menu
9.1 Port Configuration...
With the port configuration dialog you can add a large variety of different modules from various manufactures to your HP-71B emulation. At the moment Emu71 can emulate RAM and ROM modules and simulate the HP-IL Interface HP 82401A or the combination of the Dual HP-IL Adapter HP 82402A with two HP-IL Interface HP 82401A modules.
To allow to emulate or simulate most of the modules published by manufactures like HP (Hewlett Packard), HHP (Handheld Products) and CMT (Corvallis Microtechnology Inc) the port configuration interface is very flexible but not easy to understand.
Therefore we have to learn something about the memory design of the HP-71B. In the HP-71B syntax, a PORT is a memory device of a specified size. A module or better say a housing in a PORT slot can contain more than one PORT. A good example for understanding is the internal 16KB Port0 memory. The memory is divided into four chunks of 4KB accessible with PORT(0), PORT(0.01), PORT(0.02) and PORT(0.03). A HHP 96KB module for the Port5 slot is normally shown as three ports (5, 5.01, 5.02) of 32KB each.
Because of a limitation in the address decoder, each chip in such a hybrid RAM or ROM PORT must have a size which is a result of a power of 2 operation (1, 2, 4, 8, 16, 32, ...) and can only be located on a base address which is a multiple of it's own size. So a 48KB ROM module for example, is technically a hybrid module consisting of three single 16KB ROM chips.
In the HP-71B literature the name "port" is used in two contexts. First, like used above, as memory device and second as name of a physical port slot. Don't mix them up please. A memory port itself can be RAM or ROM. Memory Mapped I/O parts aren't shown by the operating system in this context.
ROM memory ports can be hard or soft configured. An example for a hard configured ROM is the ROM of the operating system. ROM in modules are normally soft configured like RAM modules. The two exceptions are the FORTH module (HP 82441A) and the HP-41 translator module (HP 82490A) which have a soft and a hard configured ROM inside.
What's the difference between soft and hard configured ROM's?
A hard configured ROM has a fixed base address programmed by the manufacturer of the ROM, whereas, at a soft configured ROM, the base address is chosen by the operating system at runtime. Soft configured modules responds with an ID telling their type (RAM/ROM), the size and if they are the last chip in a multiple chip queue.
- ROM
HP designed the 1LG7 ROM chip for this purpose. The chip has a size of 16KB. To implement a larger ROM you can combine multiple ROM chips to a logically one. The last chip responds an ID being the last chip in the queue.
- RAM
HP designed the 1LG8 RAM chip for this purpose. The chip has a size of 1KB. This chip is used to build the internally 16KB of the Port 0 RAM or used in 4KB memory module 82420A. In literature you find sometimes the synonym "Hybrid chip". The chips in a hybrid RAM are linked together by the Daisy chain DOUT / DIN pins and on the last chip the ID pin is set to high that the chip responds an ID being the last chip in the queue. Internally still each chip has to be configured by the OS but the "last chip marker" tells the OS that these chips should be treat as single chip for the user.
Companies, especially HHP and CMT, made 3rd party RAM modules with 32KB or larger around the 1LQ4 interface chip. With one 1LQ4 interface chip normally 32KB (4 * 8KB or 1 * 32KB Static RAM) can be built and these interface chips can be combined to single Ports showing as 5, 5.01, 5.02, ... or to hybrid chips larger than 32KB. Nevertheless, all RAM modules belong to the Main RAM after plugging. They can separately freed to Independent RAM.
- HP-IL
The HP-IL Interface simulation, or better say the simulated I/O processor has some restrictions. It was mainly created to support a few I/O processor commands as loop controller which are necessary to access display, printer and mass storage devices. Later some of the HP-71B device capabilities had been added. These are file transfers from and to the loop, basic support for remote control and interrupt capabilities for controller and device. All features are simulated and don't behave in many situations exactly like the original module. Further the implementation of all functions isn't complete, so advanced or very low level features of the module (like manual mode or parallel poll) are still not supported. Because of the limited implementation a check of the HP-IL Interface module simulation with the Diagnostic ROM fails on almost every I/O processor dependent test.
The port configuration and the data is saved in the Document file. Because the content of most ROM images is copyrighted, only a link to the image file is saved. I suggest to place ROM images of modules in the same directory like the KML files. In this case only a relative path in the document is saved. This let you use the document files on other PC's with a different directory structure or drive letters without path change to the ROM image files at document loading. The content of RAM data is saved as image in the document file.
9.1.1 Overview
9.1.1.1 Group Box "Port"
9.1.1.1.1 Port selection
Inside the group box you see on right hand the current port slot selection. Default is "Port1" at startup. Available ports are Port0, Port1, Port2, Port3, Port4 and Port5. Port0 drive the internal RAM and the port slot at backside of the calculator housing. This slot is normally reserved for the HP-IL (HP 82401A) or Dual HP-IL (HP 82402A) module. The Port1 to Port4 slots are at the front and Port5 is the card reader slot. From software aspect, there's no difference between these port slots. From the hardware aspect, it was impossible in the 80ties to put a 160KB RAM module, because of it's size, in a Port1 - Port4 slot. But here we are on an emulator, and the virtual 160KB RAM module is mechanically not really larger than the virtual standard 4KB module.
9.1.1.1.2 Port list box
On left hand is a list box showing the ports in the current port slot.
Explanation of such a port line:
- RAM, 4K (4)
Type: RAM, Size: 4K Byte, No. of Chips: 4
- RAM, 32K (1)
Type: RAM, Size: 32K Byte, No. of Chips: 1
- ROM, 16K (1), "FORTHROM.BIN"
Type: ROM, Size: 16K Byte, No. of Chips: 1, Filename: FORTHROM.BIN
- HRD, E0000, 32K (2), "HRDFORTH.BIN"
Type: HRD, Hard Wired Address: E0000, Size: 32K Byte, No. of Chips: 2, Filename: HRDFORTH.BIN
- HPIL, 16K (1), "HPILROM.BIN", "localhost",
60001, 60000
Type: HPIL, Size of ROM: 16K Byte, No. of Chips: 1, Filename: HPILROM.BIN, IP-Address of next device in virtual IL: localhost, IP-Port of next device in virtual IL: 60001, my IP-Port for virtual IL data listening: 60000
9.1.1.1.3 Data manipulation of independent RAM
In the list box you're able to select a single port definition. Calling the context menu (right mouse button) for the selection of a memory port you get a menu with the two entries:
- "Load Memory Data..."
- "Save Memory Data..."
The items of the context menu are grayed when you selected a ROM or HRD module type or a RAM configured as MAIN memory. Only in the case that the selected RAM module is configured as independent RAM, the menu entries are enabled. Independent RAM has the signature #B3DDDDDE at the beginning of the port.
With "Save Memory Data..." you can write the independent RAM module data to a file. With "Load Memory Data..." you directly overwrite the current independent RAM module data with file data (when you leave the "Port Configuration" dialog with the "Cancel" button the change is persistent). In this case the module size has to match. The file format is compatible with independent RAM files from "Emu71 for DOS".
9.1.1.1.4 Changing HP-IL TCP/IP settings
When you call the context menu (right mouse button) on a HP-IL module type you get a menu with the entry:
- "Change TCP/IP Settings..."
With "Change TCP/IP Settings..." you get a dialog where you can change the IP-Address of the next device ("Out TCP/IP Address"), the IP-Port of the next device ("Out Port (49152 - 65535)") and my IP-Port ("In Port (49152 - 65535)") for data listening in the virtual IL. The changes are persistent, even if you leave the "Port Configuration" dialog with the "Cancel" button.
9.1.1.1.5 Button "Add"
This button allows you to add a single port to the port slot. If there's no port selected in the "Port list box", the port will be appended at the end. If a port is selected, the new port will be inserted before the selection. If the "Add" button is disabled, you are already in the port configuration mode.
9.1.1.1.6 Button "Delete" / "Abort"
This button has two meanings, dependent on the current mode:
- Delete
If there's no port selected in the "Port list box" you delete the complete port slot content. If a port is selected, only the selected port is deleted.
- Abort
You are in the port configuration mode. Press "Abort" to leave the port configuration mode without applying the settings.
9.1.1.1.7 Button "Apply"
This button transfer the data in the Configuration group box to the list box.
9.1.1.2 Group Box "Configuration"
The fields in the "Configuration" group box are enabled when you press the "Add" button.
9.1.1.2.1 Combo box "Module Type"
In this field you can choose the module type. Available are "RAM", "ROM", "HRD" and "HPIL".
- RAM
This selects a soft configured RAM port. The RAM content is filled with zero at startup.
- ROM
This selects a soft configured ROM port. This enables the edit field "Filename" for the ROM image filename. The ROM image file must be in a packed (even address lower nibble, odd address higher nibble) or unpacked (one nibble per byte with even address first) form. Files in the packed form have the same format like the files used in Emu71 for DOS from Jean-François Garnier.
- HRD
This selects a hard configured ROM port. This enables the edit field "Filename" for the ROM image filename and the "Hard Wired Address" combo box. The ROM image file format must be equal to the format described in the ROM section above. In the "Hard Wired Address" combo box you can select the address "00000" or "E0000". If you choose address "00000" and this is a module in the Port1 slot, the internal ROM is deactivated over the OD pin simulation. This is normally to attach the HP-71B diagnostic ROM. Address "E0000" is the address used for the hard wired port in the FORTH and in the HP-41 translator modules.
- HPIL
This selects the HP-IL Interface HP 82401A module. A HP-IL Interface internally consists of two ports, an invisible I/O port with a size of eight bytes and a standard ROM port. So this enables the edit field "Filename" for the ROM image filename and a "Configure" button for adjusting the TCP/IP settings for the virtual IL.
With "Configure" you get the dialog "HP-IL Interface Setup" where you can change the IP-Address of the next device ("Out TCP/IP Address"), the IP-Port of the next device ("Out Port (49152 - 65535)") and my IP-Port ("In Port (49152 - 65535)") for data listening in the virtual IL.
9.1.1.2.2 Combo box "Size"
This field is only relevant for "RAM" ports. A "ROM" port get it's size information from the image file size. Available are different sizes from 512 bytes up to 160 KB. Be aware that this size is the overall size of a single RAM port and not the overall size of the RAM module in the port slot! So the HHP 96KB module from above consists of three 32KB ports.
A special case is the "Datafile" selection. Some of the larger 3rd party RAM modules have a backup battery allowing to remove the RAM module without memory loss for the case that all ports in the module are configured as independent RAM. To "plug" such a RAM module into the emulator session you must have a file image of the RAM content. When you select "Datafile" the edit field "Filename" is enabled. Here you can enter the RAM image filename. At port configuration dialog exit, the RAM content is filled with the data from the RAM image file. The original RAM image file will be untouched. The file format of independent RAM ports is compatible with the port RAM files of the "Emu71 for DOS" emulator.
9.1.1.2.3 Combo box "No. of Chips"
As I mentioned before a memory chip has always a size created by power of 2 operation. So a chip of 96KB size isn't possible, it must be a hybrid chip of 3 or a multiple of 3 chips (3*32KB, 6*16KB, ...). Furthermore I mentioned that a chip can only be located on a base address which is a multiple of it's own size. For a non existing 256KB chip this would be the addresses #00000 and #80000 in the Saturn address area.
When we go back to the mid of the 80ties the number of memory chip for the Saturn bus was very limited. We had the 1LG7 ROM chip with a size of 16KB, the 1LG8 RAM chip with a size of 1KB and the 1LQ4 interface chip for multi purpose use. Many 3rd party manufactures build there 32KB modules with one 1LQ4 chip and 4 * 8KB static RAM chips. A single 32KB instead of 4 * 8KB chips would be even smaller, but was more expensive then 4 8KB chips. A 48KB ROM normally consists of 3 * 16KB 1LG7 ROM chips.
Many people don't really know what they have to choose, so this combo box has also an "Auto" selection which is default. "Auto" choose automatically a reasonable settings depending on the "Module Type" and "Size".
- Auto selection for a RAM port
If the overall module size is a multiple of "32KB" then the "No. of Chips" is calculated by "overall module size" / "32KB". This is because most manufactures used a 1LQ4 interface chip with 4x 8KB static RAM to create a 32KB RAM unit. If the overall module size is not a multiple of "32KB" then the "No. of Chips" is calculated by "overall module size" / "1KB". For the HP 4K RAM module HP82420A (4x 1LG8) then you get the correct "No. of Chips" setting of "4".
- Auto selection for a ROM port
ROM's normally build out of a multiple of 1LG7 chips (16KB), so if the overall module size is a multiple of "16KB" then the "No. of Chips" is calculated by "overall module size" / "16KB". In all other cases a single chip is selected. The automatic setting is wrong when you simulate the EEPROM part of a EEPROM/RAM module.
9.1.1.3 Button "OK"
Apply all configuration changes and quit the Port Configuration dialog.
9.1.1.4 Button "Cancel"
Discard all configuration changes (with the exception of direct independent RAM data overwriting) and quit the Port Configuration dialog.
9.1.2 Module examples
All examples also work with "No. of Chips" Auto setting. The image file names for the ROM modules may differ to your image copy.
9.1.2.1 HP 82420A 4KB memory module in Port2 slot
- Switch off calculator
- Open the "Port Configuration" dialog
- Select "Port2"
- Delete Port2 content if necessary
- Press "Add" Type: RAM, Size: 4K Byte, No. of Chips: 4
- Press "Apply"
- Press "OK" to quit the "Port Configuration" dialog
- Switch on calculator
9.1.2.2 CMT or HPP 32KB memory module in Port3 slot
- Switch off calculator
- Open the "Port Configuration" dialog
- Select "Port3"
- Delete Port3 content if necessary
- Press "Add" Type: RAM, Size: 32K Byte, No. of Chips: 1
- Press "Apply"
- Press "OK" to quit the "Port Configuration" dialog
- Switch on calculator
9.1.2.3 CMT or HPP 64KB memory module (2x 32KB ports) in Port5 slot
- Switch off calculator
- Open the "Port Configuration" dialog
- Select "Port5"
- Delete Port5 content if necessary
- Press "Add" Type: RAM, Size: 32K Byte, No. of Chips: 1
- Press "Apply"
- Press "Add" Type: RAM, Size: 32K Byte, No. of Chips: 1
- Press "Apply"
- Press "OK" to quit the "Port Configuration" dialog
- Switch on calculator
9.1.2.4 HPP 96KB memory module (3x 32KB ports) in Port5 slot
- Switch off calculator
- Open the "Port Configuration" dialog
- Select "Port5"
- Delete Port5 content if necessary
- Press "Add" Type: RAM, Size: 32K Byte, No. of Chips: 1
- Press "Apply"
- Press "Add" Type: RAM, Size: 32K Byte, No. of Chips: 1
- Press "Apply"
- Press "Add" Type: RAM, Size: 32K Byte, No. of Chips: 1
- Press "Apply"
- Press "OK" to quit the "Port Configuration" dialog
- Switch on calculator
9.1.2.5 HPP 96KB memory module (1x 32KB, 1x 64KB ports) in Port5 slot
- Switch off calculator
- Open the "Port Configuration" dialog
- Select "Port5"
- Delete Port5 content if necessary
- Press "Add" Type: RAM, Size: 32K Byte, No. of Chips: 1
- Press "Apply"
- Press "Add" Type: RAM, Size: 64K Byte, No. of Chips: 2
- Press "Apply"
- Press "OK" to quit the "Port Configuration" dialog
- Switch on calculator
9.1.2.6 HPP 160KB memory module (5x 32KB ports) in Port5 slot
- Switch off calculator
- Open the "Port Configuration" dialog
- Select "Port5"
- Delete Port5 content if necessary
- Press "Add" Type: RAM, Size: 32K Byte, No. of Chips: 1
- Press "Apply"
- Press "Add" Type: RAM, Size: 32K Byte, No. of Chips: 1
- Press "Apply"
- Press "Add" Type: RAM, Size: 32K Byte, No. of Chips: 1
- Press "Apply"
- Press "Add" Type: RAM, Size: 32K Byte, No. of Chips: 1
- Press "Apply"
- Press "Add" Type: RAM, Size: 32K Byte, No. of Chips: 1
- Press "Apply"
- Press "OK" to quit the "Port Configuration" dialog
- Switch on calculator
9.1.2.7 HP 82480A Math Pac module in Port2 slot
- Switch off calculator
- Open the "Port Configuration" dialog
- Select "Port2"
- Delete Port2 content if necessary
- Press "Add" Type: ROM, No. of Chips: 2, Filename: MATHROM.BIN
- Press "Apply"
- Press "OK" to quit the "Port Configuration" dialog
- Switch on calculator
9.1.2.8 HP 82441A Forth/Assembler module in Port3 slot
- Switch off calculator
- Open the "Port Configuration" dialog
- Select "Port3"
- Delete Port3 content if necessary
- Press "Add" Type: ROM, No. of Chips: 1, Filename: FORTHROM.BIN
- Press "Apply"
- Press "Add" Type: HRD, No. of Chips: 2, Filename: HRDFORTH.BIN, Hard Wired Address: E0000
- Press "Apply"
- Press "OK" to quit the "Port Configuration" dialog
- Switch on calculator
9.1.2.9 HP 82490A HP-41 Translator Pac module in Port3 slot
- Switch off calculator
- Open the "Port Configuration" dialog
- Select "Port3"
- Delete Port3 content if necessary
- Press "Add" Type: ROM, No. of Chips: 1, Filename: FTH41ROM.BIN
- Press "Apply"
- Press "Add" Type: HRD, No. of Chips: 2, Filename: HRDFTH41.BIN, Hard Wired Address: E0000
- Press "Apply"
- Press "OK" to quit the "Port Configuration" dialog
- Switch on calculator
9.1.2.10 HP-71B Diagnostic ROM module in Port1 slot
- Switch off calculator
- Open the "Port Configuration" dialog
- Select "Port1"
- Delete Port1 content if necessary
- Press "Add" Type: HRD, No. of Chips: 1, Filename: DIAG71.ROM, Hard Wired Address: 00000
- Press "Apply"
- Press "OK" to quit the "Port Configuration" dialog
- Switch on calculator
9.1.2.11 HP 82401A HP-IL module in Port0 slot
- Switch off calculator
- Open the "Port Configuration" dialog
- Select "Port0"
- Delete Port0 content if necessary
- Press "Add" Type: HPIL, No. of Chips: 1, Filename: HPILROM.BIN
- Press "Configure" to open the "HP-IL Interface Setup" dialog and enter the virtual HP-IL parameters
- Press "OK" to quit the "HP-IL Interface Setup" dialog
- Press "Apply"
- Press "OK" to quit the "Port Configuration" dialog
- Switch on calculator
9.1.2.12 HP 82402A Dual HP-IL module in Port0 slot
- Switch off calculator
- Open the "Port Configuration" dialog
- Select "Port0"
- Delete Port0 content if necessary
- Press "Add" Type: HPIL, No. of Chips: 1, Filename: HPILROM.BIN
- Press "Configure" to open the "HP-IL Interface Setup" dialog and enter the virtual HP-IL parameters for the 1st loop
- Press "OK" to quit the "HP-IL Interface Setup" dialog
- Press "Apply"
- Press "Add" Type: HPIL, No. of Chips: 1, Filename: HPILROM.BIN
- Press "Configure" to open the "HP-IL Interface Setup" dialog and enter the virtual HP-IL parameters for the 2nd loop
- Press "OK" to quit the "HP-IL Interface Setup" dialog
- Press "Apply"
- Press "OK" to quit the "Port Configuration" dialog
- Switch on calculator
9.2 Copy Screen
Copy the screen content to the clipboard.
9.3 Copy Stack
This is work in CMD and in CALC mode.
Copy the display content as "String" to the clipboard.
9.4 Paste Stack
This only work in CMD mode.
Paste the text field content of the clipboard to the command buffer of the calculator.
9.5 Reset Calculator
This emulates the Reset pin of the internal CPU.
9.6 Backup
9.6.1 Backup Save
This saves the current emulator status into a backup slot. If the backup slot already contains data, it will be overwritten.
9.6.2 Backup Restore
This restores a previous saved emulator status without request. If you changed the calculator model meanwhile, the emulator will switch back to model used in the backup.
9.6.3 Backup Delete
This deletes the data in the backup slot.
10. View Menu
10.1 Change KML Script...
This allows you to change the skin of the current emulated calculator. In opposite to the New... command you see only scripts emulating the same calculator.
11. Tools Menu
11.1 Disassembler...
This is a simple disassembler.
Enter the address to disassemble in hexadecimal into the "Address (HEX)" field and press <Return>. With the "Next Address" button the next opcode is disassembled. With the "Copy Data" button you can copy all selected lines inside the list box to the clipboard.
11.2 Debugger...
The assembler code debugger of the emulator. For more details refer to the extra documentation of the debugger please.
11.3 Macro
The keyboard macro recorder unit.
11.3.1 Macro Record...
Prompts a dialog to enter the macro file for the data to record. After accepting the confirm message, every key event is recorded into the macro file with it's time information.
11.3.2 Macro Play...
Prompts a dialog box to ask for the keyboard macro file to play. The replay starts immediately after opening the selected file.
For High-Speed recorded files, with small or none delay between the keystrokes, or using Manual Replay Speed selection with Fast slider setting, the "Authentic Calculator Speed" option in the settings dialog should be unchecked for maximum emulation speed. If not, you may loose keystrokes on the fast replay.
11.3.3 Macro Stop
Stops recording or replaying a keyboard macro file.
11.3.4 Macro Settings...
Settings for the Macro Replay mode
- Real
Replay macro with the original recording speed.
- Manual
Replay macro with the speed set by the speed slider.
12. Help Menu
12.1 Help Topics
Show this document.
12.2 About Emu71...
Show the version, copyright and license message...
13. Virtual HP-IL
The HP-IL (Hewlett Packard Interface Loop) is an interface system designed for connecting handheld devices with peripheral hardware. Therefore the devices are connected over a simple 2-wire cable in a loop. This allows to produce low-cost and lightweight peripherals.
Today we are simulating the handheld devices and also the peripherals. It makes for example no sense to save data on a 3½ inch floppy disk any more. The data is much safer on a hard disk, flash memory or on an optical media. Also printers with a HP-IL interface are quite old and rare.
Jean-François Garnier published his PIL-Box project in 2009 to combine real HP-IL hardware with virtual devices on a PC. He called his "HP-IL Peripheral emulator" ILPer. ILPer simulated a generic printer and a mass storage device on a PC connected over the PIL-Box hardware with the real HP-IL world.
With Emu71 and ILPer we have now completely virtualized hardware devices. So in consequence we have to virtualize also the HP-IL system. I chose TCP/IP as transport protocol for the single data frames. Choosing TCP/IP as transport protocol gives the advantage of communicating with (virtualized) HP-IL devices around the world. Each virtual HP-IL device contain a TCP/IP server listening for data frames on the specified port number and a TCP/IP client sending the data frames to a port of the next virtual device. A HP-IL data frame is normally 11 bits long, but TCP/IP is a byte oriented protocol, so each data frame on TCP/IP is 16 bits (2 bytes) long. The remainder upper five bits are filled with zero. The two bytes of a frame are transferred in network byte order. ILPer since v1.4 supports the virtual HP-IL mode.
Meanwhile the actual version of ILPer simulates a generic printer, two mass storage devices and a DOSLINK interface on a PC. Additional devices like a HP-82163A or a HP-92198 display simulation or separate versions of the DOSLINK device and the HP-IL frame Scope are also available now. With a bridge software for the PIL-Box we have the possibility to connect Emu71 or the Virtual HP-IL interface devices with the real HP-IL world.
14. License
Emu71 - A HP-71B Emulator
Copyright (C) 2023 Christoph Gießelink
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.