/hthforth

Primary LanguageHaskellOtherNOASSERTION

hthforth is a Forth-2012 written in Haskell and Forth. The idea is to
keep pace with the development of the proposed Forth 200x standard
(currently called Forth-2012).
Visit http://www.forth200x.org for more information.

The main idea with this Forth is to implement a cross compiler
for embedded systems development.

Forth works differently from many other languages in that it lacks syntax
and is not suitable to parse using normal parsing techniques.
Instead, one has to build a Forth system from another Forth system which
acts as a bootstrapper, a technique that is called meta compiling in
the Forth world.
This Forth is meant to be such meta compiler, or more correctly, a cross
compiler, as the intended target will be different.

Haskell is the implementation language used here. The cross compiler
can be built using Haskell cabal.

Current status is that all core words are in place for the hosted Forth.
The cross compiler is able to compile a subset of the language
and produce sketchy assembler output for Cortex-M.

To build hthforth, you will need to have Haskell installed. The
current version of GHC used is 7.8.3, but 7.6.3 should also work well.
(GHC 7.10 has not yet been tried).

With a suitable GHC, do the following in the top level directory:
% cabal configure
% cabal build

To run hthforth:
% dist/build/hthforth/hthforth

When started, there is a very small subset of core words available. To
bring more words in:
LOAD-SOURCE src/lib/core.fs

After loading the core words, you can enable the cross compiler:
CROSS-COMPILER

At this point a small amount of words and library code are availalbe.
You can load more words and even try something on your own:
LOAD-SOURCE src/lib/target-core.fs
5 CONSTANT FIVE
VARIABLE XXX

At any point, you can generate assembler output to a desired target
using a suitable DUMP- word:
DUMP-CORTEXM arm.s
DUMP-MSP430 430.s

This gives a source file 'arm.s' using Cortex-M assembler. The MSP430 output
(which is even more stetchy at this point) will be written to '430.s'.

At the moment, the output is not accepted by the GNU assembler due to too
advanced expressions (I am quite certain that it is too picky).
Later on this need to be worked around, or try another assembler that
actually can handle it.

If you want to GNU assembler, install GNU binutils and build a cross assembler.

For MSP430, use:
./configure --target=msp430-elf

For Cortex-M use:
./configure --target=arm-elf


To exit hthforth, type BYE or press Ctrl-C.

Haskeline is used, so you have full command line history and editing
available.

October 2015, Håkan Thörngren, hth313@gmail.com

There is also a Trello board for this project available at
https://trello.com/b/HNLHA3en/hthforth which is currently
not kept so well updated. Most project planning and ideas
take place in the TODO.org (which is not always up to date in
the repository), a file to be opened with Emacs org mode.