diff options
Diffstat (limited to 'core.fth')
-rw-r--r-- | core.fth | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/core.fth b/core.fth new file mode 100644 index 0000000..69ce9a2 --- /dev/null +++ b/core.fth @@ -0,0 +1,41 @@ +: cell 8 ; +: cell+ cell + ; +: cells cell * ; +: char+ 1 + ; +: chars ; + +: state _d 7 cells + ; +: [ 0 state ! ; immediate +: ] -1 state ! ; + +: sp _d ; +: rp [ _d cell+ ] literal ; +: dp [ _d 3 cells + ] literal ; + +: sp@ sp @ ; +: rp@ rp @ cell+ ; +: ip [ _d cell+ cell+ ] literal ; +: here dp @ ; +: unused [ _d 8 cells + ] literal @ here - ; +: latest [ _d 4 cells + ] literal @ ; + +: dup sp@ @ ; +: drop sp@ cell+ sp ! ; +: pick cells cell+ sp@ + @ ; +: >r rp@ cell - rp ! + rp@ cell+ @ rp@ ! + rp@ cell+ ! ; +: r> rp@ @ + rp@ cell+ rp ! + rp@ @ swap rp@ ! ; +: rot >r swap r> swap ; +: -rot rot rot ; +: over 1 pick ; + +: +! dup >r swap r> @ + swap ! ; +: allot dp +! ; +: , here ! cell allot ; + +: 1+ 1 + ; +: 1- 1 - ; + |