MachineForth icon indicating copy to clipboard operation
MachineForth copied to clipboard

Inspired by Chuck Moore's "Machine Forth"

MachineForth

This is a compiler/vm for a bare-bones Forth VM. NOTE: this is NOT related to, in any way, the Machine Forth of the great Chuck Moore.

NOTE: This is very old. A newer, and more useable version can be found here: https://github.com/CCurl/cccForth

This was inspired by Chuck Moore's "Machine Forth". Please refer to this for more information:

http://www.ultratechnology.com/mfp21.htm

It has circular stacks, for both data and return. It is very easy to add primitives and add any desired functionality.

It is written in C in just a few files. There is also a disassembler, in file 'mfd.c'.

This is a token-threaded implementation. I ran some comparisons between that and a direct-threaded implementation. I was surprised to find that the byte-code threaded implementation ran faster. It was not much faster, over 500 million iterations, about .4 seconds for the following simple loop:

: bench 1000 dup * 500 * begin 1- while drop ; \ This runs in about 1.4 seconds

This is probably because it uses a SWITCH loop, so the overhead for the call/ret insructions is avoided. Over 500 million iterations, that can be noticeable.

Building Machine Forth:

Machine Forth can be built using either Visual Studio, or GCC. 

- For Visual Studio, there is a Solution file, mf.sln.

- For GCC, there is a batch file, make.bat
    'make mf' makes the mforth.exe
    'make mfd' makes the mforth disassembler

Running ...

mforth -? shows usage information about mforth.

mfd -? shows usage information about the mforth disassembler.

To play with base mforth system, use 'mforth -b -t'. That builds a base system and drops into the REPL. The -t tells mforth to not save the state when you exit.

  • mfd: reads the identified system and creates a disassembly in a *.dis file.