Commit graph

44 commits

Author SHA1 Message Date
Christophe de Dinechin
c96aadd071 Fix rebuild of Markdown help file
The rule used the wrong .html extension, leftover from a distant past.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-20 19:25:01 +02:00
Christophe de Dinechin
9e8444e6c3 Implement a fraction type for both integer and bignum
Two representations for fractions, one for small value of numerator and
denominator, one when both values are larger.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-20 19:06:56 +02:00
Christophe de Dinechin
6d8964ea92 Move the rendering logic into the renderer class
Various pieces of code, essentially equivalent to one another, were implemented
at various places to write into rendering buffers. Replaced all this ad-hoc code
with a single implementation in the renderer, which not only simplifies things
quite a bit, but also allows us to write in the scratchpad without a risk.

Also fixed a problem with the runtime::scratchpad() function returning the
beginning of the scratchpad instead of its current position, which was
inconsistent with a usage that assumed it moved with runtime::allocate(). This
enables a called function to use the scratchpad itself, while its caller also
holds something in it. This is necessary for the rendering of bignums, which
relies on long-division of bignums, and therefore can cause garbage collection,
while we may have the previous set of digits in an earlier part of the
scratchpad.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-20 18:48:51 +02:00
Christophe de Dinechin
77bc37c58a Reimplement bignum as a separate type
Having a sized type for bignum is more efficient both at runtime and in terms of
memory usage:

- At runtime, we don't need all the 7-bit masking and modulo-7 arithmetic
- In terms of memory, there is a cross-over at 63 bits, which is almost exactly
  where it becomes uninteresting to do in-CPU arithmetic

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 22:08:33 +02:00
Christophe de Dinechin
0b771b1993 Add comparison and logic operators
Also add the missing 'abs' function

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 22:05:30 +02:00
Christophe de Dinechin
0211a6e341 Another pass at font fine-tuning
Reset the vertical font positions in the table to what they were initially,
add -y option to ttf2font to perform the adjustment in code.

This preserves the relative positions of lowercase 'a' and 'g'  much better,
and allows the guides in the font editor to show at the right position.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 22:05:30 +02:00
Christophe de Dinechin
f028e690c6 Some font adjustments to make it denser vertically
Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 22:05:30 +02:00
Christophe de Dinechin
a10c8b1779 Implement various kinds of loops
Implement do..until..end, while..repeat..end, start..next, start..step,
for..next, for..step. The latter two are not correct yet because we don't have
local variable lookup creation and lookup yet.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 22:05:30 +02:00
Christophe de Dinechin
303ac0ff17 Add Catalog feature
Add catalog and auto-completion

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:33 +02:00
Christophe de Dinechin
f789158ea5 First pass at RPL-based menus
Added an RPL menu object and connected it to the input class

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:32 +02:00
Christophe de Dinechin
97399d8fbd Move DM42-specific code under the dm42/ directory
This frees 'menu.h' and 'menu.c' for RPL menus

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:32 +02:00
Christophe de Dinechin
5a730fb549 Management of global variables
Also added more details on the description of the memory map, including planned
organization for local variables.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:32 +02:00
Christophe de Dinechin
30ef056ec1 Replace 'string' with 'text
A recurring pet peeve of mine: 'string' is an implementation detail.
We care that it's used to represent text

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:32 +02:00
Christophe de Dinechin
f29d405b71 Parsing and rendering of list objects
List syntax is { ABC DEF { 12 34 "Hello world" } }

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:32 +02:00
Christophe de Dinechin
9588917e88 Connect the most common scientific functions
Connect functions like sin, cos, tan, log, etc.

The bad news is that the bid128 functions take _a lot_ of space.

I thought that all of the Intel decimal floating point library was put in the
QSPI, but apparently, only some tables are. The total of the Intel
floating-point code is roughly 1.49M, the code in the calculator roughly 423K.

The code is rather on the large-ish side, with some large chunks of code that
are really hard to explain, like bid128_pow taking a whopping 42K, which is over
5% of my total memory budget (unless I want to take over the QSPI).

    00000004 T __bid128_rem
    00000024 T __bid128_from_uint64
    00000048 T __bid128_from_int64
    00000062 T __bid128_isInf
    00000082 T __bid128_copySign
    00000104 T __bid128_fma
    00000108 T __bid128_sub
    00000180 T __bid128_isZero
    00000348 T __bid128_atan
    00000348 T __bid128_tanh
    00000352 T __bid128_erf
    00000376 T __bid32_to_bid128
    00000404 T __bid128_expm1
    00000516 T __bid128_asin
    00000544 T __bid128_log1p
    00000572 T __bid64_to_bid128
    00000576 T __bid128_acos
    00000604 T __bid128_cbrt
    00000608 T __bid128_mul
    00000608 T __bid128_tgamma
    00000640 T __bid128_exp
    00000648 T __bid128_asinh
    00000656 T __bid128_log
    00000668 T __bid128_log2
    00000676 T __bid128_exp2
    00000684 T __bid128_log10
    00000768 T __bid128_cosh
    00000784 T __bid128_atanh
    00000784 r bid_coefflimits_bid128
    00000880 T __bid128_sinh
    00000900 T __bid128_acosh
    00000968 T __bid128_exp10
    00001016 T __bid128_lgamma
    00001048 T __bid128_erfc
    00001628 T __bid128_class
    00001752 T __bid128_round_integral_zero
    00002004 T __bid128_quiet_equal
    00002176 T __bid128_round_integral_nearest_even
    00002740 T __bid128_to_string
    00003208 T __bid128_to_int32_rnint
    00003680 T __bid128_tan
    00003708 T __bid128_cos
    00003728 T __bid128_to_int32_xrnint
    00003736 T __bid128_quiet_greater
    00003740 T __bid128_sin
    00003748 T __bid128_quiet_less
    00003748 T __bid128_quiet_less_equal
    00004400 T __bid128_hypot
    00004440 T __bid128_to_binary128
    00004700 T bid128_to_binary128_2part
    00004864 T __bid128_to_bid32
    00005484 T __bid128_to_bid64
    00005876 T __bid128_fmod
    00008430 T __bid128_sqrt
    00008592 T __bid128_from_string
    00010140 T __binary128_to_bid128
    00017348 T __bid128_div
    00024390 T __bid128_add
    00029524 t bid128_ext_fma
    00042058 T __bid128_pow

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:32 +02:00
Christophe de Dinechin
63f588c841 Build for small size
It does not seem to do much of a difference in terms of performance, and we are
really not wanting to have multiple inlined variants of the same function.

For example, draw_stack used to take 5K, it's down to about 1K.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:32 +02:00
Christophe de Dinechin
fa5fe5ad5e Switch to a new font for help
Also use the same font for stack and editor.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:32 +02:00
Christophe de Dinechin
cb91eee174 Don't need to install the HTML files anymore
All markdown now, yay!

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:32 +02:00
Christophe de Dinechin
a2cc082db9 Add markdown-based on-line help
This is distantly derived from the help system I implemented for newRPL, but the
low-memory condition on the DM42 means we try to do everything without
allocating any memory.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:32 +02:00
Christophe de Dinechin
ecf939ae05 Build fonts for editor and stack
Add references to the UI fonts from font.h
Also add font::height() to compute the height of the font

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
13abd5c7f3 Build C43S TTF font and integrate that into the build and simulator
This will be the next interesting font to use...

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
6e3557ace4 Add some basic code for font objects
This parses the font object to return the address of the bitmap data.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
a8e0a48f5d Use the new graphics to clear the screen
This is a simple small-scale test that uses the new graphics routine to clear
the screen with a gray-scale pattern.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
292dcf0a1d Second pass at C++-ification of graphics / blitting routine
This second pass redesigns how template parameters are used:
- The graphics class itself is no longer a template
- The color, pattern and surface all take a template BPP
- Specializations are put "at the right spot"

This makes it more natural to have mixed-BPP operations that share a number of
types, like coordinates, points, rectangles.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
35c4c46f65 Implement arithmetic operations
This is made a bit complicated by the fact that numbers can be represented in 6
integer types and 3 decimal floating-point types. So every operation must deal
with promotion.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
bdf017e40f Add algebraics, the base class for algebraic operations
All the to-be-created-shortly operations like addition, etc, are not just
commands, but algebraic operations in RPL, so prepare for that

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
89a774ba5f Add RPL symbols (names)
Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
1622e03145 Basic infrastructure for RPL commands
Implemented three basic commands: dup, drop and swap

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
db47cd69ca Put the primary makefile rules at the top
If not, then recorder/config.h gets picked by default for 'make'

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
4c5143e62c Pass debug config to simulator
Also define DEBUG define for DEBUG builds

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
828d83f5e3 Also clean the simulator object files
Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
a762964ec8 Fix recursive target for debug and release
Don't recurse on the same target

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
e85b1fd79c Add the recorder library on the simulator
We can't really use it on the DM42 itself, because it has so
little memory (70K) that using it for recorders is a waste.
But for debugging on the simulator, it's really handy.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
0e800f1a68 Implement basic stack rendering
Show objects on the stack, calling the appropriate renderer

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:31 +02:00
Christophe de Dinechin
884b3d164e Some progress towards having a real editor
Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:30 +02:00
Christophe de Dinechin
644e7954b7 Decimal128 objects and related
This uses the Intel library for 3 classes of precision

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:30 +02:00
Christophe de Dinechin
23d69a0531 Refactoring of main.cc
Move utilities away, elimination of type warnings, a lot of other minor changes

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:30 +02:00
Christophe de Dinechin
6399a1556a Prototype simulator for the DM42
Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:30 +02:00
Christophe de Dinechin
7d556893fe Implementation of the string type
Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:30 +02:00
Christophe de Dinechin
d8132f9f42 A version of runtime and object that compiles
This is the base infrastructure, but it is a good starting point.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:30 +02:00
Christophe de Dinechin
24c44453ba Convert main to C++
This required a few adjustments here and there, like headers that were not quite
C++-ready.

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:30 +02:00
Christophe de Dinechin
c0414ec19f Add a target to install the binary directly
This is macOS specific for now

Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:30 +02:00
Christophe de Dinechin
aebe951167 Cleanup the build system a little
Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
2023-06-19 21:56:30 +02:00
David Jedelsky
bf57c36c90 Initial commit 2018-07-03 15:54:10 +02:00