summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkitty <nepeta@canaglie.net>2026-02-16 23:06:18 +1100
committerkitty <nepeta@canaglie.net>2026-02-16 23:06:18 +1100
commitb0c1c394e20c582ff9df3234559f7f88fc1f426c (patch)
treef1565ae4a72164d56a0ad6631af94a462cc2159b
parent9085321aa274b63a30fc6a1edf75820ab6875437 (diff)
smudge, rewrite : using create and smudge
-rw-r--r--jefs.s36
1 files changed, 11 insertions, 25 deletions
diff --git a/jefs.s b/jefs.s
index 5101a8f..4c3f291 100644
--- a/jefs.s
+++ b/jefs.s
@@ -398,32 +398,9 @@ defword "compile,", compile_comma, 0
mov qword [here], r12
ret
-; todo: separate the CREATE functionality out
defword ":", colon, 0
- call parse
- pspop r9 ; u
- pspop r10 ; c-addr
- mov r11, [latest]
- mov r12, [here]
- push r12 ; keep for LATEST
-
- mov qword [r12], r11
- add r12, 8
- mov byte [r12], smudge_mask
- inc r12
- mov word [r12], r9w ; r9w from r9: safe?
- add r12, 2
-
- ; strcpy
- mov rcx, r9
- mov rsi, r10
- mov rdi, r12
- rep movsb
- add r12, r9
-
- mov qword [here], r12
- pop r12
- mov qword [latest], r12
+ call create
+ call smudge
mov qword [state], compiling
ret
@@ -744,6 +721,15 @@ defword "immediate", immediate, 0
mov byte [r12], r13b
ret
+defword "smudge", smudge, 0 ; TOGGLES it (follows fig-forth but i kinda dont like it)
+ mov r12, [latest]
+ add r12, 8
+ mov r13b, [r12]
+ mov r15b, smudge_mask
+ xor r13b, r15b
+ mov byte [r12], r13b
+ ret
+
; e9 [00 00 00 00] relative 32 bit immediate, relative to *instruction after jump*!
; note: the dummy value must be provided *by the calling word*
defword "branch", branch, 0