From 36066a6f939b03c7c7375d6fd0941dae1bfaf0df Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Sat, 9 Sep 2023 14:08:36 -0400 Subject: [PATCH] bugfixes and cleanup; use tinyjort to bootstrap itself! --- asm.jrt | 2 -- build.bat | 2 +- debug.jrt | 3 --- jort.com | Bin 4244 -> 4312 bytes tinyjort.com | Bin 4244 -> 4312 bytes tinyjort.jrt | 57 +++++++++++++++++++++++++++++++-------------------- 6 files changed, 36 insertions(+), 28 deletions(-) delete mode 100755 debug.jrt diff --git a/asm.jrt b/asm.jrt index b0f5b1f..229e564 100755 --- a/asm.jrt +++ b/asm.jrt @@ -56,7 +56,6 @@ array oparg2 3 cells allot target @ >r encode-op short-jmp* ; 1 :op JCXZ 0xe3 >short-jmp* ; 1 :op JMP - dbg" JMP!" 0xe9 >near-reljmp* 0xeb >short-jmp* 0xea >far-jmp* diff --git a/build.bat b/build.bat index 1e0a872..e9fa757 100755 --- a/build.bat +++ b/build.bat @@ -1,2 +1,2 @@ -minijort < tinyjort.jrt +jort.com < tinyjort.jrt copy tinyjort.com jort.com diff --git a/debug.jrt b/debug.jrt deleted file mode 100755 index b3000f2..0000000 --- a/debug.jrt +++ /dev/null @@ -1,3 +0,0 @@ -s" defs.jrt" loadfile -dbg" debugging!" - diff --git a/jort.com b/jort.com index 5075528a770e37de760cbe6b2f6622a0bfeef7f7..8d5ea91c4005e8f73d5361c07833627b38681728 100755 GIT binary patch literal 4312 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 literal 4244 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 RcrmAX)u(_x4c2G=zW{~Ty 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 literal 4244 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 RcrmAX)u(_x4c2G=zW{~T -dbg" first jmp" +JMP 9 @> + : NEXT LODSW MOV BX AX @@ -42,7 +42,7 @@ L: LATEST 0 w>t 0x0f const BUCKETMASK : savelabel ( word -- ) - dup type s" : " type + ( dup type s" : " type ) here swap begin dup b@ dup while b, 1+ repeat b, drop lastlabel ! ; : DICTLIST ( word -- tptr ) b@ BUCKETMASK & cells [ L@ DICTIONARY lit ] + ; : strlen ( word -- len ) 0 swap begin dup b@ while swap 1+ swap 1+ repeat drop ; @@ -52,7 +52,7 @@ L: LATEST 0 w>t : link>t ( tptr-head -- ) dup @t swap patch!t w>t ; : DEF target @ [ L@ LATEST lit ] !t word dup savelabel dup DICTLIST link>t dup strlen w>t str>t - target @ cell + .hex cr ; + ( target @ cell + .hex cr ) ; : WORD= ( word len tptr -- f ) cell + dup b@t t t' w>t ; @@ -523,10 +526,9 @@ dbg" i/o" -1 CONST EOF 0 VAR, fbuffer -: skip>t 1+ cells target @ + w>t ; :t fgetc ( fp -- c ) 1 fbuffer t ] drop EOF ; + fcount @ not BZ_ [ patchpt ] drop EOF [ patch!t ] ; :t fputc ( c fp -- ) swap fbuffer b! 1 fbuffer t ] return drop + buf-key dup BZ_ [ patchpt ] return [ patch!t ] drop ( if buffer is empty, refresh from file ) INBUFSIZE inbuf 0 fread ( if there's any more data, start returning it ) @@ -728,7 +730,7 @@ L: write-next-digit 0 [ target @ ] drop key dup whitespace? not BZ_ [ w>t ] ( consume non-whitespace / eoi characters ) [ target @ ] dup whitespace? over eoi? or - ( if whitespace or eoi, end ) BZ_ [ 5 skip>t ] drop 0 b, return + ( if whitespace or eoi, end ) BZ_ [ patchpt ] drop 0 b, return [ patch!t ] ( otherwise, write byte and continue ) b, key GOTO_ [ w>t ] ; ARRAY wordbuf 48 ALLOT :t redir-, ( cp buf -- buf ) here >r dup >r here! execute t ] - 2inc GOTO_ [ w>t ] drop ; + 0 swap [ target @ ] dup b@ BZ_ [ patchpt ] + 2inc GOTO_ [ swap w>t patch!t ] drop ; :ASM dict-lookup ( name dict -- cp meta | name 0 ) MOV AX DS @@ -828,13 +830,31 @@ L: check-next-entry :t ?err ( word -- ) type LIT_ [ key ? w>t ] emit cr ; DEFERRED err ?err +:ASM sp+ss + PUSH SP + PUSH SS + NEXT + +:ASM underflow? + CMP SP 0x100 # + JLE 0 @> + MOV SP 0x100 # + PUSH TRUE + NEXT +0 <: + PUSH FALSE + NEXT + +:t checkstack underflow? BZ_ [ patchpt ] + INLINEDATA_ [ patchpt t" underflow!" patch!t ] type cr [ patch!t ] ; :t compileword ( word -- ) lookup dup BZ_ [ patchpt ] interpretword return [ patch!t ] drop number BZ_ [ patchpt ] interpretnumber return [ patch!t ] err ; :t interpreter - [ target @ ] word dup b@ BZ_ [ patchpt ] compileword GOTO_ [ swap w>t ] - [ patch!t ] drop ; + [ target @ ] noop ( f28 ) word noop ( f2c ) dup b@ BZ_ + [ patchpt ] noop ( f36 ) compileword checkstack + GOTO_ [ swap w>t patch!t ] noop ( f40 ) drop ; dbg" flow control words and misc." :t if LIT_ BZ_ , here 0 , ; IMMEDIATE @@ -857,7 +877,7 @@ dbg" flow control words and misc." :t |; LIT_ return , |inline ; IMMEDIATE :t s", [ target @ ] key dup LIT_ [ key " w>t ] != over 0 != and - BZ_ [ 3 skip>t ] b, GOTO_ [ w>t ] + BZ_ [ patchpt ] b, GOTO_ [ swap w>t patch!t ] drop 0 b, ; :t s" state BZ_ [ patchpt ] inline| s", |inline return [ patch!t ] LIT_ s", tmp-, ; IMMEDIATE @@ -871,22 +891,15 @@ dbg" flow control words and misc." r 0x100 [ target @ ] 2 - dup r@ < BZ_ - ( past top of stack ) [ 4 skip>t ] drop drop rdrop return + ( past top of stack ) [ patchpt ] drop drop rdrop return [ patch!t ] 2dup swap @far . GOTO_ [ w>t ] ; dbg" boot stub" -:ASM debug NEXT :t tinyjort interpreter terminate ; 9 <: ( actual entry point )