summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkitty <nepeta@canaglie.net>2026-02-21 01:30:51 +1100
committerkitty <nepeta@canaglie.net>2026-02-21 01:30:51 +1100
commit8ea14c863401f19e602132192e2b8d776669ce5d (patch)
tree2604f3bcafd0db17f11bea84d565cedc3a905a17
parent734c5c4430d488fc78dca791643ac6f1431c24c1 (diff)
hex dpy words, .s in forth!
-rw-r--r--jefs.fs14
-rw-r--r--jefs.s73
2 files changed, 49 insertions, 38 deletions
diff --git a/jefs.fs b/jefs.fs
index 2bfbcfb..b5d2cc2 100644
--- a/jefs.fs
+++ b/jefs.fs
@@ -56,7 +56,6 @@ decimal
\ PNO
\ mostly from pforth
-
255 allot variable pad drop
variable hld
: <# pad hld ! ;
@@ -69,9 +68,20 @@ variable hld
: (u.) <# #s #> ;
: u. (u.) say space ;
: u.r >r (u.) r> over - spaces say ;
+
: (.) dup abs <# #s swap sign #> ;
: . (.) say space ;
: .r >r (.) r> over - spaces say ;
-\ TODO something is leaking its stack (a word address i think)
+: (.byte) hex <# # # #> decimal ;
+: .byte (.byte) say space ;
+: (.word) hex <# # # # # #> decimal ;
+: .word (.word) say space ;
+: (.dword) hex <# # # # # # # # # #> decimal ;
+: .dword (.dword) say space ;
+: (.qword) hex <# # # # # # # # # # # # # # # # # #> decimal ;
+: .qword (.qword) say space ;
+
+: .s sp 8 + ( skip sp itself ) begin dup s0 @ >= while dup @ .qword 8 + repeat drop cr ;
+
bye
diff --git a/jefs.s b/jefs.s
index da26f5e..c4dcbdf 100644
--- a/jefs.s
+++ b/jefs.s
@@ -1002,42 +1002,42 @@ 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 "HEREDUMP", heredump, 0
mov rdx, [here]
@@ -1055,6 +1055,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 "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