Skip to content

Self-hosting metacompiled Forth, bootstrapping from a few lines of C; targets Linux, Windows, ARM, RISC-V, 68000, PDP-11, asm.js.

License

Notifications You must be signed in to change notification settings

Tiancheng-Luo/lbForth

This branch is 2 commits behind larsbrinkhoff/lbForth:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

00aa979 · Dec 14, 2017
Jul 12, 2016
Nov 20, 2017
Nov 23, 2017
Nov 20, 2017
Mar 28, 2017
Dec 14, 2017
Nov 20, 2017
Nov 20, 2017
Feb 2, 2016
Nov 23, 2015
Apr 25, 2017
Jul 31, 2017
Apr 25, 2017
Jul 31, 2017
Jul 31, 2017
May 31, 2016
May 19, 2015
Nov 20, 2017
Sep 29, 2017
Sep 29, 2017
Oct 22, 2015
Nov 4, 2015
Aug 1, 2017
Aug 1, 2017
Apr 5, 2017
Jul 31, 2017
Jul 21, 2016
Nov 4, 2015

Repository files navigation

( Subset of Forth94 )

This is a self-hosted implementation of Forth, which can regenerate itself from Forth source code. The bootstrapping process uses a metacompiler written in Lisp to target a small inner interpreter and a handful of code words written in C. A new metacompiler written in Forth generates an x86 executable using using assembly language code words.

There are also ARM, RISC-V, Motorola 68000, PDP-11, and asm.js targets. There is a cross compiler for 6502, 8051, AVR, Cortex-M, MSP430, PDP-8, PIC, and STM8.

( Continuous integration )

The code is continuously built and tested in Linux, MacOS X, and Windows using several cloud-based continuous integration services. This is documented in build.md.

( Further reading )

INSTALL \ How to build.
doc \ Classic (and recent) texts not related to this project.
lib/README \ Information about libraries.
targets/README.md \ Information about current and possibly future targets.

( Implementation guide )

The Forth kernel contains everything needed to read and compile the rest of the system from source code, and not much else. It's composed of two parts: a target-specific file nucleus.fth containing all primitive CODE words, and a target-independent kernel.fth. These two are compiled by the metacompiler.

The C target nucleus used for bootstrapping has only twelve proper primitives. There is also the COLD word which compiles to main(), and four I/O words.

When the kernel starts, it jumps to the word called WARM. This is responsible for loading the rest of the system and entering the text interpreter. The first file loaded by WARM is core.fth, which implements the CORE wordset. Because the kernel only has a bare minimum of words, the start of core.fth looks a little strange.

About

Self-hosting metacompiled Forth, bootstrapping from a few lines of C; targets Linux, Windows, ARM, RISC-V, 68000, PDP-11, asm.js.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Forth 96.7%
  • Makefile 1.0%
  • Emacs Lisp 0.8%
  • Shell 0.7%
  • C 0.4%
  • HTML 0.2%
  • Other 0.2%