Skip to content

Releases: c3d/db48x

Release 0.4: Matrices and equation rewrites

30 Jul 13:38
@c3d c3d
Compare
Choose a tag to compare

New features:

  • Equation rewrite engine (#203, #213, #244)
    • Early implementation of expand and collect (#231)
  • Transient alpha mode for quick alppha entry (#204, #215, #233, #237)
    (note that XEQ no longer automatically switches to alpha)
  • Vector and array arithmetic (#26, #185, #190)
    • Determinant of square matrices (#187, #217)
    • Inverse of a square matrix (#180, #189, #201)
    • Euclidean norm for matrices and vectors (#188)
    • Component-wise multiplication and division of vectors (#181)
    • Binary operations between matrix / vector and constant (#183)
    • Matrix * vector (#195)
  • Automatic simplification in basic operations (#197, #216, #221)
  • Help knows how to render "yellow" and "blue" keys
  • Contextual tool menu (#127) and contextual help (#162, #193)
  • LastMenu (xshift-A) goes back in menu history (#165)
  • Displaying date and time in the header (#123, #224)
  • GET function on lists and arrays (#173)
  • Concatenation and repetition of lists (#178)
  • Apply standard functions to arrays and lists (#179, #182)
  • Add limits to size of numbers and number of rewrites (#214)

Improvements:

  • Better rendering of unimplemented menu functions (#218)
  • Accelerate garbage collector (#219)
  • Render polar arguments with explicit angle units (#119, #161)
  • Update key layout for easier matrix / vector entry (#198)
  • Render complex numbers with additive precedence (#222)

Bugs fixes:

  • Fix cursor position for up/down movement (#159)
  • Show help for R/S (Eval) and division keys (#157)
  • Fix spacing for thousands (e.g 5000) (#137)
  • Redraw editor after inserting variable name (#156)
  • Draw alpha annunciator after busy cursor is cleared
  • Refresh editor when going at beginning or end of text
  • Parsing of Invert(X) (#163)
  • Do not insert parenthese in editor after binary operators (#164)
  • Correct parsing of π and imaginary unit (#145, #168, #169, #207, #208)
  • Repair repeat for R/S as a space key (#199)
  • Parsing of complex numbers in matrices (#205)
  • Parsing of complex numbers in equations (#220, #224)
  • Parsing of "fancy" power sign (#238)
  • Computation of power with integer and negative exponent (#239)
  • Refresh menu after NumberSpacing (#240)

Other:

  • Various help file improvements:
    • Help now uses more standard mardown for keys
    • As a result, README.md now points to the built-in help on GitHub (#227)
    • Add acknowledgements to help file (#129), including link to HP Museum
    • Improve documentation of differences between RPL variants (#177, #192)
    • Add documentation for the Help command (#228)
    • Fix label for F6 key in help (#230)
    • Improve rendering of code font in help (#232)
  • Improved test suite, now faster, more stable and detects more errors
  • Fixes / adjustments to keyboard layout suggested by C47 team
  • Use standard C++ iterators for programs and lists (#166, #242)
  • Split source files for list, program, array and equation (#167)
  • Unify precedence handling for parser and renderer
  • Add "storytelling" file (#191) for video demos
  • Update STATUS.md file (#200)
  • Fix generation of fonts
  • Fix subtle dereferencing bug in GC pointer
  • Use C++ template metaprogramming to build RPL equations from C++ (#230)
  • Use flags instread of range comparisons to check properties of objects (#234)
  • Default settings when running "current test" (#150)
  • Add rewrite_all to rewrite until convergence (#241, #243)
  • Do not integrate random files in make dist.

Verse of the day:
The kingdom of heaven is like treasure hidden in a field.
When a man found it, he hid it again, and then in his joy went and sold
all he had and bought that field (Mt 13:44)

Signed-off-by: Christophe de Dinechin [email protected]

Full Changelog: v0.3.1...v0.4

Release 0.3.1: Editor acceleration

19 Jul 22:49
@c3d c3d
Compare
Choose a tag to compare
Pre-release

Bug fixes:

  • Avoid a beep on shift-ENTER (shifting Alpha mode)
  • Do not drop top of stack if editing editor with EXIT
  • Display factorial as a postfix (X! and not !X)
  • Modulo on negative integers
  • Computation of modulo for fractions
  • Parsing of + at end of command-line (interpreted as number)
  • Trailing zeros inserted if non-displayed significant digit

Features:

  • Optimization of the text editor, now reasonably fast on battery
  • Add ancillary functions to manage complex numbers
  • Add pi function
  • Respect angles settings in trigonometric functions
  • Added Purge and PurgeAll to MemoryMenu
  • Normalized angle for complex in polar form (sensitive to DEG/RAD/GRAD)

Other:

  • Some rearranging of the menus (unfinished)
  • Updated the proposed keyboard layout, notably with "Previous menu"
    and "Toolbox" (context-sensitive menu) keys, removal of duplicate
    "Stack" key assignment.
  • Make GC and busy animation a bit faster to avoid skipping on battery

Signed-off-by: Christophe de Dinechin [email protected]

Full Changelog: v0.3...v0.3.1

Release 0.3: Complex numbers

17 Jul 08:11
@c3d c3d
Compare
Choose a tag to compare
Pre-release

Bug fixes:

  • CHS on second number on the command line (#105)
  • program interruption when keys were pressed other than EXIT (#104)
  • Rounding of 1.9999 displaying as 10.000 instead of 2.000 (#112)
  • Memory corruption in logical operations on big numbers (#103, #107)
  • Out of memory error when no spacing is present (#109)
  • Strip trailing zeros introduced by rounding (#116, #117)
  • Reject 0 SIG (displaying no significant digits)
  • Potential crash in low-memory condition (#118)
  • Removed useless "Program" menu in system menu (#120)
  • Exit the state save/load menu after saving/loading (#122)
  • Crash loading state file if no error was generated
  • Detection of integer overflow in implementation of a^b (power)
  • Evaluation of "ABC" 3 * was no longer working

Features:

  • Complex numbers (#15)
  • Render based numbers with base as subscript (#106)
  • Change default spacing for fractional part to 5 digits (#108)
  • Animation for long-running user programs and garbage collection (#115)
  • xshift-EXIT saves state to disk (#113)
  • Switch to three-level menus by default (#128)
  • Generalization of pow with integer on right side
  • Represent hypot and atan2 using ⊿ and ∠ operators
  • Added sign function
  • Change behavior of Shift-Enter (alpha), now cycles back to non-alpha

Other:

  • Add keyboard cutout for tentative keyboard layout
  • Vastly enhanced regression test suite (faster and more extensive)
  • Fixed dependencies in Makefile for fonts
  • Improved efficiency of arithmetic computations
  • Added several characters to the base font
  • Improve 'const'-safety in C++ code, garbage-collected pointers are const now

Signed-off-by: Christophe de Dinechin [email protected]

Full Changelog: v0.2.4...v0.3

v0.2.4 - Dynamic number spacing while editing

11 Jul 07:57
@c3d c3d
Compare
Choose a tag to compare

Bug fixes:

  • CHS removes negative sign instead of putting a + sign
  • Fix crash when applying decimal functions to negative values (#101)
  • Use default formatting when saving calculator state
  • Repair rendering of FIX, SCI and ENG on the stack (#100)
  • Fixes the selection of the editor's displayed rows and columns (#98, #99)
  • Remove premature "too many digits" error message for decimal128 (#97)
  • Do not terminate editing for self-inserting menus such as # (#96)
  • Show B cursor for all base-36 digits (#95)
  • Defensive coding against malformed UTF8 text rendering (#101)

Features:

  • Show thousand separators while editing numnbers
  • Render based numbers with a numerical postfix base indicator (#95)
  • Parse numbers in arbitrary base, e.g. 3#212 (#95)

Full Changelog: v0.2.3...v0.2.4

Release 0.2.3 - For loops

10 Jul 07:06
@c3d c3d
Compare
Choose a tag to compare
Pre-release

Bug fixes:

  • Memory corruption in division of large numbers (#70)
  • Parsing 'X⁻¹+(Y²+Z³)' resulting in syntax error (#76)
  • Parsing -80/60 resulting in 4/3 (sign lost) (#78)
  • Large numbers written to state file had separators (#83)
  • Render names on stack as 'ABC' instead of 'ABC' (#84)
  • Evaluate names as 'ABC' and not ABC (#86)
  • Directory corruption following purge (#87)
  • Local blocks now always execute (#90)
  • Correct spacing of control structures on stack

Features:

  • Keyboard binding to create lists (#89)
  • Implementation of for loops (#92)

Other:

  • Solidified the test suite further, added many tests
  • Added reference to FOSDEM talk to README.md
  • Added Freedom Covenant to the repository

Signed-off-by: Christophe de Dinechin [email protected]

v0.2.2 - Optimisations and stabilisation

07 Jul 06:47
@c3d c3d
Compare
Choose a tag to compare

Bugs fixed since v0.2.1:

  • Fixed the while loop
    The test for the while loop was inverted
    The location of the end and repeat keywords was swapped

  • Fixed bug in detection of multiplication overflow
    The computation of the factorial of 23 and up is now correct.

  • Fixed bug mistakenly converting some fractions to integers
    For example, 2/17 INV would return 17 instead of 17/2

  • Add spacing to large numbers
    A number that did not fit on 64-bit would not respect spacing settings

  • Repaired the test suite
    Tests were setting-dependent, and would fail with default settings because
    they did not take number spacing into account.

Features implemented since v0.2.1:

  • Implemented local variables, e.g. << -> A B C << A B - C * >> >>
    Local variables are a very fast way to reference data. Internally, they are
    represented by an offset to a known location, which makes them practically as
    fast as stack accesses, and much faster than global variable lookups.

  • Implement the same function
    The same function detects if two objects are identical.
    Like the HP48, there are multiple "equality" variants:

    • same detects if two objects are binary-identical
    • == does the same, but dereference names
    • = is a mathematical equality (does not exist in HP48 RPL)
  • Add feature to import ASCII versions of «, » and
    In .48S files, you can use <<, >> and -> instead.

  • Implement →List (stack to list)
    This was the last missing command to be able to execute the
    HP calculator's N-queens benchmark

  • Better truncation of very large numbers when shown on stack
    A very large number, like the factorial of 64, would show up truncated
    at 80 digits, so the first digits shown were wrong.

  • Various optimizations to make things a bit snappier, notably on battery power

    • Refactored the object model to use a simpler lookup mechanism

    • Implemented a C++ interface for arithmetic and functions, which will be
      useful when implementing complex number and matrix operations, and already
      simplified the code for operations such as abs or cubed.

    • Sime fine-tuning of LEB128 handling for types

    • Execution time for NQueens measured, reduced from about 980ms down
      to about 530ms.

Full Changelog: v0.2.1...v0.2.2

Version 0.2.1 - Add VERSION command

01 Jul 07:37
@c3d c3d
Compare
Choose a tag to compare
Pre-release

Add a VERSION command, and git-derived version string in the PGM file

Full Changelog: v0.2...v0.2.1

v0.2 - Fix problem when running on battery power

30 Jun 21:29
@c3d c3d
Compare
Choose a tag to compare

The primary reason for a v0.2 is that this solves #12, a hang on battery power. There are also major bug fixes on integer arithmetic, and a new formatting of numbers.

Full Changelog: v0.1...v0.2

v0.1

28 Jun 05:56
@c3d c3d
Compare
Choose a tag to compare
v0.1 Pre-release
Pre-release

First preview of the firmware with pre-built binaries

To install:

  1. Put your DM42 in USB disk mode
  2. Expand the contents of the release at the base of the disk. You should have four files, DB48X.pgm, DB48X_qspi.bin, help/DB48X.md and STATE/test.48S
  3. Using the calculator's setup menu, flash QSPI image from USB disk. This will load DB48X_qspi.bin and erase it from the disk.
  4. Using the calculator's setup menu, load the DB48X.pgm.

Note: Normally, the QSPI binary is "compatible" with the original DM42 program, so that you can switch back and forth. There may be limitations if the symbols in that file are not at the right address. If your DM42 program misbehaves after installing this QSPI, restore the original QSPI image from SwissMicros.