From d4dee597dc988fa5d5ae93f6c810a1078d8f93dd Mon Sep 17 00:00:00 2001 From: David Schmenk <dschmenk@gmail.com> 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 = "<BUILDS" -byte = 0 -word = @d_create, 0, @_create_ // RECREATE/DOES COMPILE TIME ( not in vocabulary ) char d_createdoes = "(CREATEDOES)" byte = componly_flag @@ -445,7 +437,7 @@ word = 0, 0, @_itcdoes_ // DOES char d_does = "DOES>" byte = imm_flag -word = @d_builds, 0, @_does_ +word = @d_create, 0, @_does_ // COMMA char d_comma = "," byte = 0 @@ -542,14 +534,10 @@ word = @d_word, 0, @_trailing_ char d_prat = "?" byte = 0 word = @d_trailing, 0, @_prat_ -// PRINT HEX @TOS -char d_prhexat = "$?" -byte = 0 -word = @d_prat, 0, @_prhexat_ // PRINT TOS char d_prtos = "." byte = 0 -word = @d_prhexat, 0, @_prval_ +word = @d_prat, 0, @_prval_ // PRINT TOS HEX char d_prtoshex = "$." byte = 0 @@ -558,18 +546,10 @@ word = @d_prtos, 0, @_prhex_ char d_prtosbyte = "C$." byte = 0 word = @d_prtoshex, 0, @_prbyte_ -// PRINT TOS $HEX -char d_prtosshex = "$$." -byte = 0 -word = @d_prtosbyte, 0, @_prshex_ -// PRINT TOS SHEX BYTE -char d_prtossbyte = "CS$." -byte = 0 -word = @d_prtosshex, 0, @_prsbyte_ // EMIT char d_emit = "EMIT" byte = 0 -word = @d_prtossbyte, 0, @putc +word = @d_prtosbyte, 0, @putc // CR char d_cr = "CR" byte = 0 @@ -618,10 +598,14 @@ word = @d_prpstr, 0, @_src_ char d_srcstr = "SRC\"" byte = 0 word = @d_src, 0, @_srcstr_ +// END SOURCE FILE +char d_endsrc = "ENDSRC" +byte = 0 +word = @d_srcstr, 0, @_endsrc_ // CONTINUE AFTER BRK char d_cont = "CONT" byte = 0 -word = @d_srcstr, 0, @_cont_ +word = @d_endsrc, 0, @_cont_ // QUIT char d_quit = "QUIT" byte = 0 @@ -638,14 +622,14 @@ word = @d_abort, 0, @_doabortstr_ char d_abortstr = "ABORT\"" byte = imm_flag word = @d_doabortstr, 0, @_abortstr_ -// COLD RESTART -char d_restart = "COLD" +// COLD exitforth +char d_exitforth = "COLD" byte = 0 -word = @d_abortstr, 0, @_restart_ +word = @d_abortstr, 0, @_exitforth_ // COMMENT char d_comment = "(" byte = imm_flag -word = @d_restart, 0, @_comment_ +word = @d_exitforth, 0, @_comment_ // // PLFORTH custom words @@ -731,6 +715,20 @@ def keyin#0 ^(inptr + ^inptr + 1) = 0 // NULL terminate inptr++ end +def endsrc#1 + if srclevel > 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