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