My Forth Experience / Experiments Page

Home                               Craigs Pages                               Heathers Pages

October 2021


After a year of retirement from high tech I had the urge to do some hardware and software again. I think it must be in my blood. It had been a long time since I programmed small  computers (micro controllers and/or micro processors) so I thought I would get back to it. Since starting again, I have been having great fun designing and building electronic gadgets. I also  think continuing to program will help keep my mind sharp in case I have to get a real job again in the future.


Later I will describe some of my many adventures with Forth but first I wanted to tell you about my latest Forth find that I think is just amazing. In looking around the web I came across a port of ueForth / ESP32Forth written by Bradley D. Nelson that is hosted in the Arduino environment. ESP32Forth is an Arduino program that is flashed to a ESP32 module using the Arduino IDE. Once flashed, the ESP32 becomes a full featured Forth programming environment for developing Forth applications that have access to WiFi, Bluetooth, SPIFFS, SD cards, networking, i2C, SPI and many other of the ESP32 APIs. The beauty of this system is that one can add or remove Forth words at will creating ones own custom Forth development environment.  With that said that is exactly what I did. I removed some of the functionality that I didn't think I would use like a block editor and added a lot of functionality that I knew my applications would require including: SPI, Neopixel support, advanced networking, floating point arithmetic and a lot more. The code is available here.

With this new Forth tool, I implemented some ESP32 embedded applications including a Neopixel based thermometer, a slideshow program, a world clock program and a real time Earthquake map showing all of the earthquakes happening around the world. I also wrote drivers for numerous SPI LCD displays, graphics libraries for displaying text and graphics, a library for OneWire devices, a JSON parser, a time and timezone library, NTP code and much more. ESP32Forth has shown itself to more than powerful enough for all the embedded ESP32 projects I have used it for and will be my go to environment for many of my future projects as well.

Complex Forth programs are generally built using numerous files of Forth code that need to be organized and maintained. This can be done of course storing the files on the ESP32 SPIFFS filesystem or by storing them on an SD card that ESP32 has access to but both of these techniques have their issues. I chose a different route. I developed what I call the ESP32forth loader (written in Java) which runs on a USB connected host computer. This allows me to save Forth files to and from my MacBook in an organized fashion and to pick and chose which Forth files should be compiled to build a Forth application. The loader program is shown below:

The loader has the concept of include files that determine which Forth files make up an application. Here is an example include file for the Slideshow program I wrote:
\ Slide Show App Load Page
\ for TTGO T4 hardware

#include Hardware/TTGO_T4.fth
#include Drivers/ILI9341.fth
#include Graphics/graphics.fth
#include Apps/SlideShow/slideshow.fth
Lines that begin with a backslash are comments. As this shows, include files can be nested.

You specify the high level application include file in the Input Area (bottom of the screen), hit return and each individual include file is loaded and compiled on the ESP32. The compilation progress of the ESP32Forth code is shown in the large output window. Any errors encountered during the compilation will be shown in this window. The Input Area also maintains a command history which can be scrolled through using the up and down cursor keys.

If one types #help in the Input Area a help screen is displayed:
ESP32 Forth Loader by Craig A. Lindley

ESP32 Forth Loader Directives:

#clear - Clears the Output Area
#bye - Terminates ESP32 Forth Loader
#help - Shows this message
#include filename - Loads Forth code from a file

1. Remember to have your ESP32 device connected before starting ESP32 Forth Loader
2. Remember to set the FORTH_HOME environment variable if using include files
3. #include files can be nested
4. Use the up/down cursor keys to access command history

Questions/Comments to
The ESP32Forth Loader requires configuration before it can be used. The following are the instructions for running on a MAC.

ESP32 Forth Loader Running Instructions
Craig A. Lindley
July 2021

1. ESP32ForthLoader.jar
2. jssc-2.8.0.jar (or newer)

Executing From Shell
1. Change directory to where the Forth loader jar files are located
2. export FORTH_HOME=<“full path to directory with esp32Forth project files>”
3. export CLASSPATH=“./ESP32ForthLoader.jar:./jssc-2.8.0.jar”
4. java com.craigl.esp32ForthLoader.ESP32ForthLoader

Alternatively add the following to your .profile/.zshenv file in your home directory
# Items for ESP32 Forth Loader
export FORTH_HOME=~/Documents/dev/ESP32ForthLoader/projects
export CLASSPATH=~/Documents/dev/ESP32ForthLoader/ESP32ForthLoader.jar:~/Documents/dev/ESP32ForthLoader/jssc-2.8.0.jar
alias pfl="java com.craigl.esp32ForthLoader.ESP32ForthLoader"

1. Connect your ESP32 device to your computer
2. Execute ESP32pForthLoader as described above
3. Once loader is operational, select appropriate Serial Port from drop down list
4. Click Open button in the UI to open the selected Serial Port
5. Type #help into the Input Area to see the help info
6. Type Forth commands to interact with ESP32forth
7. Type #include <filename> to load Forth code from a file
8. Use up/down cursor keys to retrieve command history
9. Type #bye to terminate the loader

1. The loader's window can be resized as necessary
The combination of ESP32Forth and the ESP32ForthLoader makes a convenient and useful development environment for writing ESP32Forth applications.

Click here to view the various ESP32Forth code/applications I have written. NOTE: this is a snapshot of my work space so not all code is fully operational.

My Forth Writings

Over the years I have written numerous times on various Forth topics. Here are some of the items I have published in roughly chronological order:

I wrote "The Alternate FORTH", a complete FORTH language and operating system for the TRS-80 line of Radio Shack computers. Marketed by the Alternate Source, Lansing, MI. 1983.

I wrote an article for the, now defunct magazine, Forth Dimensions, about writing a full on spreadsheet program in Forth. The program was made up of 45 screens of source code so the article was spread out over 2 issues. The first issue of the magazine is available here.

An article, "Forth Windows for the IBM PC", Dr. Dobbs Journal, July 1986, pg. 46.

I wrote an article for Dr. Dobb's Journal in 2008 about using Forth to generate HTML for web pages. The article is available here and the supporting code is available here.

I wrote an another article for Dr. Dobb's Journal also in 2008 where I wrote a version of Forth I called JForth in Java. The article is available here and the supporting code is available here.

I wrote an article in 2014 for Servo magazine called "Programming the Arduino in AMForth". The article is available here.

Home                               Craigs Pages                               Heathers Pages