diff options
| author | kitty <nepeta@canaglie.net> | 2026-02-23 14:03:53 +1100 |
|---|---|---|
| committer | kitty <nepeta@canaglie.net> | 2026-02-23 14:03:53 +1100 |
| commit | ce86d1196c4936fe67129a3ab2fc57ae131df6f1 (patch) | |
| tree | b2e5029f8bbaadec6efd63d5e70e0dc4bf3075a3 /jefs.s | |
| parent | 4b4c00e3b768305220a26ef8912cfeddd771e1b6 (diff) | |
i reimplemented s" and it still doesnt work right
Diffstat (limited to 'jefs.s')
| -rw-r--r-- | jefs.s | 120 |
1 files changed, 80 insertions, 40 deletions
@@ -195,9 +195,6 @@ defword "sp", _sp, 0 pspush r14 ret -; stage 1 parser. very rudimentary, -; since it will only parse a little bit of the init file -; there won't be much error checking either. defword "parse", parse, 0 mov r13, qword [to_in] add r13, qword [tib] @@ -238,6 +235,33 @@ defword "parse", parse, 0 pspush r11 ; u ret +defword "cparse", cparse, 0 + pspop r15 ; c + mov r13, qword [to_in] + add r13, qword [tib] + mov r12b, byte [r13] + +.wordloop_start: + push r13 ; keep start address of this word for later + mov r11, 1 ; W: word length count +.wordloop: + cmp r12b, r15b + je .wordloop_end + + inc r11 + inc r13 + mov r12b, byte [r13] + jmp .wordloop + +.wordloop_end: + dec r11 + sub r13, qword [tib] + mov qword [to_in], r13 + pop r13 + pspush r13 ; c-addr + pspush r11 ; u + ret + defword "find", find, 0 pspop r10 ; u pspop r11 ; c-addr @@ -1002,42 +1026,58 @@ defword "0branch", zerobranch, 0 ; debugging word; outputs raw bytes so needs to be piped through `x(x)d` ; terrible and awful ; W = r14; W <= wstack_b; W+=8 -; defword ".s", dots, 0 -; push r11 -; push r12 -; -; mov r12, r14 -; .loop: -; cmp r12, wstack -; jge .done -; -; mov [.space], r12 -; mov rdx, 8 ; qword -; mov rsi, .space -; mov rdi, 1 -; mov rax, __NR_write -; syscall -; -; mov rdx, 8 ; qword -; mov rsi, r12 -; mov rdi, 1 -; mov rax, __NR_write -; syscall -; lea r12, [r12+8] -; jmp .loop -; -; .done: -; mov rdx, 16 ; 2 qword -; mov rsi, .dmsg -; mov rdi, 1 -; mov rax, __NR_write -; syscall -; -; pop r12 -; pop r11 -; ret -; .space: resq 1 -; .dmsg: db "DONEDONEYIPPEEEE" +defword ".s", dots, 0 + push r11 + push r12 + + mov r12, r14 +.loop: + cmp r12, wstack + jge .done + + mov [.space], r12 + mov rdx, 8 ; qword + mov rsi, .space + mov rdi, 1 + mov rax, __NR_write + syscall + + mov rdx, 8 ; qword + mov rsi, r12 + mov rdi, 1 + mov rax, __NR_write + syscall + lea r12, [r12+8] + jmp .loop + +.done: + mov rdx, 16 ; 2 qword + mov rsi, .dmsg + mov rdi, 1 + mov rax, __NR_write + syscall + + pop r12 + pop r11 + ret +.space: resq 1 +.dmsg: db "DONEDONEYIPPEEEE" + +defword "TESTSTR", teststr, 0 + mov r11, .msg + pspush r11 + mov r11, 11 + pspush r11 + ret +.msg: db "test string" + +defword "TESTSTR2", teststr2, 0 + mov r11, .msg + pspush r11 + mov r11, 12 + pspush r11 + ret +.msg: db "other string" defword "HEREDUMP", heredump, 0 mov rdx, [here] @@ -1055,7 +1095,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 - 8 +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 |
