This is an old revision of the document!
Table of Contents
LF15C - Firmware for the DM15
A 3rd Party Firmware for the DM15 family of calculators
Overview of LF15C
- Full development history in HP Forum thread New firmware for the Swissmicros DM15L
- LF15C is written by HP Museum Forum member jebedeo
-
- also runs on the original DM15 credit card version no longer in production
- It is not an emulation or an exact simulation of the HP15C
- It runs directly on the hardware without an emulation layer.
- It is very much faster than the stock firmware
- It has full-time complex number support
- including display of the full real & imaginary parts on the LCD together
3.345 +22.356 i
- It has a 4-level stack with full-time 2-level display of
XandY - All the main HP15C functions are included with the exception of Matrix support
Installing LF15C
DM15L running V32 or earlier (Linux)
sudo lpc21isp <FIRMWARE FILE NAME> /dev/ttyUSB0 115200 1200- Press hidden
resetbutton- firmware is flashed
- press hidden
resetbutton to start new firmware
DM15L running V33 or later (Linux)
The new Swiss Micros firmware V33 changes the behaviour of the bootloader, and it appears to be impossible to flash 3rd party firmware when the calculator is running V33 or later.
The firmware appears to flash correctly, but on reset it will not start
The solution is to downgrade to V32 first, and then install LF15C
sudo lpc21isp DM15_M1B_32.hex /dev/ttyUSB0 115200 1200- press hidden
resetbutton- firmware is flashed
- press hidden
resetbutton to start V32 firmware sudo lpc21isp LF15C_250408.hex /dev/ttyUSB0 115200 1200- press hidden
resetbutton- firmware is flashed
- press hidden
resetbutton to start new LF15C firmware
For installation using Windows
- The Swiss Micros Voyager Update Tool will work to install LF15C
- Do not use the new Web Update tool
- The same caveats regarding installation after using the Swiss Micros V33 apply
- First downgrade to V32
- Then flash with LF15C
- You need to use the hidden
resetbutton in all cases.
Files
Download from here
| Latest LF15C firmware | lf15c_250408.hex |
| V32 firmware | dm15_m1b_32.hex |
| Swiss Micros Voyager Windows Update Tool | voyage_firmware_tool.zip |
Download from HP Forum & Swiss Micros
- The Firmware files are available from the HP Forum Thread for this firmware - at the foot of Post #1
- the version attached to Post #1 is always the latest available.
- At present (Jan '26) there is also a beta version which is being used to test various compiler optimizations, and is buggy and best avoided.
- Swiss Micros
- V32 Firmware DM15_M1B_32.hex
- Voyager Update Tool Voyager Firmware Update Tool
LF15C General Info
- Full time complex stack shows real & imaginary parts together as e.g. Rectangular:
3.45 +4.34 ior Polar:5.5442 ∠51.5177 - maximum number range approx. ±1.797 x 10308
- largest integer factorial
170fx! =7.2574 E306
- smallest positive number approx. 1.00 10-323 before
0is returned - Precision 15 decimal places
- π displays as 3.14159265358979
- e displays as 2.71828182845905
- Fingerprinting - see Fingerprinting
9SINCOSTANATANACOSASIN9-
-1.6584 x10 -10
- User Programs can be saved/loaded via USB Serial port using a terminal emulator such as Putty
- LF15C uses binary floating point representation, rather than the more common BCD.
- This improves the speed but introduces occasional small rounding errors
HP15C functions
- Fix / Sci / Eng display formats
- √x / x2
- ex / Ln
- 10x / Log
- yx / %
- 1/x / Δ%
- Sin / ASin
- Cos / ACos
- Tan / ATan
- Hyperbolics of Sin/Cos/Tan
- CHS / ABS
- EEX / π
- Deg / Rad / Grad Angle Mode
- →H.ms / →H Conversions
- →Rad / →Deg Conversions
- X!
- integer, non-integer, negative and complex support
- Statistics
- Σ+ two variable accumulation
- mean
- standard deviation
- Linear Regression
- slope / intercept
- ŷ estimation / r correlation coefficient
- Combinations / Permutations
- Usual 4 level stack manipulations
- Last x
- Roll Down ↓
- Roll Up ↑
- Swap
x↔y - Swap
x↔ any Storage Register
- 100 storage registers (numbered 00-99)
- capable of saving Complex Numbers
- Indirect Register pair I / (i)
- Indirect Program Label / Line number addressing via Register I
- Random Number Generator
- Rounding
- Fractional / Integer
- Usual Keystroke Programming features
- SST/BST
- LBL
- LBL A - E
- LBL 00 - 99
- DSE / ISG
- including usual loop control indexing
- Logical tests
- Branching
- GTO
- GSB
- RTN
- PSE
- R/S
- SF / CF / FS?
- 10 user flags for program control
- Solver
- can be used via a program
- Numerical Integration
- variable precision via display digit format
- can be used via a program
- quick clear of
- Statistical data
- Individual Program
- All stored Programs
- Storage Registers (0-99, I and (i))
- Full digit mantissa preview
HP15C features not supported
- Matrix functions
- User Mode
- Memory management
- partitioning between Storage Registers and Program Space is not required or supported
DM15L features not supported
- Real Time clock
- Switchable 1-line display option (V33 feature)
- CPU speed switching
- Display Font options
- Adjustable LCD contrast
- Various self-tests
- Conversions & Constants (V33 feature)
Speed tests
- Very much faster than stock DM15L firmware … see Benchmarking
n-Queens
| Calculator | Firmware | Time |
|---|---|---|
| DM15L | V34 | 202 seconds |
| DM42 | 3.23 | 7.30 seconds |
| DM15L* | LF15C 250408 | 0.992 seconds |
Savage
| Calculator | Firmware | Time |
|---|---|---|
| DM15L | V34 | 247 seconds |
| DM42 | 3.23 | 14.9 seconds |
| DM15L* | LF15C 250408 | 4.008 seconds |
Using LF15C
Complex Numbers
- The stack is permanently in complex mode and operates slightly differently to the stock HP15C
Making & manipulating a complex number
Press f I in normal mode to create & destroy a complex number from ⇔ to y and x on the stack.
Make a pure imaginary number by using fRe<>Im
Rectangular and Polar modes for complex numbers
- f →R and g→P do NOT to convert
xandystack levels betweenRectandPolarvalues as in the HP15C - →R and →P are Mode Switching commands for the whole complex stack.
- When in
Polar mode ALL Complex numbers on the stack are in Magnitude / Angle format.- The angle format can be
DegorRadas appropriate
Arithmetic can be done in Rectangular or Polar mode.
- Mode can be switched at any time - perhaps switching to
Rectangular to enter aRectangular format number, when working inPolar, and then switching back toPolar once it's been entered on the stack.. - Intermediate calculations can be done whatever mode is current.
- this is unlike the HP15C, where complex arithmetic has to be done in
Rectangular format - andPolar format numbers must be converted →Rfirst.
- To confirm the mode in use an annunciator
Pis always present when inPolar.- No
PmeansRectangular mode is active.
Other features
Indirect addressing
Similar features to the standard HP15C, with differences due to increased Program Label numbers
Indirect Register pair I & (i)
Indirect Register pair I and (i) work in the usual way
Indirect Program Label addressing
As in the HP15C you can also indirectly address Program Labels using the contents of the I register to point to the label required.
The HP15C allowed 20 numerical Program Labels 0 - .9 which meant indirect addressing for Labels A - E was done by reference to 20 - 24 in Register I
LF15C has 100 numerical Program Labels so….
Store 00 - 99 in I to address numerical Program Labels 00 - 99
Store 100 - 104 I to address Program Labels A - E
Using GTO I or GSB I in a program will lead to a jump to the Program Label referred to by contents of Register I.
Changing Register I's contents (e.g. within a program) can then cause the execution of program to branch in different ways - this can be a very powerful mechanism!
Indirect Program Line Number Addressing
Similar to the above, if the Indirect Register I contains a NEGATIVE number then a call to GTO I or GSB I will cause a branch to the absoloute Line Number referred to in I.
And the rest
- 100 Storage Registers
00 - 99are capable of storing Complex Numbers
- Factorial / Gamma x! works on integer (positive), non-integer (positive and negative) and complex numbers
- Program Mode shows human-readable text rather than HP15C op-codes
- 2-line display of Program being edited
- Selection of logical tests can be done in usual HP15C fashion with
TEST 0-TEST 9- Test can also be selected from a scrolling list of options after initially pressing gTEST with the choice being made via soft-keys & LCD Prompts
- To run a program with a numeric label (i.e. other than
LBL A→LBL E) press f LBL##- e.g. f LBL
88 - this is different than on the original HP15C where to run a label you used GSB
##
- In program mode, f CLEAR PREFIX places the
runTimeopCode in the program.runTimewrites toxthe program execution time once it's executed.
- Deleting User Programs
- Delete a single program : f CLEAR PRGM followed by a label
- Delete ALL programs : f and long press CLEAR PRGM
- FIX/SCI/ENG don't round numbers unless gRND is pressed.
- fENG
nnsets the number of significant digits as requested, UNLIKE the original HP15C where fENGnsets the significant digits ton + 1
- There are 10 user flags, from 0 to 9.
- There are no LCD annunciators to show state, but flags can be set, cleared and tested for decision making in program branching
- Long press GTO in program mode to access
go to labelfeature (single press in run mode) - Long press GSB in program mode to access
go to line numberfeature (single press in run mode)
- When running a program step by step, a long press on SST doesn’t execute the current step.
- Unused Keys
- f USER, gMEM, fDIM, fMATRIX and fRESULT are not implemented and don't do anything at the moment.
LF15C Serial Port Info
- Serial Port dump info : https://www.hpmuseum.org/forum/thread-20046-post-194697.html#pid194697
- Serial Port settings
- Rate : 57600
- Data : 8 bit
- Stop : 1 bit
- Parity : None
- Flow Control : None
ALWAYS INCLUDE AT LEAST ONE TRAILING ZERO FROM THE STRING OF DIGITS REPRESENTING THE MEMORY DUMP
- To extract a dump from calculator press and hold STO
- the string of digits can be copy/pasted into a text file for storage
- it is only necessary to keep one final zero - the rest of the zeros can be ignored
- To upload a previously saved dump
- copy it to clipboard and then
- press and hold RCL until the terminal shows
Paste PrgMemory: - in Putty ShiftInsert to paste clipboard text into terminal
LF15C Firmware Files
Tabulated List of LF15C firmware versions
| Date | Firmware | Version | Firmware File | Comments |
|---|---|---|---|---|
| 12/09/24 | LF15C | beta240911 | lf15c_beta240911.zip | initial public beta |
| 15/09/24 | LF15C | beta240914 | lf15c_beta240914.zip | |
| 17/09/24 | LF15C | beta240916 | lf15c_beta240916.zip | |
| 17/09/24 | LF15C | beta240916_2 | lf15c_beta240916_2.zip | |
| 21/09/24 | LF15C | beta240920 | lf15c_beta240920.zip | very fast benchmarking, roots of -ve numbers bug |
| 21/09/24 | LF15C | beta240921 | lf15c_beta240921.zip | Fix of “powers of negative numbers” bug, new 10^x bug |
| 23/09/24 | LF15C | beta240923 | lf15c_beta240923.zip | 10^x fix, other bug fixes |
| 25/09/24 | LF15C | beta240925 | lf15c_beta240925.zip | Bug fixes More new bugs |
| 28/09/24 | LF15C | beta240928 | lf15c_beta240928.zip | bug fixes |
| 30/09/24 | LF15C | beta240929 | lf15c_beta240929.zip | Bug Fixes etc. |
| 30/09/24 | LF15C | beta240929_2 | lf15c_beta240929_2.zip | RCL I Bug fix |
| 01/10/24 | LF15C | beta240930 | lf15c_beta240930.zip | Bug Fixes |
| 02/10/24 | LF15C | debug241001 | lf15c_debug_for_john241001.zip | version pre-loaded with my B.Fil prog for debug purposes |
| 02/10/24 | LF15C | beta241002 | lf15c_beta241002.zip | Bug Fix my B.Fil runs correctly. No known showstoppers left? |
| 03/10/24 | LF15C | beta241003 | lf15c_beta241003.zip | fPREFIX fix. Discovered inverse HYP SIN bug |
| 06/10/24 | LF15C | beta241005 | lf15c_beta241005.zip | fixes ,HYP ASIN bug still present |
| 07/10/24 | LF15C | beta241006 | lf15c_beta241006.zip | Bug fix and new runTime function |
| 08/10/24 | LF15C | beta241007 | lf15c_beta241007.zip | Bug Fixes |
| 10/10/24 | LF15C | beta241009 | lf15c_beta241009.zip | Bug Fixes |
| 12/10/24 | LF15C | beta241011 | lf15c_beta241011.zip | RND bug fix |
| 14/10/24 | LF15C | beta241014 | lf15c_beta241014.zip | |
| 20/10/24 | LF15C | beta241020 | lf15c_beta241020.zip | |
| 21/10/24 | LF15C | beta241021 | lf15c_beta241021.zip | |
| 22/10/24 | LF15C | beta241022 | lf15c_beta241022.zip | |
| 24/10/24 | LF15C | beta241024 | lf15c_beta241024.zip | |
| 31/10/24 | LF15C | beta241031 | lf15c_beta241031.zip | |
| 02/11/24 | LF15C | beta241102 | lf15c_beta241102.zip | |
| 10/12/24 | LF15C | beta241210_2 | lf15c_beta241210_2.zip | Integrate feature |
| 17/12/24 | LF15C | beta241217 | lf15c_beta241217.zip | Integrate improvements |
| 21/12/24 | LF15C | beta241221 | lf15c_beta241221.zip | Bug Fixes |
| 22/12/24 | LF15C | beta241222 | lf15c_beta241222.zip | Sin(180)=0 Fixed |
| 14/02/25 | LF15C | beta250123 | lf15c_beta250123.zip | Enter Key bug fixes |
| 15/02/25 | LF15C | beta250215 | lf15c_beta250215.zip | Better integration routine and bug fixes |
| 16/02/25 | LF15C | beta250216 | lf15c_beta250216.zip | Y↑X and TEST bug fixes |
| 17/02/25 | LF15C | beta250217b | lf15c_beta250217b.zip | Integration bug fix |
| 19/02/25 | LF15C | beta250218 | lf15c_beta250218.zip | Integration programability |
| 20/02/25 | LF15C | beta250220 | lf15c_beta250220.zip | Linear Regression bug fix |
| 21/02/25 | LF15C | beta250221 | lf15c_beta250221.zip | Complex/non-integer factorial |
| 25/02/25 | LF15C | beta250225 | lf15c_beta250225.zip | improved precision in x! function |
| 26/02/25 | LF15C | beta250226 | lf15c_beta250226.hex | f-PREFIX bug fix |
| 12/01/26 | LF15C | 250408 | lf15c_250408.hex | no longer BETA. Stable version - mature?? |
Further Information
- LF15C program dumps Program dumps for LF15C
