diff options
| author | kitty <nepeta@canaglie.net> | 2026-02-18 19:57:54 +1100 |
|---|---|---|
| committer | kitty <nepeta@canaglie.net> | 2026-02-18 19:57:54 +1100 |
| commit | bdaf2637c5b90469a84346d2d88e9c5b11d252b8 (patch) | |
| tree | 43f503b12bc1074df345d6446ec3b8ca0a171743 | |
| parent | e07cb5d13e6c7e61c21ddcf5aa86b03f56583e59 (diff) | |
add TIB
realising that my plan of just Rewriting everything in forth
later was a little Silly, and i can just create a TIB variable
and use initfile as its initial value. probably should also
create a #TIB variable and make the interpreter (or parse?)
use it. i think this makes an EVALUATE word (idk if that was
what it was called?) possible too which means file reading
and input from terminal would also be possible. wonderful!
| -rw-r--r-- | jefs.s | 35 |
1 files changed, 26 insertions, 9 deletions
@@ -200,7 +200,7 @@ defword "sp", _sp, 0 ; there won't be much error checking either. defword "parse", parse, 0 mov r13, qword [to_in] - add r13, initfile + add r13, qword [tib] mov r12b, byte [r13] .wsloop: ; skip initial ws @@ -231,7 +231,7 @@ defword "parse", parse, 0 .wordloop_end: dec r11 - sub r13, initfile + sub r13, qword [tib] mov qword [to_in], r13 pop r13 pspush r13 ; c-addr @@ -278,7 +278,6 @@ defword "find", find, 0 pspush r13 ret -; stage 1 interpreter, just reads from initfile defword "interpret", interpret, 0 .loop: call parse @@ -551,8 +550,25 @@ defword "lit", lit, immediate_mask ; C: ( n -- ) ( -- n ) mov qword [here], r12 ret -defword "litstring", litstring, immediate_mask ; I: ( chr -- ) - pspop r11 +; what to compile: +; ADDR ← IP + 16 +; JMP AFTER_STRING +; S c, T c, R c, ... +; [ fill AFTER_STRING ] +; PUSH ADDR +; PUSH CNT +defword "litstring", litstring, immediate_mask ; I: ( delim -- ) + pspop r11 ; delim + mov r12, [here] + + mov byte [r12], 0xe9 ; JMP + inc r12 + push r12 + mov dword [r12], 0x00000000 ; filler value + ; hm,, is the relative value gonna be equivalent to strlen + 1? + + pop r12 + mov qword [here], r12 ret defword "syscall0", syscall0, 0 ; ( id -- rax ) @@ -754,7 +770,7 @@ defword "]", rbrac, immediate_mask defword "\", backslash, immediate_mask mov r13, qword [to_in] - add r13, initfile + add r13, qword [tib] mov r12b, byte [r13] .loop: cmp r12b, 0x0a @@ -766,13 +782,13 @@ defword "\", backslash, immediate_mask .done: inc r13 - sub r13, initfile + sub r13, qword [tib] mov qword [to_in], r13 ret defword "(", bracket, immediate_mask mov r13, qword [to_in] - add r13, initfile + add r13, qword [tib] mov r12b, byte [r13] .loop: cmp r12b, 0x29 @@ -784,7 +800,7 @@ defword "(", bracket, immediate_mask .done: inc r13 - sub r13, initfile + sub r13, qword [tib] mov qword [to_in], r13 ret @@ -903,6 +919,7 @@ defword "HEREDUMP", heredump, 0 ret ; }}} +defvar "tib", tib, 0, initfile defvar ">in", to_in, 0, 0 defvar "state", state, 0, interpreting defvar "here", here, 0, umem |
