PFAVR is an ANS Forth implementation for the Atmel AVR microcontroller.

  Add it to your Download Basket!

 Add it to your Watch List!


Rate it!
send us
an update
GPL (GNU General Public License) 
2.9/5 16
Andrew Sterian
ROOT \ System \ Emulators
PFAVR is an ANS Forth implementation for the Atmel AVR microcontroller. PFAVR software requires 13Kwords of FLASH and 32Kbytes of external RAM, thus can function in an ATmega64 or ATmega128 with external RAM.

Here are some key features of "PFAVR":

PFAVR enables quick prototyping and interactive control of the Atmel AVR
PFAVR is 99% compliant with the ANS Forth specification, implementing nearly all of the words in the core, extended core, double-number, exception, programming tools, and string word sets.
PFAVR fits into less than 13Kwords of FLASH and less than 32Kbytes of RAM
PFAVR is written entirely in C thus can easily be extended or embedded with custom code.
PFAVR is free, licensed under the terms of the GNU General Public License.

There is no need to type 'make'. You may be able to use the pre-built version of PFAVR (pfavr.hex in this directory). If you need something other than Intel HEX format, the pfavr.elf file can be converted to a different format using avr-objcopy. See the documentation (doc/index.html) for notes on the pre-built version of PFAVR.


If you will not be recompiling PFAVR from source, then you don't need anything. You can just download one of the provided HEX files in the misc/ directory to your target system and start using PFAVR right away. The provided HEX files have the following attributes:

They were designed for the ATmega128 processor with at least 32K of external RAM with one wait-state. Other AVR's may work too if they have at least 13Kwords of FLASH and 32Kbytes of external RAM.
They use the USART1 peripheral for asynchronous serial communication at 9600 baud, 8 data bits, 1 stop bit, no parity. The different HEX files have file names that encode the clock frequency they were designed for:

pfavr.3.68MHz.hex assumes a 3.68 MHz clock frequency. The UBRR register is set to 23.
pfavr.8MHz.hex assumes an 8 MHz clock frequency. The UBRR register is set to 51.
pfavr.16MHz.hex assumes a 16 MHz clock frequency. The UBRR register is set to 103.

Two USART1 interrupts are used. The reset vector is programmed to start PFAVR upon reset.
The first 13Kwords of flash program memory and 32Kbytes of external RAM are used.

If you want anything else other than what is described above, you will have to recompile PFAVR from source.

One final note: PFAVR can be configured to reset the watchdog of the AVR (if so programmed by the fuse bits). Note, however, that this feature has not been tested.

What's New in This Release:

Worked around a GCC crash when the pre-built dictionary was not an even number of bytes, thus causing misalignment in the text section. The tools/ script was modified to always generate an even-aligned pre-built dictionary. Thanks to Chuck Swiger for helping with this bug.

Last updated on November 21st, 2007

#ANS Forth implementation #Atmel AVR microcontroller #Amtel AVR emulator #ANS #Forth #Atmel #AVR

Add your review!