AmForth is an easily extendible command interpreter for the Atmel AVR8 Atmega micro controller family and some variants of the TI MSP430. The RISC-V CPU (32bit) is currently beeing worked on. It has a turnkey feature for embedded use too.

AmForth is published under the GNU Public License v3 (GPL). A commercial use is possible but for traditional commercial uses there are commercial Forths — amForth just is not one of them.

AmForth runs completely on the controller. It does not need additional hardware. It makes no restrictions for hardware extensions that can be connected to the controller. The default command prompt is in a serial terminal.

The command language is Forth. AmForth implements an almost compatible Forth 2012 indirect threading 16bit Forth.

AmForth for the AVR8 needs 8 to 12 KB Flash memory, 80 bytes EEPROM, and 200 bytes RAM for the core system. A similar code for the MSP430 fits into 8KB flash. The MSP430 info flash is used for similar purposes as the EEPROM for the AVR8 platform.

The 32-bit variants for ARM and RISC-V are experimental. They share most of the high-level code with the 16-bit variants.

Work In Progress¶ Here you’ll find things that are not yet released but will be part of the next release. See the code section at Sourceforge to get the most recent sources tools/amforth-upload.py fixed logic error in search_and_open_file

tools/amforth-shell.py ported to python3, patch contributed by Tristan Williams, thank you!

Added refcard manually generated from 5.5 with a warning! This is outdated!

Commented Projects/ClockWorks: added version from 2018-12-15; they were apparently lost or never published on the website. This version features a clock reading the DCF77 time radio signal.

core(AVR8): restored avr8/words/no-jtag.asm from release 5.5; removed not functional avr8/devices/*/words/no-jtag.asm files

added one-line patch to amforth-shell.py, provided by Tristan Williams. Will now report filenames which occur more than once.

added Fixing D0> to Opinion .

to . added a new section Opinion for blog type pieces of text.

for blog type pieces of text. core(AVR8): fixed d>0 , reported by Martin Nicholas.

, reported by Martin Nicholas. April 2020: friendly takeover of new maintainer (see this email message)

7.1.2019: release 6.8¶ core(ARM32): new target ARM with 32bit word size using the Cortex M4 board LM4F120XL TI Stellaris Launchpad and as a Linux-ARM program.

with 32bit word size using the Cortex M4 board TI Stellaris Launchpad and as a program. core(ARM32+RV32): compile to RAM, introducing the RAM Wordlist as target.

as target. core(AVR8): small fixes for bigger Atmegas. Thanks to Martin.

core(RV32): numerous small improvements.

24.7.2018: release 6.7¶ core(RV32): new target RISC-V with the Hifive1 , interpreter mode only.

with the , interpreter mode only. core(ALL): Fix some errors in accept in corner cases. Thanks to Richard.

3.10.2017: release 6.6¶ core(ALL): Update to Recognizer v4 keyword set.

doc(ALL): Using Gerald Wodni’s module for LCD HD44780 .

. core(ALL): new deferred prompt word .input . Prompts

. core(AVR8): More work in interrupt reliability.

core(ALL): factor (create-in) (addr len wid – ) to make a new wordlist entry in a given wordlist without XT and data area.

30.4.2017: release 6.5¶ core(AVR8): redesigned interrupt handling to improve reliability. Thanks to Erich.

core(MSP430): highly experimental support for interrupt service routines in Forth for MSP430 2553. Manually enable it if your’re brave the same way the AVR’s work. Interrupts on the MSP430 and Interrupt Service Routines .