Skip to content
/ fiveforths Public

32-bit RISC-V Forth for microcontrollers

License

Notifications You must be signed in to change notification settings

aw/fiveforths

Repository files navigation

FiveForths: 32-bit RISC-V Forth for microcontrollers

GitHub Workflow Status GitHub release justforfunnoreally.dev badge

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-terminal

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.


  1. Quick start
  2. Documentation
  3. Todo
  4. Contributing
  5. Changelog
  6. License

Quick start

The quickest way to get started is to download and flash one of the firmware binaries listed below:.

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 stm32loader instead of dfu-util in 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 - TOIN should not be an address
  • Fix issue #14 - STORE primitive is incorrect
  • Add better error messages
  • Add detailed documentation in docs
  • Add djb2.c to 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