diff options
| author | kitty <nepeta@canaglie.net> | 2026-02-08 15:23:58 +1100 |
|---|---|---|
| committer | kitty <nepeta@canaglie.net> | 2026-02-08 15:23:58 +1100 |
| commit | 2dec249cc7a07bb241bc0611f82e723030d3e30c (patch) | |
| tree | f6f64e492d1dbcd00ee2ae8ed055346a26e98ab5 /jefs.s | |
| parent | d22e6159d2586a799160c5ceb5424a4ec3d5a422 (diff) | |
almost certainly deeply broken FIND
x86 assembly is fucked
Diffstat (limited to 'jefs.s')
| -rw-r--r-- | jefs.s | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -46,6 +46,9 @@ %assign smudge_mask 0x1 %assign immemdiate_mask 0x2 + +%assign false 0x0 +%assign true 0xffffffffffffffff ;;; }}} ;; syscall @@ -141,7 +144,44 @@ defword "parse", parse, 0 pspush r11 ; u ret +; probably fucked up and broken. have not tested any of this yet defword "find", find, 0 + pspop r10 ; u + pspop r11 ; c-addr + mov r12, latest + mov r13, qword [r12] + mov r12, r13 + +.check_smudge: + add r13, 8 + mov r9b, byte [r13] + test r9b, smudge_mask + jnz .no + +.no_smudge: + inc r13 + mov r9w, word [r13] + cmp r9w, r10w + jne .no + mov rsi, r13 + add rsi, 2 + mov rdi, r11 + repz cmpsb + jnz .no + sub r13, 9 + pspush r13 + mov r13, true + pspush r13 + ret + +.no: + mov r13, qword [r12] + mov r12, r13 + cmp r13, 0 ; end of dictionary? fallthrough to notfound if so + jne .check_smudge + + mov r13, false + pspush r13 ret ; stage 1 interpreter, just reads from initfile @@ -149,6 +189,7 @@ defword "interpret", interpret, 0 ret defvar ">in", to_in, 0, initfile +defvar "latest", latest, 0, lfa_latest initfile: incbin "jefs.fs" |
