Close
0%
0%

zeptoforth

A full-featured Forth-based RTOS for ARM Cortex-M

Public Chat
Similar projects worth following
zeptoforth is a bare-metal Cortex-M Forth which includes an preemptively-multitasking, priority-scheduled RTOS. It currently supports the Raspberry Pi Pico and Raspberry Pi Pico W (and other RP2040-based boards), the Raspberry Pi Pico 2 and Pimoroni Pico Plus 2 (and other RP2350-based boards), STM32L476, STM32F407, and STM32F746 DISCOVERY boards, and STM32F411 "Black Pill" boards, but work is planned on porting it to other boards in the near future.

zeptoforth is a portable subroutine-threaded / native code inlining Forth for Cortex-M0+/M4/M7/M33 microcontrollers which includes a preemptively multitasking RTOS using deadline scheduling designed to be able to compile to and run from both flash and RAM (the kernel of course exists in flash).

The library of code coming with zeptoforth includes support for the following:

  • Lambda expressions
  • VALUEs, 2VALUEs, and lexically-scoped local variables compatible with DO LOOPs
  • Implicit compilation, where conditional/looping constructs are temporarily compiled during intepretation mode, executed, and then forgotten
  • Closures
  • Dynamically-scoped, task-local variables
  • Double-cell and S31.32 fixed-point arithmetic, including the usual mathematical functions
  • Hardware single-precision floating point (except on the RP2040 and STM32F411)
  • SysTick
  • Interrupt-driven serial IO drivers
  • A simple GPIO abstraction layer that is maximally uniform across supported platforms
  • GPIO and, where applicable, EXTI drivers
  • Arbitrary UART support, beyond the console alone
  • ADC support
  • SPI support
  • SDHC/SDXC card support
  • FAT32 filesystem and MBR partition table on SDHC/SDXC cards support
  • Support for loading code from files in FAT32 filesystems
  • Rebooting via Control-C at the console, or Reboot in zeptocom.js
  • Attention key commands via Control-T at the console, or Attention in zeptocom.js; currently the only attention key commands are 'z', which sends an exception to the main task, and 't', which, when the task monitor is active, displays information on all running task
  • An optional task monitor (note that starting creates a task dedicated to it)
  • Preemptive multitasking
  • Action scheduling including synchronous messaging between actions on single tasks
  • A disassembler
  • Moving the exception vector table into RAM so it can be arbitrarily set
  • Task notifications
  • Semaphores
  • Locks
  • Signalling exceptions on other tasks
  • Message-oriented channels
  • Message-oriented rendezvous channels (aka "fchannels")
  • Message-oriented synchronous bidirectional reply channels (aka "rchannels")
  • Message-oriented ISR-friendly channels (aka "schannels")
  • Byte-oriented streams
  • Software alarms
  • Console redirection
  • Object-orientation
  • Maps, including counted string and integer-keyed maps
  • Temporary buffers
  • An allocator
  • Memory pools
  • Task pools
  • Action pools (for the single-task event scheduler)
  • A line editor
  • LED drivers
  • Random number generator drivers (except on STM32F411 "Black Pill" boards)
  • Pseudorandom number generation support (using the TinyMT32 PRNG)
  • Best-effort fault recovery
  • swdcom support for non-UART-based terminal support

On the Raspberry Pi Pico (and other compatible RP2040-based boards) and Raspberry Pi Pico 2 and Pimoroni Pico Plus 2 (and other compatible RP2350-based boards) it also supports the following:

  • An optional USB CDC console
  • Programmable input/output (PIO)
  • Hardware watchdog
  • I2C, in both master and slave modes
  • PWM, including both input and output
  • Hardware timers
  • Realtime clocks (note that on RP2350-based boards this is emulated using the Always-On Timer)
  • Multicore execution; note that this can be combined with multitasking on each core and multitasking constructs can be shared by both cores

Additionally, for any Pico-family board in a ClockworkPi PicoCalc, there is optional support for the display, keyboard/BIOS, SDHC card, and sound in the PicoCalc (see USING_THE_PICOCALC.md).

On RP2040 and RP2350 boards with CYW43439 (e.g. the Raspberry Pi Pico W and Raspberry Pi Pico 2 W) or ENC28J60 network interfaces it supports the following:

  • IPv4 networking with zeptoIPv4
  • IPv6 networking with zeptoIPv6
  • Simple Network Time Protocol (NTP) clients

On The Raspberry Pi Pico 2 and Pimoroni Pico Plus 2 (and other compatible RP2350-based boards) it also supports the following:

  • The Always-On Timer, which counts time and may wake up the MCU as long as a small amount of power is applied

On the Pimoroni Pico Plus 2 (and other compatible RP2350-based boards with PSRAM) it also supports:

  • Up to 8 MiB of PSRAM
  • FAT32 filesystems in PSRAM

On the STM32F746...

Read more »

zeptoforth-1.14.3.tar.gz

This release allows manually adjusting the terminal width for a variety of words, and automatically does so for the PicoCalc terminal emulator.

gzip - 20.12 MB - 11/02/2025 at 15:50

Download

  • 1 × A zeptoforth binary, whether just a kernel or one containing compiled Forth code (the latter is highly recommended)
  • 1 × A compatible board, such as the STM32L476 DISCOVERY, STM32F407 DISCOVERY, STM32F746 DISCOVERY, Raspberry Pi Pico, Raspberry Pi
  • 1 × A means to flash said board (e.g. ST-Link, or in the case of the DISCOVERY boards, a USB to USB Mini cable); in the case of the
  • 1 × A means to communicate with said board over serial or ST-Link (to enable the use of swdcom)

  • Patch-level release 1.14.3

    Travis Bemann11/02/2025 at 15:52 0 comments

    This release:

    • adds the variable term-cols, for controlling the terminal columns in characters used by words, words-in, lookup, lookup-in, more-words, more-words-in, more-lookup, more-lookup-in, dump, dump-halfs, dump-cells, dump-ascii, and edit. This variable defaults to a value of 80. Note that more-words, more-words-in, more-lookup, more-lookup-in, and edit also query the terminal for its width, and use the minimum value of this and the value of term-cols. Also note that edit only uses this to determine whether to display a border on its sides and line numbers; it does not shrink smaller than 64 characters wide.
    • adds the variable words-col-width, for controlling the width in columns of each column of words displayed by words, words-in, lookup, lookup-in, more-words, more-words-in, more-lookup, and more-lookup-in. This variable defaults to a value of 20.
    • modifies picocalc-term::term-console to automatically set term-cols to the width of the PicoCalc terminal emulator in characters when called.

  • Bug-fix release 1.14.2.6

    Travis Bemann10/31/2025 at 01:46 0 comments

    This release:

    • fixes an issue with the PicoCalc BIOS firmware version 1.4, where zeptoforth would get stuck in a boot loop once extra/rp_common/picocalc_term.fs or extra/rp_common/picocalc_term_text.fs was installed due to the RST command sent by extra/rp_common/picocalc_bios.fs to the STM32 BIOS on the PicoCalc motherboard triggering a board reset.

    Note that the binaries have not been changed, so they will still report version 1.14.2.3.

  • Bug-fix release 1.14.2.5

    Travis Bemann09/07/2025 at 20:17 0 comments

    This release:

    • fixes a bug in extra/rp_common/picocalc_sound.fs where if a long time had passed since the last reboot, playing a tone (e.g. a beep) on the PicoCalc may result in the tone being stuck on.

    Note that the binaries have not been changed, so they will still report version 1.14.2.3.

  • Bug-fix release 1.14.2.4

    Travis Bemann09/01/2025 at 20:28 0 comments

    This release:

    • fixes issues with turtle graphics for angles that are multiples of 45 degrees.
    • removes utils/zeptoforth_venv that was previously erroneously included from .tar.gz files.
    • adds functionality to utils/package.sh to remove utils/zeptoforth_venv from generated .tar.gz files.

    Note that the binaries have not been changed, so they will still report version 1.14.2.3.

  • Bug-fix release 1.14.2.3

    Travis Bemann08/12/2025 at 14:22 0 comments

    This release:

    • fixes bugs in interrupt::vector!, clocks::set-sysclk, and clocks::set-sysclk-overclock caused by inappropriately using internal::hold-core instead of internal::force-core-wait which caused the other core to lock up when both cores of the RP2040 or RP2350 were active.

  • Bug-fix release 1.14.2.2

    Travis Bemann08/11/2025 at 06:04 0 comments

    This release:

    • attempts to fix an issue where in some cases file/directory dates could generate exceptions in FAT32 filesystems.
    • fixes rchan::init-rchan so it does not leave a single cell of garbage on the data stack.

  • Bug-fix release 1.14.2.1

    Travis Bemann08/09/2025 at 22:44 0 comments

    This release:

    • fixes utils/codeload3.py so loading extra/common/setup_blocks_fat32.fs will not timeout if a new FAT32 filesystem in on-board flash needs to be initialized on a rp2350_16mib build; rather, a (lengthy) delay will be experienced.
    • updates extra/common/setup_blocks_fat32.fs so there is a clear comment that will be visible from the terminal at the point where it may delay for an extended period of time.
    • fixes a number of cosmetic issues with the v2 5x8-pixel font in extra/common/simple_font_5x8_v2.fs.
    • adds an alternate key combo Meta-T to unindent text in zeptoed because Shift-Tab is not usable on the PicoCalc.
    • adds two games that can be played on the PicoCalc, Rocks (a simple Asteroids-like game ─ note that this requires an RP2350), at extra/rp2350/picocalc_rocks.fs, and Snake (an implementation of the classic Snake game, of course), at extra/rp_common/picocalc_snake.fs.

    Note that no changes have been made to the zeptoforth binaries themselves, so they will still report the version 1.14.2 in the welcome message even though the version numbers in the binaries' paths have been updated.

  • Patch-level release 1.14.2

    Travis Bemann07/26/2025 at 04:50 0 comments

    This release:

    • changes i2c::i2c-pin to set the selected GPIO to have an internal pull-up per the RP2040 and RP2350 datasheets.
    • adds an improved 5x8-pixel font, in extra/common/simple_font_5x8_v2.fs, that can be used with the PicoCalc.
    • adds picocalc-term::term-font@ to simplify the usage of fonts within code on the PicoCalc.

  • Patch-level release 1.14.1

    Travis Bemann07/20/2025 at 03:21 0 comments

    This release:

    • implements support for the TRNG of the RP2350, to replace the use of RANDOMBIT on it. This provides significantly higher-quality random numbers than before. Note though that this is slow, and rng::random should not be used directly for generating arbitrary numbers, but rather is useful for seeding a PRNG such as TinyMT32 (which is included with zeptoforth).
    • adds a build script, utils/build_picocalc_zeptoip.sh, for building zeptoforth on the PicoCalc with zeptoIP and the CYW43439 driver included. Note that the CYW43439 firmware is not in the zeptoforth repository for licensing reasons.
    • adds an optional I2C CH1116 display driver.
    • adds an optional NTC thermistor driver.
    • adds support for reverse text and selecting default foreground and background colors in ansi-term.
    • fixes a bug shared between extra/rp_common/picocalc_screenshot.fs and extra/rp_common/picocalc_screenshot_text.fs where they would not compile on the RP2040.
    • fixes a bug in the text-only PicoCalc terminal emulator where the last line of each character would not be rendered properly.

  • Minor release 1.14.0

    Travis Bemann07/06/2025 at 16:23 0 comments

    This release:

    • includes optional support for the ClockworkPi PicoCalc; build and usage instructions are in USING_THE_PICOCALC.md
    • adds optional NTP clients for use with zeptoIPv6 (and renames the existing NTP clients for use with zeptoIPv4)
    • adds a voltage module to control the voltage regulator on the RP2040 and RP2350
    • updates adc::adc-pin to properly configure a given pin on the RP2040 and RP2350 for use with the ADC without requiring any other work on the part of the user
    • fixes bugs in zeptoIPv6 which caused crashes

View all 288 project logs

Enjoy this project?

Share

Discussions

Peter wrote 06/29/2024 at 10:17 point

I have just submitted my project 4TH Calculator https://hackaday.io/project/196655-4th-calculator to the Hackaday Business Card Contest. 

That's when I saw your Zeptoforth. Really cool. You did many things the same way I did for Mecrisp-Cube. I am still hooked on Mecrisp but I will try your Zeptoforth.

  Are you sure? yes | no

Travis Bemann wrote 06/29/2024 at 17:44 point

Your 4TH Calculator project looks very cool - nice job! And Mecrisp-Cube seems quite nice in that it enables combining Mecrisp-Stellaris (which has an awesome code generator ─ Matthias is a compilers wizard) with FreeRTOS (which inspired many features of zeptoforth, actually). Also, your Mecrisp-Cube supports mixing Forth and C code, which has its advantages, whereas my zeptoforth is designed specifically for Forth and assembly. (I probably would not have written my own IPv4 stack for the Pico W had lwip been an option for zeptoforth.)


Of course, I always like it when people try out zeptoforth. Conversely, I should try out Mecrisp-Cube sometime. BTW, if you ever think of creating a similar device that runs zeptoforth I would be more than happy :D. You *could* use an STM32 processor for that (as zeptoforth has support for the STM32F407 and STM32F746 amongst others), but zeptoforth is best suited to the RP2040, which it has very good support for. (For instance, zeptoforth supports a wider range of peripherals out of the box on the RP2040 than on STM32 platforms, and it also supports both cores of the RP2040 effortlessly, and can compile to and execute code out of QSPI flash rather than only being able to use QSPI flash to store fixed-sized images (it can also use QSPI flash for block storage, if that is your cup of tea).)


(The main reason I see to use, say, the STM32F407 or STM32F746 here with zeptoforth is if you want hardware floating-point support, because the math that comes with zeptoforth is either integer or fixed-point (either 64-bit or, optionally, 32-bit fixed point), and while floating point is available on the RP2040, it is implemented in software in ROM.)

  Are you sure? yes | no

zyndram wrote 06/11/2023 at 12:14 point

Can You create a working device with screen, keyboard, network (irda) and usb?

for example working time on one charge a month

  Are you sure? yes | no

Travis Bemann wrote 06/11/2023 at 17:01 point

As for USB, on the RP2040 it supports USB CDC as a console, in the place of a serial console. Note that this is as a USB slave rather than host, so it has no way of communicating as a host with its own slaves (such as keyboards or mice).

As for displays, it currently has optional support on the RP2040 for I2C SSD1306-based monochrome bitmap OLED screens, and this could be extended to other bitmap screens such as those old Nokia ones. If you want support for VGA-based displays you could implement something using PIO, as this has been done before using that.

As for networking, there are no plans to support IrDA - even though you could implement support for an IrDA peripheral on one of the STM32 platforms. However, I am currently at work on a driver for the CYW43439 WiFi chip on the RPi Pico W. Note though that it will be a while until I get WiFi support working since even when I get my driver working I will need to implement an IP stack using it.

  Are you sure? yes | no

villaromba wrote 01/25/2023 at 15:49 point

On a PICO what RTC are you using and to what pins on the PICO, also what pins for the SD CARD. I'm thinking of using the Maker Pi Pico (Cytron) which I already have. So the SD pins are fixed so where do I tell Forth where it is connected?

  Are you sure? yes | no

Travis Bemann wrote 01/25/2023 at 21:18 point

On the Pico I am using the RP2040's on-chip RTC using the 12 MHz XOSC crystal. There is a pin for a separate crystal, GPIO 20, but this is not supported currently by zeptoforth.

  Are you sure? yes | no

teraz wrote 05/05/2022 at 10:37 point

please add password for loging (meybe OTP)

password and hardware switch for replace firmware

  Are you sure? yes | no

Travis Bemann wrote 05/06/2022 at 13:51 point

What do you mean? zeptoforth has no logging independent of what it writes to serial. Also, about securing the firmware, zeptoforth has zero built-in security by design, and even if it did, the only way to prevent writing to firmware via SWD on some platforms would be to set bits to lock out SWD, and to my knowledge there is no means to lock out uploading firmware via the USB mass storage device on the Raspberry Pi Pico.

  Are you sure? yes | no

teraz wrote 05/07/2022 at 12:21 point

I see console, i need password protect for no everyone can write in console/terminal

  Are you sure? yes | no

Travis Bemann wrote 05/07/2022 at 16:17 point

If you want to lock out the console on bootup except for someone entering a password I would recommend something like:

compile-to-flash

: hash ( c-addr u -- x ) ( add your hash algorithm here ) ;

: init ( -- )

    init

    begin

        cr ." Password: " refill token ?dup if

            hash [ s" your-password" hash ] literal =

        else drop false then

   until

;

Replace your-password with the password you intend to use (because it is hashed at compile-time this password will not be in the compiled code in flash). Also replace the hash algorithm with something sane; for testing purposes I used:

: hash ( c-addr u -- x ) 0 0 -rot ?do dup 7 lshift swap 25 rshift or over c@ xor swap 1+ swap loop nip ;

However, that's not secure by any means. (Note that truly using a secure hash rather than just 32 bits of it would require significant modifications of the above code.

Also note that this will only keep out the most basic of attackers, because there is nothing stopping them from simply reflashing the whole board or reaching into the board with SWD (some MCU's have bits for locking out SWD but these are MCU-specific and i am not familiar with the operation of these myself).

Also note that this must be compiled after any other implementations of init or otherwise these will execute (provided they follow the convention of each init calling the init before it before doing its operations) after the password is entered successfully.

  Are you sure? yes | no

teraz wrote 05/19/2022 at 21:18 point

this is not otp

  Are you sure? yes | no

Travis Bemann wrote 05/20/2022 at 01:19 point

Well, anything truly OTP will be very hardware-specific. What I gave there was a general solution to passwording zeptoforth, not a means to permanently lock the user out of the device. Some devices, such as the RPi Pico, have no OTP capability in the first place.

  Are you sure? yes | no

Thomas wrote 04/13/2020 at 08:01 point

I like the story behind your project a lot! Since you're using e4thcom some of Manfred Marlow's approaches to the little Forth I'm maintaining might also be useful for your Forth. Also it's quite possible that my codeload.py works with minor adaptations :-)

  Are you sure? yes | no

Travis Bemann wrote 04/13/2020 at 12:05 point

The main adaptation that would be needed is that it would need to wait until it receives ACK to send another line of code, and it would need to treat NAK as an indicator of an error indicating to stop ending any more data. This is why with e4thcom it is used in noforth mode, because noforth behaves in this fashion.

  Are you sure? yes | no

Thomas wrote 04/13/2020 at 16:09 point

I remember I had a long discussion with Manfred about ACK/NACK vs. OK/? - he didn't like the solution he made for noforth too much and made a point of using the "human readable" handshake with OK and ? (for error). What's your reason for using ACK/NACK?

  Are you sure? yes | no

Travis Bemann wrote 04/13/2020 at 18:28 point

My reason to do ACK and NAK is that it would signal success versus failure without relying on the textual content of what is output - in zeptoforth an exception can really result in anything being output while ACK and NAK could be transparently added to all prompts and all errors without any further changes being necessary - and there was a premade mode in e4thcom to use ACK and NAK.

(Note that I am responding to this post because hackaday.io is not letting me reply to your other post.)

  Are you sure? yes | no

Thomas wrote 04/16/2020 at 18:55 point

I didn't notice your reply, sorry. Hint: in HaD discussions you can simply reply to the post someone else replied to.

OK, now I understand your preferences. When I started this I first tried to work with an XON/XOFF handshake, at least until I figured the following out about USB-serial converters on Linux: https://github.com/neundorf/CuteCom/issues/22 

  Are you sure? yes | no

Travis Bemann wrote 04/17/2020 at 15:05 point

Personally I would prefer hardware flow control, but unfortunately the USB-serial dongle I am using to communicate with the STM32F407 DISCOVERY board lacks pins for RTS/CTS, and the serial over USB connection built into the STM32L476 DISCOVERY board has no option for hardware flow control in the first place.

  Are you sure? yes | no

Travis Bemann wrote 04/16/2020 at 18:01 point

I looked at the code for codeload.py and noticed that is coded for Python 2.7, which is no longer maintained. Could you do a port for Python 3? This could be very useful for people who do not run Linux (and thus e4thcom is not a feasible option, as apparently people have not had luck with FreeBSD's Linux compatibility layer with it). (I could add more screen support for also adding XON and XOFF, but screen still would not support loading files from within other files with anything like #include or #require.)

  Are you sure? yes | no

Thomas wrote 04/16/2020 at 18:39 point

Sure I can port it to Python 3 :-) To be honest, when I wrote it I didn't know much Python and 2.7 was the default on the Ubuntu 14.04 I was using then.

Do you know of anyone who uses the e4thcom 64bit binary on WSL 2?

  Are you sure? yes | no

Travis Bemann wrote 04/17/2020 at 14:51 point

I have not heard of anyone trying 64-bit e4thcom with WSL 2, but then, I have not heard of anyone who has used WSL 2 in the first place. Most of the people I know in #forth on freenode are either Linux (and not Linux on top of Windows) or BSD users.

  Are you sure? yes | no

Thomas wrote 04/18/2020 at 08:50 point

I gave it a try. It appears to work but it's not fully tested:

https://gist.github.com/TG9541/0b48bd49854cc865469515697b5185f6

  Are you sure? yes | no

Thomas wrote 04/18/2020 at 13:01 point

I tried telnet to ucSim with the python3 variant - Python3 "byte array vs. str"  issues, of coursed. Unfortunately I get timeouts after fixing it. That's very difficult to debug. The serial interface transfer, which is likely the one you're most interested in, should work anyway.

  Are you sure? yes | no

Travis Bemann wrote 04/19/2020 at 16:19 point

Could you add a copyright notice and license block to codeload3.py so I can incorporate it, with some minor modifications, to the zeptoforth codebase? I should note that there is no such thing as the public domain in Germany.

  Are you sure? yes | no

Thomas wrote 04/19/2020 at 18:24 point

Sure, I'll do that. MIT is OK, I s'pose?

Edit: done

  Are you sure? yes | no

Travis Bemann wrote 04/19/2020 at 18:52 point

That would work, particularly since the MIT license is GPL-compatible.

  Are you sure? yes | no

Travis Bemann wrote 04/19/2020 at 21:41 point

I put my changes to codeload3.py to make it work with zeptoforth in my fork of your gist, and I will include this with zeptoforth so users can upload code without relying on e4thcom.

  Are you sure? yes | no

Elliot Williams wrote 04/13/2020 at 07:41 point

Cool!  Going to have to check this out.  

Lemme see if I have a 407 Disco around here somewhere...

I agree that Forth misses lambdas, just b/c it's hard to think up good names all the time.    

Although on multitasking/timers, honestly, I end up just writing "begin do_something 100 ms again", which works as well, if your "ms" definition has a "yield" in it.  But this keeps the chip from going into a low-power mode, b/c it's always round-robinning into delay statements.  If the scheduler knew...  

So yeah.  I'm going to have a peek at your multitasking setup.

  Are you sure? yes | no

Travis Bemann wrote 04/13/2020 at 12:00 point

I would appreciate more people trying it out, even though that requires their owning the same hardware as myself. (It is hard for me to maintain the code for hardware I do not own, e.g. I cannot create zeptoforth_full binaries without physically owning the hardware in question.)

Lambdas are a feature missing, unfortunately, from most Forths, even though there are a few with them, such as Retro (of course Retro is not a conventional Forth by any means).

The multitasker is designed to put the MCU to sleep when no task is actively executing, even though it wakes up the processor when a SysTick occurs, when a byte is received over a USART, or, if data is pending in the serial TX circular buffer and the USART TX shift register becomes free. So if one writes:

: foo begin do-baz 100 ms again ;

' foo 256 256 256 spawn constant foo-task

foo-task task-enable

it will sleep the MCU, aside from it getting woken up by SysTicks and by any input the user feeds into the REPL.

  Are you sure? yes | no

Travis Bemann wrote 04/18/2020 at 17:37 point

You said you might try it out on the F407. If you had any problems with the zeptoforth_full-[version].bin file for the F407, there were issues with it being corrupt, so try it out with the latest release binaries, where I made sure to check that it now works.

  Are you sure? yes | no

crun wrote 04/12/2020 at 20:44 point

Could you explain why vs mecrisp?

Re M0, you say "it relies on key features of the Thumb-2 instruction set which are missing from the Thumb-2 instruction set". Could you clarify?

  Are you sure? yes | no

Travis Bemann wrote 04/12/2020 at 21:22 point

To be completely honest, it fits much of the same niche as Mecrisp-Stellaris, but there being one Forth for a platform has not stopped anyone from making another (e.g. there already was a Cortex-M Forth before Mecrisp-Stellaris, namely Riscy Pygness). This project exists largely because I wanted to create a bare-metal native code embedded Forth of my own, and the STM32L4 and STM32F4 series microcontrollers were an attractive target, big enough to fit a good-sized Forth with plenty of room to spare, with good documentation for peripherals, and without being effectively a PC on a chip (e.g. the Raspberry Pi boards) with peripherals that may require proprietary binary blobs and thus not amenable to development by an individual such as myself.

About the M0, the issue is that 32-bit literals are difficult to implement without 16-bit low and 16-bit high immediate MOV/MOVT instructions, and while I tried to implement literals that use a mixture of MOVS, LSLS, and ORRS instructions the problem is that when allocating space for a literal ahead of time, and then writing to it later, it is hard to predict how long that sequence of instructions will be (unless one assumes the very longest length and then fills out the rest of the space with NOPs). So as a result I am focusing on Cortex-M3/M4 for now, and will  implement support for the Cortex-M0 later if I see the need for it.

  Are you sure? yes | no

crun wrote 06/10/2020 at 07:35 point

Looking into M4 because of the dsp floating point performance. So 4th for the little F411 dip boards would be ok with me.  Interesting how to integrate Forth with the arm dsp libraries though.

  Are you sure? yes | no

alessandro.cordova wrote 04/11/2020 at 17:43 point

Amazing

  Are you sure? yes | no

Does this project spark your interest?

Become a member to follow this project and never miss any updates