mike632t / x11-calc

GNU General Public License v3.0
24 stars 6 forks source link
c calculator rpn rpn-calculator simulator x11

x11-calc - Another RPN (Reverse Polish) calculator.

Simulators for the HP 35, HP 80, HP 45, HP 70, HP 21, HP 22, HP25, HP 25C, HP 27, HP 29C, HP 31E, HP 32E, HP 33E, HP 33C, HP 34C, HP 37E, HP 38C, HP 38E, HP 67, HP 10C, HP 11C, HP 12C, HP 15C, and HP 16C.

All written in C using X11.

Use of any language extensions or non standard language features has been avoided in order to try to make the code as portable as possible.

The aim is to have the same source code compile without modification on as many systems and architectures as possible including Linux, VAX/VMS and Tru64 Unix.

HP10 HP11

Latest News Back to Top

04 May 24

14 Apr 24

24 Feb 24

16 Feb 24

01 Nov 23

14 Oct 23

22 Sep 23

Tested platforms Back to Top

The simulator has been successfully compiled and tested on:

How to get it Back to Top

You can either download the source code from GitHub and compile it yourself or you can use a pre-compiled package.

Using the simulator Back to Top

If you install the simulator on most modern desktops it should create a new menu entry that will start the launcher script by default. When invoked for the first time this will prompt you to select the default simulator as well as any additional command line options. These selections will be saved and the selected simulator will become the new default.

When using some desktop environments (like GNOME and KDE) it is possible to access a sub-menu that will allow you to select a specific model as well as change the default settings by right clicking on the menu icon.

Keyboard Shortcuts

The following keyboard shortcuts should work on Linux:

'0' - '9', '+'. '-'. '*'. '/' and 'Enter' should do what you expect them to (when using numeric key pad you need to use numlock as usual).

'f' and where applicable 'g' and 'h' correspond to the shift keys.

'Esc' or 'Backspace' corresponds to 'Clx', 'c' to CHS, 'e' to 'EEX', and on financial models 'n' and 'i' correspond to 'n' and 'i' if not shifted.

'A' - 'E' , 'A' - 'F' , or 'A' - 'B' correspond to program labels (whether shifted or not).

'Space' maps to 'SST' (if not shifted.

The following control keys can also be used.

'Ctrl-Z' Exists the simulator. For models with continuous memory 'Ctrl-Z' saves the current memory contents.

'Ctrl-C' Resets the simulator to its initial state.

'Ctrl-T' Toggles tracing of the simulator code execution.

'Ctrl-S' Enable tracing and executes a single instruction.

'Ctrl-Q' Resumes execution (does not disable trace).

Loading and saving

For models with continuous memory the contents of program memory and data registers are saved automatically when the calculator is switched off or the window is closed. The current state of the simulator will be saved in either $HOME/.local/share/x11-calc/ or in a hidden file in the user's HOME directory if $HOME/.local/ does not exist.

Resetting the simulator using 'Ctrl-C' will reload the saved state.

~/.x11-calc-nn.dat

When starting the simulator the name of the data file used to restore the saved state can be specified on the command line allowing previously saved copies of programs to be loaded automatically when the simulator starts or the simulator is reset using 'Ctrl-C'. However, any changes will be saved in the hidden data file.

Exiting

For models with a 'sliding' On/Off switch clicking on the switch will turn the simulator on or off, but if when switching off you hold down the switch down for two seconds the program will exit.

Window Size

The size of the simulator window can be adjusted from the command line with the --zoom ZOOM option, where the value for ZOOM can be in the range zero to four (0-4).

Debugging

You can start the simulation in trace mode using '-t', or in single step mode using '-s', and set a break-point using '-b <octal address>'.

'Ctrl-T' also toggles trace mode when running, 'Ctrl-S' executes the next instruction, 'Ctrl-Q' resumes execution, and 'Ctrl-R' displays the contents of the CPU registers.

When in trace mode a jump to the same instruction produces no output.

ROM Images

The '-r ' command line option provides the ability to use the ROM contents from a separate file. The contents of the ROM are stored as pairs values separated by a colon containing the memory address and the opcode.

Anything appearing after a semi colon on each line is ignored.

For the HP10C, HP11C, HP12C, HP15C and HP16C the ROM file contains pairs of hexadecimal values.

0000:107
0001:04e
0002:270
0003:238
0004:2ee
0005:13f

For other models the ROM file contains pairs of octal values.

00000:00255
00001:01420
00002:00451
00003:01456
00004:01746
00005:00472

When loading a ROM from file any gaps between the memory addresses will not be filled with zeros, and the existing ROM contents will be left unchanged.

ROM files can therefore be used to load alternative version of the firmware for a particular model or apply a patch to the existing firmware.

Building from the source Back to Top

Prerequisites

If you want to compile the simulator from the source code yourself then the following packages must be installed.

When all the prerequisites are available, you should be able to compile the program using make if it is in the list of tested platforms.

Compiling

To build the simulator check that you have all the prerequisites installed then download the source code from github and unzip it (this will created a new directory automatically).

e.g:

$ wget https://github.com/mike632t/x11-calc/archive/refs/heads/stable.zip
$ unzip x11-calc-stable.zip

Then change directory to the new folder.

$ cd x11-calc-stable

The to compile all the simulators you just need to invoke make.

$ make clean; make all

You can also compile a single simulator by specifying the model number.

$ make hp29c

By default the executable files will be created in the bin directory.

$ ./bin/x11-calc-29c
x11-calc-29c: Version 0.10 [Commit ID: 399d546] 01 Nov 23 23:53:00 (Build: 0114)
ROM Size : 4096 words

OR

$ bin/x11-calc

If more than one C compiler is installed or if gcc is not available you can specify which one to use from the command line.

$ make CC=clang hp11c

$ make CC=tcc
VMS

On VMS unzip the source code archive, change the default directory and then run make.com.

e.g:

$ unzip x11-calc-stable.zip
$ set def [.x11-calc-stable.src]
$ @make all

$ mc [-.bin]x11-calc-29c
x11-calc-29c: Version 0.10 [Commit ID: 399d546] 02 Nov 23 23:52:11 (Build: 0114)
ROM Size : 4096 words

Installing

On Linux systems after the compilation is complete you can use the makefile to install the simulators locally.

By default the installer will use $HOME/.local if it exists, but it is possible to specify another directory by setting the directory prefix.

$ make install

OR

$ make install prefix=/usr

The makefile also supports staged installs in a custom directory defined by DESTDIR.

make DESTDIR=/tmp/staging install

Using a pre-compiled package Back to Top

If you don't want to download an compile the sources yourself you can use a pre-compiled binary package compatible with most distros from Flathub using Flatpak.

A native binary package is also available on Alpine Linux 3.20 release.\ If x11 is not already installed, add it as standalone (setup-xorg-base) or together with a standard desktop (setup-desktop).\ Make sure community repo is enabled and then install with apk add x11-calc.\ To leverage GUI for setup, install apk add zenity. Optional program saves may be installed with apk add x11-calc-prg.

Known Issues Back to Top

General issues

HP 11C + HP 12C + HP 15C + HP 16C
HP 37E
HP 67

Raspberry Pi Specific Issues

Wayland specific Issues

VMS Specific Issues

Acknowledgements Back to Top

There are almost certainly some names I've missed off this list but without the help and encouragement from several members of the calculator community it is unlikely that this project would have happened at all or that I would have managed to get as far as I have.

Problem Reports Back to Top

If you find problems or have suggestions relating to these simulators, then please create a new issue.

Your problem report should contain:

Thank you.