fiveforths
fiveforths copied to clipboard
32-bit RISC-V Forth for microcontrollers
FiveForths: 32-bit RISC-V Forth for microcontrollers
FiveForths is a tiny Forth written in hand-coded RISC-V assembly, initially designed to run on the 32-bit Longan Nano (GD32VF103) microcontroller.

FiveForths currently uses the indirect threading model and only has 19 built-in primitive words. It is 100% fully functional and can be extended by adding new primitives (in Assembly) or by defining new words (in Forth). This implementation is loosely inspired by sectorforth, jonesforth, and derzforth.
Development progress has been logged regularly in the devlogs.
- Quick start
- Documentation
- Todo
- Contributing
- Changelog
- License
Quick start
The quickest way to get started is to download and flash one of the firmware binaries listed below:.
- fiveforths-longan-nano-lite.bin (64K Flash, 20K RAM)
- fiveforths-longan-nano.bin (128K Flash, 32K RAM)
See the TUTORIALS for detailed download and flashing information.
Documentation
- TUTORIALS: a quick guide to get started
- EXPLAIN: learn the story behind FiveForths
- HOWTO: build, usage, and code examples in Forth and RISC-V Assembly
- REFERENCE: learn the technical details, what's under the hood
TODO
- [ ] Code cleanup and optimizations
Contributing
Please create a pull-request or open an issue on GitHub.
Changelog
0.5 (2023-05-29)
- Fix issue #19 - Error building without zicsr extension
- Fix issue #20 - Specify
stm32loaderinstead ofdfu-utilin docs
0.4 (2023-01-23)
- Fix issue #16 - Add the ability to read hex numbers
- Update documentation
- Add example for toggling an LED
0.3 (2023-01-19)
- Fix issue #7 - Implement bounds checks for stacks
- Fix issue #8 - Implement bounds checks for user dictionary
- Fix issue #13 -
TOINshould not be an address - Fix issue #14 -
STOREprimitive is incorrect - Add better error messages
- Add detailed documentation in docs
- Add
djb2.cto generate a word's hash locally - Add RAM zerofill of unused dictionary space on reset
0.2 (2023-01-10)
- Fix issue #9 - Handling of carriage return
- Fix issue #11 - Ignore non-printable characters
- Re-organize code to support different boards and MCUs
- Add boot message when the device is reset
- Add GitHub action to automatically build and publish the firmware binaries
0.1 2023-01-09 - First release
License
MIT License
Copyright (c) 2021~ Alexander Williams