This is an old revision of the document!


Calculator Hardware/Firmware

LF15C - Firmware for the DM15

A 3rd Party Firmware for the DM15 family of calculators

Overview of LF15C

  • LF15C is written by HP Museum Forum member jebedeo
  • It is a replacement firmware for the Swiss Micros DM15C & DM15L calculators.
    • 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 X and Y
  • 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 reset button
    • firmware is flashed
  • press hidden reset button 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 reset button
    • firmware is flashed
  • press hidden reset button to start V32 firmware
  • sudo lpc21isp <LF15C FIRMWARE> /dev/ttyUSB0 115200 1200
  • press hidden reset button
    • firmware is flashed
  • press hidden reset button to start new LF15C firmware

For installation using Windows

  • The Swiss Micros Voyager Update Tool will work to install LF15C
  • 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 reset button in all cases.

Files

Download from here

Latest LF15C firmware lf15c_250408.hex
V32 firmwaredm15_m1b_32.hex
Swiss Micros Voyager Windows Update Toolvoyage_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.

LF15C General Info

  • Full time complex stack shows real & imaginary parts together as e.g. Rectangular: 3.45 +4.34 i or 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 0 is returned
  • Precision 15 decimal places
  • π displays as 3.14159265358979
  • e displays as 2.71828182845905

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

Example (Click to view)

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 xy
    • 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

CalculatorFirmwareTime
DM15L V34 202 seconds
DM42 3.23 7.30 seconds
DM15L*LF15C 250408 0.992 seconds

Savage

CalculatorFirmwareTime
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.

Example (click to view)

Rectangular and Polar modes for complex numbers

  • f →R and g→P do NOT to convert x and y stack levels between Rect and Polar values 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 Deg or Rad as appropriate

Example (click to view)

Arithmetic can be done in Rectangular or Polar mode.

  • Mode can be switched at any time - perhaps switching to Rectangular to enter a Rectangular format number, when working in Polar, and then switching back to Polar 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 - and Polar format numbers must be converted → R first.
  • To confirm the mode in use an annunciator P is always present when in Polar.
    • No P means Rectangular mode is active.

Example (click to view)

Other features

Indirect addressing

Indirect Register pair I & (i)

Indirect Register pair I and (i) work in the usual way

Example (click to view)

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!

Example (click to view)

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.

Example (Click to view)

And the rest

  • 100 Storage Registers 00 - 99 are 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 ALBL 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 runTime opCode in the program. runTime writes to x the program execution time once it's executed.
  • It’s possible to delete a single program with f CLEAR PRGM followed by a label
  • f and a long press on CLEAR PRGM clears the entire program memory
  • FIX/SCI/ENG don't round numbers unless gRND is pressed.
  • fENGnn sets the number of significant digits as requested, UNLIKE the original HP15C where fENGn sets the significant digits to n + 1
  • There are 10 user flags, from 0 to 9.
    • There are no LCD annunciators to show state, but can be set, cleared and tested for decision making in program branching
  • Long press GTO in program mode to access go to label feature (single press in run mode)
  • Long press GSB in program mode to access go to line number feature (single press in run mode)
  • When running a program step by step, a long press on SST doesn’t execute the current step.
  • f USER and gMEM are not implemented and don't do anything at the moment.

LF15C Serial Port Info

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

DateFirmwareVersionFirmware FileComments
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


Navigation