From 2dec249cc7a07bb241bc0611f82e723030d3e30c Mon Sep 17 00:00:00 2001 From: kitty Date: Sun, 8 Feb 2026 15:23:58 +1100 Subject: almost certainly deeply broken FIND x86 assembly is fucked --- jefs.s | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'jefs.s') diff --git a/jefs.s b/jefs.s index 3234b44..806e3b2 100644 --- a/jefs.s +++ b/jefs.s @@ -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" -- cgit v1.2.3