328eForth for Arduino Uno Board
eForth for Arduino on ATmega328P

For a very long time, firmware engineering meant to program a UV
Erasable PROM chip and to insert it on a board which contained a
microcontroller, some RAM memory chips, and some I/O chips, and a
socket for the UV EPROM.  Then flash memory chips replace UV
EPROM's. And then everything is integrated into a single
microcontroller chip, and we now have ISP, In System Programming,
which allows you to program the microcontroller in its own socket.  
Arduino Uno integrates an ATmega328P microcontroller with
necessary hardware components on a small printed circuit board, and
captures the fancy of a new generation of will-be firmware engineers
and DIY hobbyists.

I admire the efforts Arduino developers put into this open hardware
system, especially the simplification of the C programming language
to these two statements:
       setup();
       loop();
These are the essence of firmware engineering.  The only deficiency is
the lack of interactivity between the user and his microcontroller chip
on the Arduino board. This is where FORTH can be of great help.

There is a very good FORTH system AmForth for the Arduino Uno
board.  It follows the ANS FORTH Standard, but it has a few quirks and
does not behave exactly like the prevailing public domain FORTH
systems, such as figFORTH, F83, FPC, and Win32FORTH.  It is a fairly
complicated implementation, involving hundreds of files in many
different folders.  ATmega328P is a microcontroller, and does not
deserve such a large supporting system to program it.  After 20 years
of implementing eForth on many different microcontrollers, I am
certainly of the opinion that eForth is the FORTH best suited for this
microcontroller.  Nevertheless, AmForth is a good working FORTH
system for ATmega328P.  I studied it diligently and enjoyed reading its
code.  Whenever possible I do use its code for my implementation.

The original eForth was implemented in Direct Thread Model by myself
and Bill Muench.  Dr. Richard Haskell implemented the first Subroutine
Thread Model in 86se4th.asm for 8086 and 68000.  I took his file and
modified it so it could be assembled by the AVR assembler in AVR
Studio 4 development system from Atmel.  AmForth implemented
many FORTH commands in AVR assembly, and these code were
ported into my implementation.  I call it 328eForth because it is
configured specifically for ATmega328P, used on Arduino Uno board.

The most important differences between 328eForth and AmForth are
the following:

1. Subroutine Thread Model instead of the Direct Thread Model in
AmForth.
2. Using byte addresses to access flash memory, which has native
16-bit cells.
3. All assembly code are in a single file, not scattered in hundreds of
little files.
4. Flash programming is optimized through two 128 byte page buffers.
5. No interrupts and no multitasking.
6. EEPROM memory is not used.
7. Interpreter is in NRWW memory.  Compiler and user extension are
in RWW memory.
8. Ease in building turnkey applications

These differences make 328eForth much simpler, easier to
understand and to modify.

(Above is the Introduction Section in the documentation)

328eForth for Arduino Uno

Contents of documentation:
1.        Introduction
2.        Installing Tools
3.        Assembling 328eForth
4.        The Terminal Interface
5.        A Few Comments on 328eForth Implementation
6.        Testing 328eForth on Arduino Uno
7.        328eForth Commands
8.        Learning More about eForth
9.        What eForth Can Do But Arduino Cannot
10.      Final Remarks

328eForth for Arduino Uno Board

$25 including assembly source code,
demo code, lessons, and detailed
documentation,