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 runs completely on the controller. It does not need additional hardware beyond a power supply. It makes no restrictions for hardware extensions that can be connected to the controller.

The command language is Forth. AmForth implements an almost compatible ANS94 indirect threading 16bit Forth. There are some extensions from the Forth 2012 standard.

The interpreter has a command prompt in a serial terminal. Other connections like TCP/IP telnet or radio links are possible.

AmForth is published under the GNU Public License v3 (GPL).

AmForth needs 8 to 12 KB Flash memory, 80 bytes EEPROM, and 200 bytes RAM for the core system.

Karl Lunt has written an excellent User’s Manual on how to start and work with AmForth. For those who want to take a deeper look into the system is the Technical Guide. The whole documentation is available as PDF and EPUB.

Leon made a very good intro into amforth and his floating point library on youtube. Worth watching!


The goal of a recognizer is to dynamically extent the Forth command interpreter and make it understand and handle new data formats as well as new synatax's. The present, 2nd generation recognizers achieve this by generalizing the classic interpreter with an API to factor the components. Recognizers are portable across different forth's. Recognizers are not a new concept for forth. They have been discussed earlier.
  1. in 2003.
  2. Number Parsing Hooks in 2007.
  3. Recent developments were presented at the Euroforth conference 2012.
The 1st formal RFD (3.10.2014) is available. A draft of Version 2 (9.12.2014) is currently beeing worked on. It incorporates the results of the discussions and some more ideas. The papers linked below give some background information and describe the concept. Examples can be found in the code base.
  1. First Generation is an all in one implementation.
  2. Second Generation describes the factored component approach.

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(AVR): icompare got the same return flag semantics as compare. The leave and ?do forward branches are now resolved at compile time, saves one cell per loop on the return stack at runtime.
  • core(AVR): interrupt vectors are moved from RAM to EEPROM. Saves RAM space and simplifies turnkey actions (remove any int! from your turnkey!)
  • core: re-arranged source files: controller specific and common code.
  • New architecture: MSP430 (G2553) as used in the Texas Instruments LaunchPad 430 with code from Camelforth and 4€4th.
  • core: generalized existing Configuration Stacks in EEPROM into map-stack, get-stack and set-stack. Used for the search order and recognizer stacks.
  • all: changed license to GPLv3.

6.10.2014: release 5.5

  • core: Bugfix in warm to initialize the interpreter for turnkey. Thanks to David.
  • core: bugfixes for handling some negative numbers in +loop and */.
  • core: simplified assembly primitves for counted loops. They are now faster except for i. The return stack gets different numbers now.
  • core: rewrite of accept. The user visible change is that the final CR/LF is no longer sent here. The forth text interpreter does it elsewhere thus the user interface is unchanged.
  • core: Fixed a regression introduced after 5.1: a<b is not always the same as a-b<0.

16.8.2014: release 5.4