From d4dee597dc988fa5d5ae93f6c810a1078d8f93dd Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Mon, 8 Jan 2024 05:33:03 -0800 Subject: [PATCH] ENDSRC word to stop SRC input early --- images/apple/PLFORTH.PO | Bin 143360 -> 143360 bytes src/{mkrel => runrel} | 5 ++ src/scripts/bounce.4th | 32 +------- src/scripts/conio.4th | 2 + src/scripts/fileio.4th | 2 + src/scripts/fpu.4th | 2 + src/scripts/grlib.4th | 2 + src/scripts/hgrlib.4th | 2 + src/scripts/hrbounce.4th | 32 +------- src/scripts/int32.4th | 2 + src/scripts/plasma.4th | 3 +- src/scripts/rod.4th | 21 +----- src/toolsrc/plforth.pla | 158 +++++++++++++++++---------------------- 13 files changed, 96 insertions(+), 167 deletions(-) rename src/{mkrel => runrel} (99%) diff --git a/images/apple/PLFORTH.PO b/images/apple/PLFORTH.PO index da9a0eecb3c537ac52057c714360729c6dfab1c4..5f2f6cc8c33149aa5eec69daad285d3fc951a887 100755 GIT binary patch delta 9486 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 T-gV6g>3V(^G*Y_1ShoK+xj19{ delta 10323 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 Qd6VSPUtizrie&4519+nn&;S4c diff --git a/src/mkrel b/src/runrel similarity index 99% rename from src/mkrel rename to src/runrel index 5419115..78c4cce 100755 --- a/src/mkrel +++ b/src/runrel @@ -1,3 +1,5 @@ +make apple + cp rel/apple/CMD#061000 prodos/CMD.BIN cp rel/apple/CMD128#061000 prodos/CMD128.BIN cp rel/apple/PLASMA.SYSTEM#FF2000 prodos/PLASMA.SYSTEM.SYS @@ -286,3 +288,6 @@ cp inc/testlib.plh prodos/bld/inc/TESTLIB.PLH.TXT cp inc/grafix.plh prodos/bld/inc/GRAFIX.PLH.TXT cp inc/lz4.plh prodos/bld/inc/LZ4.PLH.TXT cp vmsrc/apple/plvmzp.inc prodos/bld/inc/PLVMZP.INC.TXT + +open /Applications/Virtual\ \]\[/Virtual\ \]\[.app/ + diff --git a/src/scripts/bounce.4th b/src/scripts/bounce.4th index 2d36b93..004a8b7 100644 --- a/src/scripts/bounce.4th +++ b/src/scripts/bounce.4th @@ -1,32 +1,6 @@ -: ?PLASMA - " IFACE" FIND - SWAP DROP - 0= IF - " PLASMA.4TH" SRC - THEN -; - -?PLASMA ( Load PLASMA if not already ) - -: ?CONIO - " CONIOAPI" FIND - SWAP DROP - 0= IF - " CONIO.4TH" SRC - THEN -; - -?CONIO ( Load CONIO if not already ) - -: ?GRLIB - " GRLIB" FIND - SWAP DROP - 0= IF - " GRLIB.4TH" SRC - THEN -; - -?GRLIB ( Load GRLIB if not already ) +SRC" PLASMA.4TH" +SRC" CONIO.4TH" +SRC" GRLIB.4TH" 5 VARIABLE BALLCLR 10 VARIABLE BALLX diff --git a/src/scripts/conio.4th b/src/scripts/conio.4th index ac88382..9bcc917 100644 --- a/src/scripts/conio.4th +++ b/src/scripts/conio.4th @@ -1,3 +1,5 @@ +' CONIOAPI ENDSRC ( Avoid multiple loads ) + ( LOADMOD" CONIO" CONIO is already available in plforth ) LOOKUP CONIO CONSTANT CONIOAPI diff --git a/src/scripts/fileio.4th b/src/scripts/fileio.4th index ee64a97..8dc89c4 100644 --- a/src/scripts/fileio.4th +++ b/src/scripts/fileio.4th @@ -1,3 +1,5 @@ +' FILEIOAPI ENDSRC ( Avoid multiple loads ) + ( LOADMOD" FILEIO" FILEIO is already available in plforth ) LOOKUP FILEIO CONSTANT FILEIOAPI diff --git a/src/scripts/fpu.4th b/src/scripts/fpu.4th index fdf939b..c25e307 100644 --- a/src/scripts/fpu.4th +++ b/src/scripts/fpu.4th @@ -1,3 +1,5 @@ +' FPULIB ENDSRC ( Avoid multipe loads ) + " SANE" LOADMOD" " " FPSTR" LOADMOD" " " FPU" LOADMOD" " diff --git a/src/scripts/grlib.4th b/src/scripts/grlib.4th index ce85fbd..af2326d 100644 --- a/src/scripts/grlib.4th +++ b/src/scripts/grlib.4th @@ -1,3 +1,5 @@ +' GRMODE ENDSRC ( Avoid multiple loads ) + " GRLIB" LOADMOD" " LOOKUP GRPLOT PLASMA GRPLOT diff --git a/src/scripts/hgrlib.4th b/src/scripts/hgrlib.4th index 3fe2bd1..f55d274 100644 --- a/src/scripts/hgrlib.4th +++ b/src/scripts/hgrlib.4th @@ -1,3 +1,5 @@ +' HGRMODE ENDSRC ( Avoid multiple loads ) + " HGRLIB" LOADMOD" " LOOKUP HGRPLOT PLASMA HGRPLOT diff --git a/src/scripts/hrbounce.4th b/src/scripts/hrbounce.4th index 37758ca..4edd9f8 100644 --- a/src/scripts/hrbounce.4th +++ b/src/scripts/hrbounce.4th @@ -2,35 +2,9 @@ LOOKUP HRFORTH ( HGR page 1 reserved ) LOOKUP HR2FORTH ( HGR page 1 and 2 reserved ) OR NOT ABORT" Must run with HRFORTH." -: ?PLASMA - " IFACE" FIND - SWAP DROP - 0= IF - " PLASMA.4TH" SRC - THEN -; - -?PLASMA ( Load PLASMA if not already ) - -: ?CONIO - " CONIOAPI" FIND - SWAP DROP - 0= IF - " CONIO.4TH" SRC - THEN -; - -?CONIO ( Load CONIO if not already ) - -: ?HGRLIB - " HGRLIB" FIND - SWAP DROP - 0= IF - " HGRLIB.4TH" SRC - THEN -; - -?HGRLIB ( Load GRLIB if not already ) +SRC" PLASMA.4TH" +SRC" CONIO.4TH" +SRC" HGRLIB.4TH" 5 VARIABLE BALLCLR 10 VARIABLE BALLX diff --git a/src/scripts/int32.4th b/src/scripts/int32.4th index bfdc6c9..663701a 100644 --- a/src/scripts/int32.4th +++ b/src/scripts/int32.4th @@ -1,3 +1,5 @@ +' DVAR ENDSRC ( Avoid multiple loads ) + " INT32" LOADMOD" " LOOKUP ZERO32 PLASMA ZERO32 ( -- ) diff --git a/src/scripts/plasma.4th b/src/scripts/plasma.4th index efd1b58..3731ea2 100644 --- a/src/scripts/plasma.4th +++ b/src/scripts/plasma.4th @@ -1,3 +1,5 @@ +' IFACE ENDSRC ( Avoid multiple loads ) + : IFACE 2 * + @ ; LOOKUP CMDSYS 0 IFACE CONSTANT PLASMAVER @@ -69,4 +71,3 @@ LOOKUP FILEIO 1 IFACE PLASMA SETPFX : PFX" 34 WORD SETPFX DROP ; -HERE FENCE \ No newline at end of file diff --git a/src/scripts/rod.4th b/src/scripts/rod.4th index cae9595..3d5c845 100644 --- a/src/scripts/rod.4th +++ b/src/scripts/rod.4th @@ -1,22 +1,5 @@ -: ?PLASMA - " IFACE" FIND - SWAP DROP - 0= IF - " PLASMA.4TH" SRC - THEN -; - -?PLASMA ( Load PLASMA if not already ) - -: ?CONIO - " CONIOAPI" FIND - SWAP DROP - 0= IF - " CONIO.4TH" SRC - THEN -; - -?CONIO ( Load CONIO if not already ) +SRC" PLASMA.4TH" +SRC" CONIO.4TH" 0 VARIABLE K 0 VARIABLE W diff --git a/src/toolsrc/plforth.pla b/src/toolsrc/plforth.pla index a69fc9c..252a462 100644 --- a/src/toolsrc/plforth.pla +++ b/src/toolsrc/plforth.pla @@ -19,7 +19,7 @@ word previnptr[SRCREFS] // Internal buffers // res[SRCREFS * INBUF_SIZE] inbuf -res[t_except] exit +res[t_except] exitforth // // RSTACK // @@ -111,15 +111,15 @@ predef _immediate_#0, _exit_#0, _pad_#1, _trailing_(a,b)#2 predef _tors_(a)#0, _fromrs_#1, _toprs_#1, _lookup_#1 predef _move_(a,b,c)#0, _fill_(a,b,c)#0, _plasma_(a)#0 predef _var_(a)#0, _const_(a)#0, _lit_#1, _slit_#1, _find_(a)#2, _tick_#1 -predef _fence_(a)#0, _forget_#0, _terminal_#1, _prat_(a)#0, _prhexat_(a)#0 +predef _forget_#0, _terminal_#1, _prat_(a)#0 predef _char_#0, _str_#0, _prstr_#0, _prpstr_#0 -predef _prval_(a)#0, _prbyte_(a)#0, _prshex_(a)#0, _prsbyte_(a)#0, _prhex_(a)#0 -predef _accept_(a,b)#1, _src_(a)#0, _srcstr_#0, _query_#0, _expect_(a,b)#0, _type_(a,b)#0 +predef _prval_(a)#0, _prbyte_(a)#0, _prhex_(a)#0 +predef _accept_(a,b)#1, _query_#0, _expect_(a,b)#0, _type_(a,b)#0 predef _vlist_#0, _tron_#0, _troff_#0, _stepon_#0, _stepoff_#0 -predef _itc_#0, _pbc_#0, _comment_#0 +predef _itc_#0, _pbc_#0, _comment_#0, _src_(a)#0, _srcstr_#0, _endsrc_(a)#0 predef _brk_#0, _brkon_#0, _brkoff_#0, _word_(a)#1, _count_(a)#2 predef _space_#0, _spaces_(a)#0, _show_#0, _showstack_#0, _showrstack_#0 -predef _showhash_#0, _cont_#0, _restart_#0, _bye_#0, _quit_#0 +predef _showhash_#0, _cont_#0, _exitforth_#0, _bye_#0, _quit_#0 predef _abort_(a)#0, _doabortstr_(a,b)#0, _abortstr_#0 predef compword(dentry)#0, execword(dentry)#0 // DROP @@ -422,22 +422,14 @@ word = @d_until, 0, @_while_ char d_repeat = "REPEAT" byte = imm_flag word = @d_while, 0, @_repeat_ -// FENCE -char d_fence = "FENCE" -byte = 0 -word = @d_repeat, 0, @_fence_ // FORGET char d_forget = "FORGET" byte = 0 -word = @d_fence, 0, @_forget_ +word = @d_repeat, 0, @_forget_ // CREATE char d_create = "CREATE" byte = 0 word = @d_forget, 0, @_create_ -// BUILDS ( same as CREATE ) -char d_builds = " 0 + srclevel-- + fileio:close(inref[srclevel]) // EOF + inref[srclevel] = 0 + inbufptr = inbufptr - INBUF_SIZE + inptr = previnptr[srclevel] + if srclevel == 0 // - switch back to keyboard input + infunc = @keyin + keyin + fin + fin + return srclevel == 0 +end def filein#0 byte len repeat @@ -742,15 +740,8 @@ def filein#0 ^(inbufptr + len) = 0 // NULL terminate inptr = inbufptr else - srclevel-- - fileio:close(inref[srclevel]) // EOF - inref[srclevel] = 0 - inbufptr = inbufptr - INBUF_SIZE - inptr = previnptr[srclevel] - if srclevel == 0 // - switch back to keyboard input - infunc = @keyin - keyin - return + if endsrc + return fin fin until len @@ -961,20 +952,15 @@ def warmstart#0 brk = 0 brkcfa = 0 RSP = RSTK_SIZE - infunc = @keyin - inptr = keyinbuf - ^inptr = 0 if state & comp_flag // Undo compilation state heaprelease(vlist) vlist = *_lfa_(vlist) - buildhashtbl fin state = 0 - while srclevel - srclevel-- - fileio:close(inref[srclevel]) - inref[srclevel] = 0 - loop + while !endsrc; loop + infunc = @keyin + inptr = keyinbuf + ^inptr = 0 end // // Cold start @@ -1019,10 +1005,20 @@ def compliteral(value)#0 pfillw(@d_lit) pfillw(value) // Poke literal value into dictionary else // comp_pbc_flag - if value >= 0 and value <= 15 - pfillb(value << 1) // CONSTANT NIBBLE - elsif value == -1 - pfillb($20) // CONSTANT MINUS_ONE + if value >= 0 and value <= 255 + if value <= 15 + pfillb(value << 1) // CONSTANT NIBBLE + else + pfillb($2A) // CONSTANT BYTE + pfillb(value) // Poke literal value into dictionary + fin + elsif value < 0 and value >= -256 + if value == -1 + pfillb($20) // CONSTANT MINUS_ONE + else + pfillb($5E) // CONSTANT NEGATIVE BYTE + pfillb(value) // Poke literal value into dictionary + fin else pfillb($2C) // CONSTANT WORD pfillw(value) // Poke literal value into dictionary @@ -1596,26 +1592,14 @@ end def _tick_#1 return find(nextword(' ')) end -def _fence_(a)#0 - if isult(a, startheap) - a = startheap - fin - fence = a -end def _forget_#0 word dentry dentry = find(nextword(' ')) if dentry - if isult(dentry, fence) - if isuge(vlist, fence) - repeat - dentry = vlist - vlist = *_lfa_(dentry) - until isult(vlist, fence) - else - return // Do nothing - fin + if isult(dentry, startheap) + vlist = @d_vlist + dentry = startheap else vlist = *_lfa_(dentry) fin @@ -1684,23 +1668,14 @@ def _prval_(a)#0 puti(a); putc(' ') end def _prbyte_(a)#0 - putb(a); putc(' ') -end -def _prhex_(a)#0 - puth(a); putc(' ') -end -def _prsbyte_(a)#0 putc('$'); putb(a); putc(' ') end -def _prshex_(a)#0 +def _prhex_(a)#0 putc('$'); puth(a); putc(' ') end def _prat_(a)#0 puti(*a); putc(' ') end -def _prhexat_(a)#0 - putc('$'); puth(*a); putc(' ') -end def _char_#0 word str byte len @@ -1830,6 +1805,11 @@ def _srcstr_#0 _src_(filename) fin end +def _endsrc_(a)#0 + if a + endsrc + fin +end def _show_#0 word dentry, pfa, w @@ -1971,7 +1951,7 @@ end // def _quit_#0 warmstart - throw(@exit, FALSE) + throw(@exitforth, FALSE) end // // Abort @@ -2000,20 +1980,20 @@ def _abortstr_#0 fin end // -// Restart +// exitforth // -def _restart_#0 +def _exitforth_#0 coldstart - throw(@exit, FALSE) + throw(@exitforth, FALSE) end // // Leave FORTH // def _bye_#0 - throw(@exit, TRUE) + throw(@exitforth, TRUE) end -puts("FORTH for PLASMA 2.1 WIP\n") +puts("FORTH WIP for PLASMA 2.1\n") if cmdsys:sysver < $0201 puts("PLASMA >= 2.01 required\n") return @@ -2024,7 +2004,7 @@ fileio:iobufalloc(4) // Allocate a bunch of file buffers startheap = heapmark coldstart inptr = argNext(argFirst) -if not except(@exit) +if not except(@exitforth) if ^inptr; inptr++; _srcstr_; fin interpret fin