summaryrefslogtreecommitdiff
path: root/jefs.s
diff options
context:
space:
mode:
Diffstat (limited to 'jefs.s')
-rw-r--r--jefs.s35
1 files changed, 26 insertions, 9 deletions
diff --git a/jefs.s b/jefs.s
index ae0a80c..e64a182 100644
--- a/jefs.s
+++ b/jefs.s
@@ -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