diff options
| -rw-r--r-- | jefs.fs | 14 | ||||
| -rw-r--r-- | jefs.s | 6 |
2 files changed, 9 insertions, 11 deletions
@@ -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 @@ -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 |
