Find a file
Christophe de Dinechin 6c94f3d700 Release 0.5.2 "Christmas Eve": Reaching hard limits on DM42
This release was a bit longer in coming than earlier ones, because we are about
to reach the limits of what can fit on a DM42. This release uses 711228 bytes
out of the 716800 (99.2%).

Without the Intel Decimal Library code, we use only 282980 bytes. This means
that the Intel Decimal Library code uses 60.2% of the total code space. Being
able to move further requires a rather radical rethinking of the project, where
we replace the Intel Decimal Library with size-optimized decimal code.

As a result, release 0.5.2 will be the last one using the Intel Decimal Library,
and is release in parallel with 0.6.0, which switches to a table-free and
variable-precisions implementation of decimal code that uses much less code
space. The two releases should otherwise be functionally identical

**New features**

* Shift and rotate instructions (#622)
* Add `CompatibleTypes` and `DetsailedTypes` setting to control `Type` results
* Recognize HP-compatible negative values for flags, e.g. `-64 SF` (#625)
* Add settings to control multiline result and stack display (#634)

**Bug fixes**

* Truncate to `WordSize` the small results of binary operations (#624)
* Fix day-of-week shortcut in simulator
* Avoid double-evaluation of immediate commands when there is no help
* Generate an error when selecting base 1 (#628)
* Avoid `Number too big` error on based nunbers
* Correctly garbage-collect menu entries (#630)
* Select default settings that allow solver to find solutions (#627)
* Fix display of decimal numbers (broken by multi-line display)
* Fix rendering of menu entries for `Fix`, `Std`, etc
* Detect non-finite results in arithmetic, e.g. `(-8)^0.3`m (#635, #639)
* Fix range-checking for `Dig` to allow `-1` value
* Accept large values for `Fix`, `Sci` and `Eng` (for variable precision)
* Restore missing last entry in built-in units menu (#638)
* Accept `Hz` and non-primary units as input for `ConvertToUnitPrefix` (#640)
* Fix LEB128 encoding for signed value 64 and similar (#642)
* Do not parse `IfThenElse` as a command
* Do not consider `E` as a digit in decimal numbers (#643)
* Do not parse `min` as a function in units, but as minute (#644)

**Improvements**

* Add `OnesComplement` flag for binary operation (not used yet)
* Add `ComplexResults` (-103) flag (not used yet)
* Accept negative values for `B→R` (according to `WordSize`)
* Add documentation for `STO` and `RCL` accessing flash storage
* Mention `True` and `False` in documentation
* Rename `MaxBigNumBits` to `MaxNumberBits`
* Return HP-compatible values from `Type` function
* Minor optimization of flags implementation
* Catalog auto-completion now suggests all possible spellings (#626)
* Add aliases for `CubeRoot` and `Hypothenuse`
* Align based number promotion rules to HP calculators (#629)
* Expand the range of garbage collector integrity check on simulator
* Show command according to preferences in error messages (#633)
* Avoid crash in `debug_printf` if used before font initialization
* Update performance data in documentation
* Add ability to disable any reference to Intel Decimal Floating-point library
* Simplify C++ notations for safe pointers (`+x` and `operartor bool()`)
* Fix link to old `db48x` project in `README.md`

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-12-25 19:14:26 +01:00
config units: Fix rpm value in the units definitions 2023-11-17 14:10:57 +01:00
DB48X-DB50X-Keys-Src Add files via upload 2023-10-17 21:41:09 -04:00
DB48X-Keys keyboard: Change 'CST' label to 'CONST' 2023-10-15 22:13:49 +02:00
dmcp@4befe9b376 Update dmcp commit 2023-08-08 15:21:39 +02:00
dmcp5@91cb47248c license: Change to GPL v3, disconnect from DMCP 2023-08-07 23:58:27 +02:00
doc Release 0.5.2 "Christmas Eve": Reaching hard limits on DM42 2023-12-25 19:14:26 +01:00
fonts font: Add the Angstrom character 2023-11-01 17:46:51 +01:00
help Release 0.5.2 "Christmas Eve": Reaching hard limits on DM42 2023-12-25 19:14:26 +01:00
inc Decimal128 objects and related 2023-06-19 21:56:30 +02:00
lib DMCP Version 3.13 2019-05-22 14:19:31 +02:00
recorder@9b1b214ab2 Update version of the recorder 2023-07-01 09:32:52 +02:00
sim simulator: Fix day of week shortcut 2023-12-01 16:50:23 +01:00
src Release 0.5.2 "Christmas Eve": Reaching hard limits on DM42 2023-12-25 19:14:26 +01:00
state Demo.48S: Small updates to demo file 2023-11-26 22:46:21 +01:00
tools dm32: Generate config-independent font file 2023-10-23 00:18:47 +02:00
.clang-format Add .clang-format file 2023-08-08 15:44:45 +02:00
.clangd Find includes two level up (necessary e.g. for target.h) 2023-06-20 18:47:55 +02:00
.gitignore help: Add generated help to the repository 2023-10-20 20:25:16 +02:00
.gitmodules license: Change to GPL v3, disconnect from DMCP 2023-08-07 23:58:27 +02:00
AUTHORS Add AUTHORS file 2023-08-08 16:05:04 +02:00
BUILD.md help: Add various acknowledgements to the help file 2023-07-21 12:08:08 +02:00
FREEDOM_COVENANT.txt Add freedom covenant to that repository 2023-07-07 21:23:43 +02:00
Keyboard-Cutout.png keyboard: Change 'CST' label to 'CONST' 2023-10-15 22:13:49 +02:00
Keyboard-Layout.png keyboard: Change 'CST' label to 'CONST' 2023-10-15 22:13:49 +02:00
LICENSE.txt license: Change to GPL v3, disconnect from DMCP 2023-08-07 23:58:27 +02:00
Makefile dm42: Restore Intel decimal library by default 2023-12-25 11:51:13 +01:00
README.md doc: Fix link to old db48x in README.md 2023-12-25 11:51:13 +01:00
STATUS.md Min and Max operations 2023-11-26 22:46:21 +01:00

DB48X on DM42

The DB48X project intends to rebuild and improve the user experience of the HP48 family of calculators, notably their "Reverse Polish Lisp" (RPL) language with its rich set of data types and built-in functions, and Lisp-level programming power.

The project in this repository is presently targeting the SwissMicro DM42 and DM32 calculators. It leverages their built-in software platform, known as DMCP. There is also a simulator that is tested on macOS or Linux.

In the long-term, the vision is to be able to port DB48X on a number of different physical calculator platforms, like the ARM-based HP50 and related machines (HP49, HP48Gii, etc), and the HP Prime (at least the G1, since the G2 seems a bit more locked down), maybe others. The basis for that work can be found in the DB48X project.

This project was presented at FOSDEM 2023

Watch the video

Why name the project DB48X?

DB stands for "Dave and Bill", who are more commonly known as Hewlett and Packard. The order is reversed compared to HP, since they reportedly chose the order at random, and it's about time Dave Packard was given preeminence.

Part of Dave and Bill's great legacy (beyond giving birth to the Silicon Valley) is a legendary series of calculators. The HP48 remains one of my favorites, notably for its rich built-in programming language, known as Reverse Polish Lisp (RPL). This project aims at recreating a decent successor to the HP48, at least in spirit.

State of the project

This is currently UNSTABLE and INCOMPLETE software. Please only consider installing this if you are a developer and interested in contributing. Or else, have a paperclip at hand just in case you need to reset your calculator.

The detailed current status is described in the STATUS file.

Self-test in the simulator

How to build this project

There is a separate document explaining how to build this project. The simulator includes a test suite, which you should run before submitting patches. To run these tests, pass the -T option to the simulator, or hit the F12 key in the simulator.

Built-in documentation

The calculator features an extensive built-in documentation that uses a restricted version of Markdown. You access that built-in help by holding a key down, or using the Help command

Other documentation

There is DMCP interface doc in progress see DMCP IFC doc (or you can download html zip from doc directory).

The source code of the DM42PGM program is also quite informative about the capabilities of the DMCP.