Skip to content

Releases: c3d/db48x

Release 0.4.4: Graphic objects, tagged objects, Undo and LastArgs

Choose a tag to compare

@c3d c3d released this 30 Sep 22:28

Notes:

  • This release switches the DM42 build to "optimize for size", because
    we ran out of program space for an "optimize for speed" build.
    The DM32 build is still optimized for speed.
  • The release is not really "well rounded". Notably, graphical
    rendering of stack objects is active, but not complete. Everything
    is still rendered from text, and there is no caching yet.
  • The package is now consistently called DB50X for DM32 and DB48X for DM42.
    In the long run, the DB50X is expected to be more full-featured or slightly
    faster everything being equal, due to limitations in DM42 program space that
    are fast approaching.

New features:

  • Graphic objects, aka grob(#30)
  • Graphic operations: GOr, GXor, GAnd (#383)
  • Method for graphical rendering of objects (#47)
  • Tagged objects, dtag and ->tag commands (#21)
  • LastArg (#379, #55)
  • Undo, i.e. last stack (#380, #55)
  • LastX (#384, #55)

Bug fixes:

  • Fix latent memory corruption bug in text constructor
  • Fix out of memory error reporting while building text objects
  • blitter: Fix clipping when src and dest don't have same x direction

Enhancements:

  • Use the help method to select help topic (#378)
  • Graphical rendering of stack (#382)
  • Simulator: Fix program exit with EXIT key after another key (#356)
  • Simulator: Set 40K as default memory
  • Out of program space: Switch to -Oz on DM42
  • Generate different help files for DB48X and DB50X

Signed-off-by: Christophe de Dinechin christophe@dinechin.org

Release 0.4.3: Graphics / plotting stabilization

Choose a tag to compare

@c3d c3d released this 28 Aug 01:02

New features:

  • Released binaries for DM32, seem to be working (use DB50X files)
  • Parametric and polar curves (#364)
  • Function, Polar and Parametric can be used to plot from stack (#339)
  • ResetModes command (#315)
  • Add Clip command to control screen clipping rectangle (#313)
  • Separate "graphic" mode (#342)
  • Add CAS numeric / symbolic flag (#346)
  • Accept functions that use the independent variable from PPAR (#352)
  • Source code comments (#94)
  • Add a demo state file (#355)

Bug fixes:

  • Scaled coordinate system was upside down (#331)
  • Skip errors during function plot (#329)
  • Make ->Num work on equations (#345)
  • Fill glyph background over whole height of font (#335)
  • Refresh screen correctly after drawing axes (#328)
  • Refresh screen better during plotting (#337)
  • Save line width, foreground and background in state (#338)
  • Correctly skip closing parentheses for "legacy" complex syntax (#336)
  • Workaround QSPI fast-read bug on DM32 to avoid crashes (#304)
  • Parsing pi in equations as built-in command, not symbol (#347)
  • Do not leak errors during plotting (#354)
  • Missing trailing space when rendering lists (#361)
  • Correct parsing of based integer at end of a list (#362)
  • Emit error if missing variable in for next (#363)
  • Fix backward conversion from radians for fractions (#365)
  • Execute local variables when evaluating them (#366)
  • Fix 'EXIT' key to interrupt program in Wait (#356)
  • Convert coordinates from based numbers as unsigned (#368)

Enhancements:

  • Switch to 32-bit graphic coordinates (#334)
  • Clip lines more efficiently to clipping rectangle (#332)
  • Draw axes by default when plotting (#353)
  • Change position of type in connstructors (#343)
  • Add 'save' internal utility to save/restore scoped variable (#349)
  • Optimize special case of polar addition / subtraction with same argument
  • Updated PNG / SVG files for overlay
  • Disp goes to new line at original horizontal position (#358)
  • Add -m option to pass memory size to simulator (#367)
  • Make symbol comparison for dependent variable case-independent (#369)

Signed-off-by: Christophe de Dinechin christophe@dinechin.org

Full Changelog: v0.4.2...v0.4.3

Release 0.4.2: Graphics and plotting

Pre-release

Choose a tag to compare

@c3d c3d released this 15 Aug 07:24

New features:

  • Display folder marker on directories in VariablesMenu (#309)
  • Alternate menu styles (sqare vs. rounded, single-line or 3-line) (#310)
  • line, circle, ellipse, rect and rrect graphic commands (#311, #316, #318)
  • linewidth, foreground, background graphic commands (#312)
  • ppar special variables for user coordinates (#319)
  • cllcd to clear the screen
  • drax to draw plotting axes (#321)
  • draw command to plot a function (#323)
  • wait command to wait for a delay or key press (#324)

Bugs:

  • Memory corruption when GC was triggered in a constructor (#325)
  • Improve complex_promotion to avoid undesirable complex format changes
  • Wrong pattern alignment in screen blitting operations
  • Off by one error in width and height of blitter rectangles (#
  • Conversion of fractions to uint32 (#321)
  • Conversion between bignum and uint32 / int32

Improvements:

  • Update dmcp commit to include a single fix for _exit
  • Better rendering of folder menus, looks more like a folder (#310)
  • Add .clang-format file to facilidate standard code formatting
  • Add AUTHORS file
  • Global variable lookup is now case-independent

Signed-off-by: Christophe de Dinechin christophe@dinechin.org

Release 0.4.1: Complex fixes

Pre-release

Choose a tag to compare

@c3d c3d released this 07 Aug 22:21

This is the first release with contributions from third parties. Special thanks to @camillew and @spiff72.

Features:

  • type and typename commands (#285)
  • bytes command (#284)
  • →Num and →Q (#255, #282)
  • if (#290) and iferr (#291)
  • errm, errn, err0, doerr
  • disp command (#296)
  • crdir, pgdir, directories (#298)
  • xroot (#276)
  • DMCP5 support and DM32 build
  • Remove the fixed-base base numbers (#274)
  • Promotions of fractions to decimal128 (#266)
  • Add the glyph for the ⇄ sign and xth root (on ∜ in Unicode)

Bug fixes:

  • Avoid null-dereference for out-of-range complex cos (#253)
  • Do not leave input argument for C->R and R->C conversions (#252)
  • Fix display of "Seconds" marker in setup (#247)
  • bignum: Read int values using correct endianness (#267)
  • complex: More careful handling of angle units for polars (#251)
  • display: Do not display trailing digit separator after rounding (#256)
  • editor: Do not insert separators while typing symbols or text (#260)
  • header: Fix off-by-one in month name (#248)
  • help: Better scanning to find names with special Unicode characters (#286)
  • logical: Check the type of stack level 2 (#272)
  • modulo: Fix the case of -360 mod 360 (#264)
  • settings: Default value for FractionSpacing is 5, not 3 (#261)
  • state: Do not emit 'AutoSimplify' since it's the default (#257)
  • state: Truncate state name for display (#246)
  • ui: Repair drawing of current command
  • Allow xshift-ENTER to insert text while not editing (#293)
  • Multiplication by -1 had no effect (abusive simplification) (#288)
  • Argument of negative numbers should be pi, not 0 (#287)
  • Emit error message for 0/0 (#279)
  • Restore missing glyphs for atan2 and hypot (#295)
  • arg for (1+i) returned a negative value (#277)
  • List + Text returns a list, not text (#297)
  • Complex tan computation (#300)
  • Wiring of some missing menu entries (thanks @camillew)

Improvements:

  • Change license to GPLv3
  • doc: Add section about Unicode support
  • doc: Change the level of sub-headings
  • doc: Document changes regarding list
  • state: display state file name on the right of date/time (#258)
  • tests: Run tests with default settings (#259)
  • Rename graphics class to blitter
  • Add 'make clangdb' makefile target
  • Add documentation for arithmetic operations (+, -, *, /, ^)
  • Expand documentation on autosimplify
  • New SVG template contributed by @spiff72

Signed-off-by: Christophe de Dinechin christophe@dinechin.org

Full Changelog: v0.4...v0.4.1

Release 0.4: Matrices and equation rewrites

Choose a tag to compare

@c3d c3d released this 30 Jul 13:38

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 christophe@dinechin.org

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

Release 0.3.1: Editor acceleration

Pre-release

Choose a tag to compare

@c3d c3d released this 19 Jul 22:49

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 christophe@dinechin.org

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

Release 0.3: Complex numbers

Pre-release

Choose a tag to compare

@c3d c3d released this 17 Jul 08:11

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 christophe@dinechin.org

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

v0.2.4 - Dynamic number spacing while editing

Choose a tag to compare

@c3d c3d released this 11 Jul 07:57

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

Pre-release

Choose a tag to compare

@c3d c3d released this 10 Jul 07:06

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 christophe@dinechin.org

v0.2.2 - Optimisations and stabilisation

Choose a tag to compare

@c3d c3d released this 07 Jul 06:47

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