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 /jefs.s | |
| 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!
Diffstat (limited to 'jefs.s')
| -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 |
