From ccd001edb78f39e7ae3f2f29ea67cc4fae9cd1b4 Mon Sep 17 00:00:00 2001 From: kitty Date: Thu, 26 Feb 2026 15:45:15 +1100 Subject: maybe this program is extremely broken. possible --- jefs.fs | 20 +++++++++++++++++--- jefs.s | 16 ++++++++++------ readme.md | 1 + 3 files changed, 28 insertions(+), 9 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 +\ +\ 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 ( 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 diff --git a/jefs.s b/jefs.s index 7820b78..b76eb11 100644 --- a/jefs.s +++ b/jefs.s @@ -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 {{{ diff --git a/readme.md b/readme.md index e7c84be..c72a595 100644 --- a/readme.md +++ b/readme.md @@ -83,3 +83,4 @@ the error codes are: - 0: nothing. - 1: stack underflow +- 2: word not found -- cgit v1.2.3