Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| public:calculator:3rd:lf15c [17/02/26 17:51 GMT] – created john | public:calculator:3rd:lf15c [19/02/26 10:01 GMT] (current) – [Speed tests] john | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | < | ||
| + | <-[[.:]] | ||
| - | ====== Lf15c ====== | ||
| - | ** Description ** | + | ====== |
| - | ===== Section One ===== | + | ** A 3rd Party Firmware for the DM15 family of calculators ** |
| - | ===== Section Two ===== | + | ===== Overview of LF15C ===== |
| + | |||
| + | * Full development history in HP Forum thread [[https:// | ||
| + | |||
| + | * LF15C is written by HP Museum Forum member **jebedeo** | ||
| + | * It is a replacement firmware for the Swiss Micros [[https:// | ||
| + | * also runs on the original [[https:// | ||
| + | * 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 '' | ||
| + | * It has a 4-level stack with **full-time 2-level display** of '' | ||
| + | * All the main HP15C functions are included **with the exception of Matrix support** | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ===== Installing LF15C ===== | ||
| + | |||
| + | |||
| + | ==== DM15L running V32 or earlier (Linux) ==== | ||
| + | |||
| + | * '' | ||
| + | * Press hidden '' | ||
| + | * firmware is flashed | ||
| + | * press hidden '' | ||
| + | |||
| + | |||
| + | ==== DM15L running V33 or later (Linux) ==== | ||
| + | |||
| + | < | ||
| + | This behaviour isn't consistent! | ||
| + | |||
| + | I've seen it be possible to flash and run LF15C directly after DM15 V34 with no problems. | ||
| + | |||
| + | I've also seen the problems described below, requiring downgrade to V32. | ||
| + | |||
| + | Just bear it in mind if you have problems starting LF15C after flashing it on top of V33-onwards | ||
| + | </ | ||
| + | |||
| + | 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 '' | ||
| + | |||
| + | |||
| + | The solution is to downgrade to **V32** first, and then install **LF15C** | ||
| + | |||
| + | * '' | ||
| + | * press hidden '' | ||
| + | * firmware is flashed | ||
| + | * press hidden '' | ||
| + | * '' | ||
| + | * press hidden '' | ||
| + | * firmware is flashed | ||
| + | * press hidden '' | ||
| + | |||
| + | |||
| + | |||
| + | ==== 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 '' | ||
| + | |||
| + | |||
| + | ==== Files ===== | ||
| + | |||
| + | === Download from here === | ||
| + | |||
| + | |Latest LF15C firmware |{{ : | ||
| + | |V32 firmware|{{ : | ||
| + | |Swiss Micros Voyager Windows Update Tool|{{ : | ||
| + | |||
| + | |||
| + | === Download from HP Forum & Swiss Micros === | ||
| + | |||
| + | * The Firmware files are available from the HP Forum Thread for this firmware - at the foot of [[https:// | ||
| + | * 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, | ||
| + | |||
| + | |||
| + | * Swiss Micros | ||
| + | * V32 Firmware [[https:// | ||
| + | * Voyager Update Tool [[https:// | ||
| + | |||
| + | ===== LF15C General Info ===== | ||
| + | |||
| + | * Full time complex stack shows real & imaginary parts together as e.g. Rectangular: | ||
| + | * maximum number range approx. **±1.797 x 10< | ||
| + | * largest integer factorial '' | ||
| + | * smallest positive number approx. **1.00 10< | ||
| + | * Precision **15** decimal places | ||
| + | |||
| + | * **π** displays as **3.14159265358979** | ||
| + | * **e** displays as **2.71828182845905** | ||
| + | |||
| + | * Fingerprinting | ||
| + | |||
| + | < | ||
| + | |||
| + | | ||
| + | |||
| + | * User Programs can be saved/ | ||
| + | |||
| + | |||
| + | * LF15C uses **binary** floating point representation, | ||
| + | * This improves the speed but introduces occasional // | ||
| + | |||
| + | ++++ Example (Click to view) | | ||
| + | |||
| + | Try to add 0.3 to itself twice to make 0.9 and subtract 0.9 from your calculated value | ||
| + | |||
| + | |||
| + | '' | ||
| + | |||
| + | < | ||
| + | |||
| + | This shows '' | ||
| + | |||
| + | Now enter 0.9 | ||
| + | |||
| + | '' | ||
| + | |||
| + | and subtract | ||
| + | |||
| + | < | ||
| + | |||
| + | gives the answer '' | ||
| + | |||
| + | A tiny error but visible on certain calculations where the binary cannot accurately represent a decimal fraction.... if you care of an error of the order of 10< | ||
| + | |||
| + | This error is only significant if you need to multiply very small results of such calculations by very big numbers. | ||
| + | |||
| + | Most calculations are not affected by the binary representation issues and the benefit of faster calculations more than compensates. | ||
| + | |||
| + | ++++ | ||
| + | |||
| + | |||
| + | ===== HP15C functions ===== | ||
| + | |||
| + | * Fix / Sci / Eng display formats | ||
| + | * √x / x< | ||
| + | * e< | ||
| + | * 10< | ||
| + | * y< | ||
| + | * 1/x / Δ% | ||
| + | * Sin / ASin | ||
| + | * Cos / ACos | ||
| + | * Tan / ATan | ||
| + | * Hyperbolics of Sin/ | ||
| + | * CHS / ABS | ||
| + | * EEX / π | ||
| + | * Deg / Rad / Grad Angle Mode | ||
| + | * ->H.ms / -> | ||
| + | * ->Rad / ->Deg Conversions | ||
| + | * X! | ||
| + | * integer, non-integer, | ||
| + | * 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 '' | ||
| + | * Swap '' | ||
| + | * **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 [[..: | ||
| + | |||
| + | ==== 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 < | ||
| + | |||
| + | ++++ Example (click to view) | | ||
| + | |||
| + | '' | ||
| + | |||
| + | < | ||
| + | |||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | < | ||
| + | |||
| + | '' | ||
| + | |||
| + | Press < | ||
| + | |||
| + | '' | ||
| + | |||
| + | Press < | ||
| + | |||
| + | '' | ||
| + | |||
| + | Press < | ||
| + | |||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | ++++ | ||
| + | |||
| + | Make a pure imaginary number by using < | ||
| + | |||
| + | ++++ Example (Click to view) | | ||
| + | |||
| + | |||
| + | < | ||
| + | |||
| + | '' | ||
| + | |||
| + | < | ||
| + | |||
| + | '' | ||
| + | |||
| + | ++++ | ||
| + | |||
| + | |||
| + | === Rectangular and Polar modes for complex numbers === | ||
| + | |||
| + | * < | ||
| + | * < | ||
| + | * When in '' | ||
| + | * The angle format can be '' | ||
| + | |||
| + | ++++ Example (click to view) | | ||
| + | |||
| + | start in '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | Convert to '' | ||
| + | |||
| + | < | ||
| + | |||
| + | '' | ||
| + | |||
| + | Convert to '' | ||
| + | |||
| + | < | ||
| + | |||
| + | '' | ||
| + | |||
| + | Convert back to '' | ||
| + | |||
| + | < | ||
| + | |||
| + | '' | ||
| + | |||
| + | ++++ | ||
| + | |||
| + | |||
| + | |||
| + | === Arithmetic can be done in Rectangular or Polar mode. === | ||
| + | |||
| + | * Mode can be switched at any time - perhaps switching to '' | ||
| + | * Intermediate calculations can be done whatever mode is current. | ||
| + | * this is unlike the HP15C, where complex arithmetic has to be done in '' | ||
| + | * To confirm the mode in use an annunciator '' | ||
| + | * No '' | ||
| + | |||
| + | ++++ Example (click to view) | | ||
| + | |||
| + | |||
| + | '' | ||
| + | |||
| + | |||
| + | Initially make sure of '' | ||
| + | |||
| + | Enter '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | Enter a '' | ||
| + | |||
| + | < | ||
| + | |||
| + | (display changes to show '' | ||
| + | |||
| + | |||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | add | ||
| + | |||
| + | < | ||
| + | |||
| + | '' | ||
| + | |||
| + | enter '' | ||
| + | |||
| + | < | ||
| + | |||
| + | '' | ||
| + | |||
| + | |||
| + | '' | ||
| + | |||
| + | divide | ||
| + | |||
| + | < | ||
| + | |||
| + | |||
| + | '' | ||
| + | |||
| + | Or in '' | ||
| + | |||
| + | < | ||
| + | |||
| + | '' | ||
| + | |||
| + | It's very quick & easy to switch from cartesian to polar and back again mid calculation - whichever mode suits the format of the number you're entering. | ||
| + | |||
| + | The mathematical function can be done in whichever mode you're in at the time. | ||
| + | |||
| + | ++++ | ||
| + | |||
| + | |||
| + | |||
| + | ===== 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 | ||
| + | |||
| + | ++++ Example (click to view) | | ||
| + | |||
| + | A number stored in I is used as the register number addressed by (i) | ||
| + | |||
| + | '' | ||
| + | |||
| + | < | ||
| + | |||
| + | this puts '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | this puts '' | ||
| + | |||
| + | < | ||
| + | |||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | < | ||
| + | |||
| + | '' | ||
| + | |||
| + | ++++ | ||
| + | |||
| + | === 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 '' | ||
| + | |||
| + | LF15C has 100 numerical Program Labels so.... | ||
| + | |||
| + | Store '' | ||
| + | |||
| + | Store '' | ||
| + | |||
| + | Using '' | ||
| + | |||
| + | Changing Register **I**' | ||
| + | |||
| + | ++++ Example (click to view) | | ||
| + | |||
| + | Store 100 (for LBL A) in the indirect Register I | ||
| + | |||
| + | '' | ||
| + | |||
| + | Use the value stored in '' | ||
| + | |||
| + | LBL A is a small program to do a simple calculation (area of circle from radius held in '' | ||
| + | |||
| + | LBL B, which has the single command '' | ||
| + | |||
| + | Running LBL B < | ||
| + | |||
| + | < | ||
| + | |||
| + | LBL A | ||
| + | X^2 | ||
| + | PI | ||
| + | * | ||
| + | RTN | ||
| + | |||
| + | LBL B | ||
| + | GTO I | ||
| + | RTN | ||
| + | |||
| + | </ | ||
| + | |||
| + | Changing the contents of Register I will change where LBL B points to. | ||
| + | |||
| + | This allows you to make decisions and branches to different code communicated via the indirect register. | ||
| + | |||
| + | Storing '' | ||
| + | |||
| + | Use < | ||
| + | |||
| + | Using '' | ||
| + | |||
| + | Using '' | ||
| + | |||
| + | ++++ | ||
| + | |||
| + | |||
| + | |||
| + | === Indirect Program Line Number Addressing === | ||
| + | |||
| + | |||
| + | Similar to the above, if the Indirect Register I contains a **NEGATIVE** number then a call to '' | ||
| + | |||
| + | ++++ Example (Click to view) | | ||
| + | |||
| + | < | ||
| + | |||
| + | 0 Empty | ||
| + | 1 LBL A | ||
| + | 2 GTO I | ||
| + | 5 RTN | ||
| + | 6 LBL 88 | ||
| + | 8 X^2 | ||
| + | 9 PI | ||
| + | 10 * | ||
| + | 11 RTN | ||
| + | 12 Empty | ||
| + | |||
| + | </ | ||
| + | |||
| + | Storing '' | ||
| + | |||
| + | Storing '' | ||
| + | |||
| + | Line numbering isn't straightforward, | ||
| + | |||
| + | |||
| + | ++++ | ||
| + | |||
| + | |||
| + | |||
| + | ==== And the rest ==== | ||
| + | |||
| + | |||
| + | * 100 Storage Registers '' | ||
| + | |||
| + | * Factorial / Gamma < | ||
| + | |||
| + | * 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 can also be selected from a scrolling list of options after initially pressing < | ||
| + | |||
| + | * To run a program with a numeric label (i.e. other than '' | ||
| + | * e.g. < | ||
| + | * this is different than on the original HP15C where to run a label you used < | ||
| + | |||
| + | * In program mode, < | ||
| + | |||
| + | * Deleting User Programs | ||
| + | * Delete a //**single program**// : < | ||
| + | * Delete //**ALL programs**// | ||
| + | |||
| + | |||
| + | * FIX/SCI/ENG don't round numbers unless < | ||
| + | |||
| + | * < | ||
| + | |||
| + | * 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 < | ||
| + | * Long press < | ||
| + | |||
| + | * When running a program step by step, a long press on < | ||
| + | |||
| + | * Unused Keys | ||
| + | * < | ||
| + | |||
| + | ===== LF15C Serial Port Info ===== | ||
| + | |||
| + | * Serial Port dump info : [[https:// | ||
| + | * 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 < | ||
| + | * 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 < | ||
| + | * in Putty < | ||
| + | |||
| + | |||
| + | |||
| + | ===== LF15C Firmware Files ===== | ||
| + | |||
| + | |||
| + | Tabulated List of LF15C firmware versions | ||
| + | |||
| + | ^Date^Firmware^Version^Firmware File^Comments^ | ||
| + | |12/09/24 | LF15C | beta240911| {{ : | ||
| + | |15/ | ||
| + | |17/ | ||
| + | |17/ | ||
| + | | 21/ | ||
| + | | 21/09/24 | LF15C | beta240921 | {{ : | ||
| + | | 23/09/24 | LF15C | beta240923 | {{ : | ||
| + | |25/09/24 | LF15C | beta240925 | {{ : | ||
| + | |28/09/24| LF15C | beta240928 | {{ : | ||
| + | | 30/09/24 | LF15C | beta240929 | {{ : | ||
| + | | 30/09/24 | LF15C | beta240929_2 | {{ : | ||
| + | | 01/10/24 | LF15C | beta240930 | {{ : | ||
| + | | 02/10/24 | LF15C | debug241001 | {{ : | ||
| + | | 02/10/24 | LF15C | beta241002 | {{ : | ||
| + | | 03/10/24 | LF15C | beta241003 | {{ : | ||
| + | | 06/10/24 | LF15C | beta241005 | {{ : | ||
| + | | 07/10/24 | LF15C | beta241006 | {{ : | ||
| + | | 08/10/24 | LF15C | beta241007 | {{ : | ||
| + | | 10/10/24 | LF15C | beta241009 | {{ : | ||
| + | | 12/10/24 | LF15C | beta241011 | {{ : | ||
| + | | 14/10/24 | LF15C | beta241014 | {{ : | ||
| + | | 20/10/24 | LF15C | beta241020 | {{ : | ||
| + | | 21/10/24 | LF15C | beta241021 | {{ : | ||
| + | | 22/10/24 | LF15C | beta241022 | {{ : | ||
| + | | 24/10/24 | LF15C | beta241024 | {{ : | ||
| + | | 31/10/24 | LF15C | beta241031 | {{ : | ||
| + | | 02/11/24 | LF15C | beta241102 | {{ : | ||
| + | | 10/12/24 | LF15C | beta241210_2 | {{ : | ||
| + | | 17/12/24 | LF15C | beta241217 | {{ : | ||
| + | | 21/12/24 | LF15C | beta241221 | {{ : | ||
| + | | 22/12/24 | LF15C | beta241222 | ||
| + | | 14/02/25 | LF15C | beta250123 | {{ : | ||
| + | | 15/02/25 | LF15C | beta250215 | {{ : | ||
| + | | 16/02/25 | LF15C | beta250216 | {{ : | ||
| + | | 17/02/25 | LF15C | beta250217b | {{ : | ||
| + | | 19/02/25 | LF15C | beta250218 | {{ : | ||
| + | | 20/02/25 | LF15C | beta250220 | {{ : | ||
| + | | 21/02/25 | LF15C | beta250221 | {{ : | ||
| + | | 25/02/25 | LF15C | beta250225 | {{ : | ||
| + | | 26/02/25 | LF15C | beta250226 | {{ : | ||
| + | | 12/01/26 | LF15C | 250408 | {{ : | ||
| Line 16: | Line 678: | ||
| ===== Further Information ===== | ===== Further Information ===== | ||
| + | * LF15C program dumps [[..: | ||
| + | |||
| + | {{tag> | ||
| - | {{tag>}} | ||
| Page created | Page created | ||