summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkitty <nepeta@canaglie.net>2026-02-26 19:21:40 +1100
committerkitty <nepeta@canaglie.net>2026-02-26 19:21:40 +1100
commit68df791b4b1dd5f45dc4b957c9bfd0aa68ee39dc (patch)
tree200aee824380b56f770bc00c5b68d72e79999b17
parent59f9514eb8324926cc73e2ebc28f234afac1d4fd (diff)
fix string stack wonkery? i think?
i mean it works now afaict...
-rw-r--r--jefs.fs14
-rw-r--r--jefs.s6
2 files changed, 9 insertions, 11 deletions
diff --git a/jefs.fs b/jefs.fs
index ba2aae6..c3e70b7 100644
--- a/jefs.fs
+++ b/jefs.fs
@@ -54,8 +54,8 @@ hex : ret, c3 c, ; decimal
: ?dup dup 0<> if dup then ;
\ TODO interpret mode strings?
-\ : s" [ char " ] literal 1 >in +! ( skip spc ) [compile] litstring ; immediate
-: s" 1 >in +! [ char " ] literal cparse branch >mark >r 2dup cmove, r> >resolve swap [compile] lit [compile] lit drop ; immediate
+\ i think s" causes stack underflow
+: s" 1 >in +! [ char " ] literal cparse branch >mark >r 2dup cmove, r> >resolve swap [compile] lit [compile] lit ; immediate
: ." [compile] s" ' say compile, ; immediate \ lol this word breaks the highlighting, here have another "
\ https://wiki.osdev.org/X86-64_Instruction_Encoding
@@ -171,7 +171,7 @@ variable hld
: .qword (.qword) say space ;
: ? @ . ;
-: .s sp 8 + ( skip sp itself ) begin dup s0 @ >= while dup @ .qword 8 + repeat drop cr ;
+: .s sp 8 + ( skip sp itself ) begin dup s0 @ > while dup @ .qword 8 + repeat drop cr ;
: bytes-allocated hend @ h0 @ - ;
: bytes-used here @ h0 @ - ;
: bytes-free bytes-allocated bytes-used - ;
@@ -182,12 +182,10 @@ variable hld
: (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 -- ) 2drop ;
+: (evaluate) ( c-addr u -- ) .s 0 >in ! ( u ) #tib ! ( c-addr ) tib ! interpret ;
: evaluate ( c-addr u -- ) >r >r tib @ #tib @ >in @ r> r> (evaluate) >in ! #tib ! tib ! ;
-.s
-TESTSTR evaluate
+: teststr3 s" 1 2 3 .s" .s ;
+
.free
bye
diff --git a/jefs.s b/jefs.s
index 78154cf..617ca54 100644
--- a/jefs.s
+++ b/jefs.s
@@ -13,7 +13,7 @@
%macro pspop 1
mov %1, qword [r14]
lea r14, [r14+8]
- cmp r14, wstack + 24
+ cmp r14, wstack
jle %%ok
mov qword [error], 1
mov r8, qword [handler]
@@ -76,7 +76,7 @@ umem: resb 0x9c400
umem_e:
wstack_b: resq 2047
-wstack:
+wstack: resq 4
section .text
global _start
@@ -1161,7 +1161,7 @@ defvar "#tib", num_tib, 0, initlen
defvar ">in", to_in, 0, 0
defvar "state", state, 0, interpreting
defvar "here", here, 0, umem
-defvar "s0", s0, 0, wstack + 16
+defvar "s0", s0, 0, wstack
defvar "h0", h0, 0, umem ; beginning of user memory area
defvar "hend", hend, 0, umem_e ; ending of user memory area
defvar "base", base, 0, 10