Find a file
2020-12-29 16:44:54 +09:00
.gitignore Add .gitignore 2020-12-28 22:11:45 +09:00
helloworld.fs Hello World!!!!!! 2020-12-29 14:51:27 +09:00
LICENSE Modify LICENSE 2020-12-28 22:03:48 +09:00
Makefile Add initial version of planck.xxd 2020-12-28 22:11:20 +09:00
planck.xxd Add "{" and "}" 2020-12-29 16:44:54 +09:00
README.md Add "{" and "}" 2020-12-29 16:44:54 +09:00

PlanckForth: Bootstrapping Forth from Handwritten Binary

$ make
$ cat helloworld.fs | ./plank

Builtin Words

code name stack effect semantics
Q quit ( -- ) Exit the process
C cell ( -- n ) The size of Cells
h here ( -- addr ) The address of 'here' cell
l latest ( -- addr ) The address of 'latest' cell
k key ( -- n ) Read character
t type ( n -- ) Print character
j jump ( -- ) Unconditional branch.
J 0jump ( a -- ) Jump if a == 0.
f find ( c -- xt ) Get execution token of c
x execute ( xt -- ... ) Run the execution token
@ fetch ( addr -- a ) Load value from addr
! store ( a addr -- ) Store value to addr
? cfetch ( addr -- c ) Load byte from addr
$ cstore ( c addr -- ) Store byte to addr
d dfetch ( -- addr ) Get data stack pointer
D dstore ( addr -- ) Set data stack pointer
r rfetch ( -- addr ) Get return stack pointer
R rstore ( addr -- ) Set return stack pointer
{ dtor ( a -- R:a ) Push value to return stack
} rtod ( R: -- a ) Pop value from return stack