diff options
| -rw-r--r-- | jefs.fs | 20 | ||||
| -rw-r--r-- | jefs.s | 16 | ||||
| -rw-r--r-- | readme.md | 1 |
3 files changed, 28 insertions, 9 deletions
@@ -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 @@ -6,15 +6,19 @@ mov qword [r14], %1 %endmacro +; TODO +; i'm worried that the reason the error handling +; doesnt work without the +24 +; is that my code is bad and underflows the stack %macro pspop 1 mov %1, qword [r14] lea r14, [r14+8] - ; cmp r14, wstack - ; jle %%ok - ; mov qword [error], 1 - ; mov r8, qword [handler] - ; call r8 - ; %%ok: + cmp r14, wstack + 24 + jle %%ok + mov qword [error], 1 + mov r8, qword [handler] + call r8 + %%ok: %endmacro ;;; dictionary macros {{{ @@ -83,3 +83,4 @@ the error codes are: - 0: nothing. - 1: stack underflow +- 2: word not found |
