diff options
| -rw-r--r-- | jefs.fs | 16 | ||||
| -rw-r--r-- | jefs.s | 32 |
2 files changed, 15 insertions, 33 deletions
@@ -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 @@ -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] |
