There is a longstanding FORTH on the PicoCalc thread, but I have decided to create a new thread because I wanted to post something about new developments on the zeptoforth front but I would use up my three-posts-in-a-row as I did not originally create the FORTH on the PicoCalc thread myself.
For those not aware, zeptoforth is a batteries-included Forth implementation for ARM Cortex-M microcontrollers, including the RP2040 and RP2350 in the Raspberry Pi Pico-family boards.
Forth is a dynamic-and-interactive-but-very-low-level language that exposes a REPL to the user while simultaneously allowing the user direct access to the underlying hardware which avoids the code-compile-flash-run-debug loop typical of many languages in the embedded world (with the exception of high-level languages such as MMBasic/PicoMite and MicroPython). Forth is really for those comfortable with doing arithmetic on addresses in memory and manually managing their own memory; if these things give you pause, Forth should give you pause.
zeptoforth specifically supports more advanced features as Forths go, including preemptive multitasking (including multicore on the RP2040 and RP2350), a user-friendly module system on top of traditional Forth wordlists, an object system, and local variables (which are not something all Forths have, it should be noted; many people consider these to be ‘un-Forthy’ but I find these to be very practical).
zeptoforth in particular provides extensive support for the PicoCalc, including both graphical and, for those constrained memory-wise (e.g. using an RP2040) who consequently do not want to have a framebuffer, text-only terminal emulators, which expose ANSI-compatible terminals to the user and, in the case of the graphical terminal emulator, allow arbitrary RGB332 graphics to be drawn to the display via a framebuffer, FAT32 support (note: long file names are not currently supported) on the SD card and also in on-board flash and (if you have a Pimoroni Pico Plus 2 (W) in your PicoCalc) in PSRAM (as a RAM disk), basic sound support (currently just fixed mono tones, sorry), a multi-buffer screen text editor (named ‘zeptoed’), and (if you have a Pico 2 W or Pimoroni Pico Plus 2 W in your PicoCalc) optional WiFi with either IPv4 or IPv6 support (with the IP stack itself named ‘zeptoIP’).
Note that when installing zeptoforth on your PicoCalc you need to use specifically the kernel UF2 files (the rp2040_big platform is highly recommended if you are using the RP2040, the rp2350 platform is RP2350 boards with 4 MiB of flash such as the Raspberry Pi Pico 2 (W), and the rp2350_16mib platform is for RP2350 boards with 16 MiB of flash such as the Pimoroni Pico Plus 2 (W)) and then build the remainder of zeptoforth on top of it per the directions in USING_THE_PICOCALC.md because there are too many possible configuration combinations to make it practical to distribute pre-built UF2 files for all of these. Note that the arm-none-eabi toolchain is needed only if you plan on rebuilding the kernel itself; you will most likely not need to do this. (Running make specifically and only builds the kernel, it should be noted.)
I will not distribute UF2 files including CYW43439 firmware for the Raspberry Pi Pico {1,2} W and Pimoroni Pico Plus 2 W because to my knowledge this firmware is not truly free. I do distribute the firmware itself in a separate repo for the sake of convenience.
Currently uf2loader is not supported, but support for uf2loader is in the works (the main blocker is that currently only an experimental version of uf2loader supports UF2 files with ‘holes’ in them like those used by zeptoforth).
The zeptoforth GitHub can be found at:
For starters, I will paste a link to my latest release post here:
More content is to follow.