Forth Notebook
Learning Forth
I started learning Forth by reading Starting Forth[1] and doing
the most of the exercises in each chapter. I downloaded and in-
stalled Gforth[2] on my Debian machine. There were a few places
in Starting Forth where the exercise didn't line up with the be-
havior of Gforth, especially around double-length numbers. Where
Starting forth would suggest entering a double-length number by
including a comma or period, Gforth would give me an error. I
found that it was best to enter a number followed by a zero when
using words that operated on double-length numbers.
I also installed pForth[3] and spent some time with the pForth
tutorial[4]. pForth didn't include some things, like M*/, and
the behavior of some words was different from gforth.
I subscribed to the Gforth mailing list[5]. I also started lurk-
ing in the #forth channel on Freenode. A lot of the discussion
in there is about implementing Forth itself, not necessarily
writing programs in forth. I also subscribed to the Forth sub-
reddit[6].
After reading the math-centric tutorials above, watching a video
about text processing in forth by Andreas Wagner[7] was an eye-
opener.
Thinking Forth by Leo Brodie[8] is also recommended as an impor-
tant text for aspiring forthwrights, but I haven't read it, yet.
Some more forth links:
+o theForth.net[9] - Package manager and repository for Forth. I
understand this targets Gforth.
+o The Evolution of Forth[10]
+o Forth on a DIP[11]
+o A Beginner's Guide to Forth by J.V. Noble[12]
+o Forth Lessons[13]
Embedded Forth
Forth lends itself to embedded environments. There are a number
of embedded forth environments available. The one that seems
most interesting to me is mecrisp[14] by Matthias Koch. Mecrisp
targets TI MSP430[15] microcontrollers. Mecrisp-Stellaris[16] is
a distribution of Mecrisp that includes support for additional
MCs, the STM32 family, in particular. I believe Terry Porter has
mentioned that he often uses an STM32F0 Discovery board[17] for
prototyping. Terry Porter's YouTube Channel[18] includes a num-
ber of short but interesting videos demonstrating his development
method. 0033mer's YouTube Channel[19] also includes some videos
on using Mecrisp-Stellaris.
The more I read about development using Mecrisp, the more it
seemed I would have a lot of work to do to integrate with periph-
erals like input and output devices and mass storage. Having
even a minimal GNU/Linux environment (with a network stack!)
would cut out a lot of that work, though at the cost of some min-
imalist cach. All is not lost, however, because wiring-
Pi_gforth[20] provides an interface to the GPIO pins on a Rasp-
berry Pi from within Gforth.
So, I could implement my first version of the event logger using
Perl on a Pi Zero, (using Steve Bertrand's RPi::WiringPi[21])
then in gforth on the same device and, later, port the forth ap-
plication to Mecrisp-Stellaris on an STM32. Another article on
Accessing GPIO pins from gforth[22]. I also looked pretty hard
at the STM32F303 Nucleo board.
More MC Forth links:
+o The Mite[23] - A 65C02-based microcomputer
+o Egel Project[24]
References
[1]:
https://www.forth.com/starting-forth/
[2]:
https://www.gnu.org/software/gforth/
[3]:
http://www.softsynth.com/pforth/
[4]:
http://www.softsynth.com/pforth/pf_tut.php
[5]:
https://lists.gnu.org/mailman/listinfo/gforth
[6]:
https://www.reddit.com/r/Forth/
[7]:
https://www.youtube.com/watch?v=mvrE2ZGe-rs
[8]:
http://thinking-forth.sourceforge.net/
[9]:
http://theforth.net
[10]:
https://www.forth.com/resources/forth-programming-language/
[11]:
https://jeelabs.org/2015/07/22/forth-on-a-dip/
[12]:
http://galileo.phys.virginia.edu/classes/551.jvn.fall01/primer.htm
[13]:
http://wiki.laptop.org/go/Forth_Lessons
[14]:
http://mecrisp.sourceforge.net/
[15]:
http://www.ti.com/microcontrollers/msp430-ultra-low-power-mcus/overview.html
[16]:
https://mecrisp-stellaris-folkdoc.sourceforge.io/index.html
[17]:
https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-discovery-kits/32f0308discovery.html
[18]:
https://www.youtube.com/channel/UCEOYYu1bSPFf-EVaY9akRcg
[19]:
https://www.youtube.com/channel/UCSBspfcqX5QuK4XBLsh1rLw
[20]:
https://github.com/kristopherjohnson/wiringPi_gforth
[21]:
https://metacpan.org/pod/RPi%3A%3AWiringPi
[22]:
https://www.raspberrypi.org/forums/viewtopic.php?p=1283928
[23]:
http://dourish/com/projects/mith/html
[24]:
http://home.hccnet.nl/willem.ouwerkerk/egel-for-msp430/egel%20for%20launchpad.html