summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jefs.fs16
-rw-r--r--jefs.s32
2 files changed, 15 insertions, 33 deletions
diff --git a/jefs.fs b/jefs.fs
index 9b073f7..c169242 100644
--- a/jefs.fs
+++ b/jefs.fs
@@ -1,6 +1,6 @@
: cell+ 8 + ;
: syswrite ( u c-addr fd -- n ) 1 syscall3 ;
-: say ( c-addr u -- ) swap 1 syswrite drop ;
+: say ( c-addr u -- ) swap 2 syswrite drop ;
: emit ( chr -- ) sp cell+ 1 swap 1 syswrite 2drop ;
: cr 10 emit ;
@@ -42,19 +42,19 @@ decimal
\ mostly from pforth
\ currently broken if unsigned number has more than 18 digits
\ unfortunately this also seems to include any negative number
+\ it continues reading words but a number literal causes a crash
variable hld
: <# dap hld ! ;
: hold 1 hld -! ( chr ) hld @ c! ;
: sign 0< if [ char - ] literal hold then ;
-: # base @ /mod swap 9 over > if 7 + then [ char 0 ] literal + hold ;
+: # base @ /mod swap 9 over > if 7 + then [ char 0 ] literal + hold ; \ issue is in here i think?
: #s begin # dup 0= until ;
: #> drop hld @ dap over - ;
-: ud. <# #s #> say space ;
+: ud. <# #s #> say ;
-: t ." testtest" cr ;
-: testing 0 if TESTSTR else TESTSTR2 then say cr ;
+: t ." testtesttesttest" cr ;
-1000000000000000000 999999999999999999 .s
-drop ud.
-testing bye
+bye
+\ 100000000000000000 ud. bye
+\ t testing bye
diff --git a/jefs.s b/jefs.s
index 0da6e44..ed8030d 100644
--- a/jefs.s
+++ b/jefs.s
@@ -244,11 +244,16 @@ defword "parse", parse, 0
defword "find", find, 0
pspop r10 ; u
pspop r11 ; c-addr
- mov r12, latest
- mov r13, qword [r12]
+ mov r13, qword [latest]
mov r12, r13
.check_smudge:
+ ; TODO fix whatever is going on with PNO and this
+ pspush r12
+ pspush r13
+ pspop r13
+ pspop r12
+
add r13, 8
mov r9b, byte [r13]
test r9b, smudge_mask
@@ -311,26 +316,21 @@ defword "interpret", interpret, 0
ret
.compile:
- ; call dots
pspop r11
cmp r11, false
je .comp_n
; handle immediates
- ; call dots
pspop r15
call twodrop
pspush r15
call dup
- ; call dots
call immediate_q
- ; call dots
pspop r13
cmp r13, true
je .immed_comp
call to_cfa
- ; call dots
call compile_comma
jmp .loop
ret ; unreachable safety RET
@@ -357,7 +357,6 @@ defword "immediate?", immediate_q, 0 ; ( lfa -- flag )
pspush r12
mov r13b, immediate_mask
pspush r13
- ; call dots
call twodrop
pspop r11
test r12b, immediate_mask
@@ -368,7 +367,6 @@ defword "immediate?", immediate_q, 0 ; ( lfa -- flag )
ret
.imm:
- ; call dots
mov r11, true
pspush r11
ret
@@ -1029,22 +1027,6 @@ defword ".s", dots, 0
.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]
mov r11, [h0]