summaryrefslogtreecommitdiff
path: root/jefs.fs
diff options
context:
space:
mode:
Diffstat (limited to 'jefs.fs')
-rw-r--r--jefs.fs20
1 files changed, 17 insertions, 3 deletions
diff --git a/jefs.fs b/jefs.fs
index 3119591..b406e63 100644
--- a/jefs.fs
+++ b/jefs.fs
@@ -1,3 +1,12 @@
+\ i think something is going on with the stack. i dunno
+\ things TODO:
+\ EVALUATE
+\ DO LOOP
+\ <builds does>
+\ argc/argv
+\ file io
+\ interactive input
+
: cell+ 8 + ;
: syswrite ( u c-addr fd -- n ) 1 syscall3 ;
: say ( c-addr u -- ) swap 2 syswrite drop ;
@@ -33,7 +42,7 @@ hex : ret, c3 c, ; decimal
: >resolve dup here @ swap - 4 - swap d! ;
: begin <mark ; immediate
-: again branch <resolve ; immediate \ add 4 to get to beginning of the next instruction
+: again branch <resolve ; immediate
: until 0branch <resolve ; immediate
: if 0branch >mark ; immediate ( I: -- a )
: else branch >mark swap >resolve ; immediate
@@ -68,7 +77,6 @@ variable modrm
: rex.b rex @ 41 or rex ! ;
: rex, rex @ ?dup if c, then ;
-
\ REGISTERS {{{
: rax modrm @ 0 or modrm ! ; : rcx modrm @ 1 or modrm ! ;
: rdx modrm @ 2 or modrm ! ; : rbx modrm @ 3 or modrm ! ;
@@ -168,10 +176,16 @@ variable hld
: bytes-free bytes-allocated bytes-used - ;
: .free bytes-free u. ." of " bytes-allocated u. ." bytes free (used " bytes-used (.) say ." )" cr ;
-: >nfa ( lfa -- nfa ) 9 + ;
: >ffa ( lfa -- ffa ) 8 + ;
+: >nfa ( lfa -- nfa ) 9 + ;
: (words) ( lfa -- ) >nfa dup w@ swap 2 + swap say 2 spaces ;
: words latest @ begin ?dup 0<> while dup (words) @ repeat cr ;
+\ TODO fix/rewrite interpreter to respect #tib
+\ : (evaluate) ( c-addr u -- ) .s 0 >in ! ( u ) #tib ! ( c-addr ) tib ! interpret ;
+: (evaluate) ( c-addr u -- ) .s 2drop ;
+: evaluate ( c-addr u -- ) >r >r tib @ #tib @ >in @ r> r> (evaluate) >in ! #tib ! tib ! ;
+
+TESTSTR evaluate
.free
bye