AmForth is an easily extendible command interpreter for the Atmel AVR8 Atmega micro controller family and some variants of the TI MSP430. 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.

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

  • 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.

31.3.2017: release 6.4

  • lib(ALL): (( for multiline comments. Comments end with )). Uses recognizers for that from rec-double-paren.frt.
  • lib(AVR8): Implement I2C Slave. Renamed i2c.>n to i2c.n@ and i2c.n> to i2c.n!. I2C Generic
  • lib(ALL): Recognizer for the Forth 2012 'c' Syntax to replace char c and [char] c. Just load the rec-char.frt file.
  • core(AVR8): add >rx-buf (c -- ) that appends a character to the ring buffer that uses the usart receive interrupt.