Compare commits

...

9 Commits

Author SHA1 Message Date
dschmenk fa94f4c8d8 Break FORTH TFTP script 2024-01-08 16:41:56 -08:00
David Schmenk b3f6c7970a Further source cleanup and calling it an Alpha 2024-01-08 15:55:07 -08:00
dschmenk bc1cf8368d Get rid of EXPECT - ACCEPT does input better 2024-01-08 13:32:38 -08:00
dschmenk 7aed4d4d4a Fix ' (tick) thatI broke 2024-01-08 13:04:10 -08:00
dschmenk d9d57f383d Fix ' (tick) that I broke 2024-01-08 13:02:50 -08:00
David Schmenk 3424b085cf Added ?NUM word to convert string to number 2024-01-08 12:42:13 -08:00
David Schmenk eefd9ba2dd Can't put test for componly in execword 2024-01-08 11:37:25 -08:00
David Schmenk 9587423c46 End SRCing file input early 2024-01-08 11:28:09 -08:00
David Schmenk d4dee597dc ENDSRC word to stop SRC input early 2024-01-08 05:33:03 -08:00
17 changed files with 376 additions and 506 deletions

View File

@ -53,16 +53,24 @@ While running code, `<CTRL-C>` will break out and return to the interpreter.
`PLASMA zzzz`: Create word `zzzz` with code address from `LOOKUP`
### Word to run a script:
### Words to run a script:
`SRC`: Source filename on stack as input. Can be nested
`SRC" ssss"`: Source file `ssss` as input. Can be nested
### Word for compiler modes:
`ENDSRC`: End sourcing file as input if stack flag non-zero
### Words for compiler modes:
`PBC`: Compile into PLASMA Byte Code
`ITC`: Compile into Indirect Threaded Code
### Word for converting string to number:
`?NUM`: Convert string and length to number, returning number and valid flag
## Debugging vs Performance
PLFORTH defaults to compiling using ITC (Indirect Threaded Code). This supports a list of inspection and debugging features while developing programs and scripts. However, the compiler can easily switch to PBC (PLASMA Byte Code) to greatly improve performance, but most of the debugging tools are lost. ITC compiled words and PBC compiled words can be intermingled and call each other seemlessly. PLASMA Byte Code is a direct match to many low-level FORTH constructs.

Binary file not shown.

View File

@ -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/

View File

@ -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

View File

@ -1,3 +1,5 @@
' CONIOAPI ENDSRC ( Avoid multiple loads )
( LOADMOD" CONIO" CONIO is already available in plforth )
LOOKUP CONIO CONSTANT CONIOAPI

View File

@ -1,3 +1,5 @@
' FILEIOAPI ENDSRC ( Avoid multiple loads )
( LOADMOD" FILEIO" FILEIO is already available in plforth )
LOOKUP FILEIO CONSTANT FILEIOAPI

View File

@ -1,3 +1,5 @@
' FPULIB ENDSRC ( Avoid multipe loads )
" SANE" LOADMOD" "
" FPSTR" LOADMOD" "
" FPU" LOADMOD" "

View File

@ -1,3 +1,5 @@
' GRMODE ENDSRC ( Avoid multiple loads )
" GRLIB" LOADMOD" "
LOOKUP GRPLOT PLASMA GRPLOT

View File

@ -1,3 +1,5 @@
' HGRMODE ENDSRC ( Avoid multiple loads )
" HGRLIB" LOADMOD" "
LOOKUP HGRPLOT PLASMA HGRPLOT

View File

@ -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

View File

@ -1,3 +1,5 @@
' DVAR ENDSRC ( Avoid multiple loads )
" INT32" LOADMOD" "
LOOKUP ZERO32 PLASMA ZERO32 ( -- )

View File

@ -1,72 +1,29 @@
' IFACE ENDSRC ( Avoid multiple loads )
: IFACE 2 * + @ ;
LOOKUP CMDSYS 0 IFACE CONSTANT PLASMAVER
LOOKUP CMDSYS 2 IFACE CONSTANT CMDLINE
LOOKUP CMDSYS 3 IFACE PLASMA EXECMOD
LOOKUP STRCPY PLASMA STRCPY
LOOKUP STRCAT PLASMA STRCAT
LOOKUP TOUPPER PLASMA TOUPPER
LOOKUP HEAPAVAIL PLASMA FREEMEM
: PLASMAVER.
PLASMAVER 12 RSHIFT $0F AND CHAR 0 + EMIT
PLASMAVER 8 RSHIFT $0F AND CHAR 0 + EMIT
CHAR . EMIT
PLASMAVER 4 RSHIFT $0F AND CHAR 0 + EMIT
PLASMAVER $0F AND CHAR 0 + EMIT
;
: LOADMOD ( modulename paramstr -- )
CMDLINE " . " STRCPY DROP ( Dummy parameter for module name )
CMDLINE SWAP STRCAT DROP
EXECMOD 0< ABORT" Failed to load module"
;
CMDLINE " . " STRCPY DROP ( Module name )
CMDLINE SWAP STRCAT DROP ( Parameter string )
EXECMOD 0< ABORT" Failed to load module" ;
: LOADMOD" ( modulename -- )
PAD SWAP STRCPY ( Move module name out of the way in case its immediate )
34 WORD ( Build a string from input )
LOADMOD
;
: EDIT
" ED" " " LOADMOD
;
: EDIT"
" ED" LOADMOD"
;
: CAT
" CAT" " " LOADMOD
;
: CAT"
" CAT" LOADMOD"
;
: DEL"
" DEL" LOADMOD"
;
: REN"
" REN" LOADMOD"
;
: COPY"
" COPY" LOADMOD"
;
: NEWDIR"
" NEWDIR" LOADMOD"
;
CHAR " WORD ( Build a string from input )
LOADMOD ;
: EDIT " ED" " " LOADMOD ;
: EDIT" " ED" LOADMOD" ;
: CAT " CAT" " " LOADMOD ;
: CAT" " CAT" LOADMOD" ;
: DEL" " DEL" LOADMOD" ;
: REN" " REN" LOADMOD" ;
: COPY" " COPY" LOADMOD" ;
: NEWDIR" " NEWDIR" LOADMOD" ;
LOOKUP FILEIO 0 IFACE PLASMA GETPFX
LOOKUP FILEIO 1 IFACE PLASMA SETPFX
: PFX.
HERE GETPFX DROP HERE (.")
;
: PFX"
34 WORD SETPFX DROP
;
HERE FENCE
: PFX. HERE GETPFX DROP HERE (.") ;
: PFX" 34 WORD SETPFX DROP ;

View File

@ -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

18
src/tftp4th Executable file
View File

@ -0,0 +1,18 @@
#!/bin/bash
# FORTH and scripts
echo "SYS/PLFORTH"; atftp --option "disable windowsize" $1 --put -l rel/PLFORTH#FE1000 -r $2/SYS/PLFORTH#FE1000
echo "SYS/HRFORTH"; atftp --option "disable windowsize" $1 --put -l rel/HRFORTH#FE1000 -r $2/SYS/HRFORTH#FE1000
echo "SYS/HR2FORTH"; atftp --option "disable windowsize" $1 --put -l rel/HR2FORTH#FE1000 -r $2/SYS/HR2FORTH#FE1000
echo "SCRIPTS/CONIO.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/conio.4th -r $2/SYS/SCRIPTS/CONIO.4TH#040000
echo "SCRIPTS/FILEIO.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/fileio.4th -r $2/SYS/SCRIPTS/FILEIO.4TH#040000
echo "SCRIPTS/FPU.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/fpu.4th -r $2/SYS/SCRIPTS/FPU.4TH#040000
echo "SCRIPTS/GRLIB.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/grlib.4th -r $2/SYS/SCRIPTS/GRLIB.4TH#040000
echo "SCRIPTS/HGRLIB.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/hgrlib.4th -r $2/SYS/SCRIPTS/HGRLIB.4TH#040000
echo "SCRIPTS/INT32.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/int32.4th -r $2/SYS/SCRIPTS/INT32.4TH#040000
echo "SCRIPTS/PLASMA.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/plasma.4th -r $2/SYS/SCRIPTS/PLASMA.4TH#040000
# Sample scripts
echo "SCRIPTS/BOUNCE.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/bounce.4th -r $2/SCRIPTS/BOUNCE.4TH#040000
echo "SCRIPTS/HRBOUNCE.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/hrbounce.4th -r $2/SCRIPTS/HRBOUNCE.4TH#040000
echo "SCRIPTS/ROD.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/rod.4th -r $2/SCRIPTS/ROD.4TH#040000

View File

@ -58,16 +58,4 @@ echo "BLD/SAMPLES/LZ4CAT.PLA"; atftp --option "disable windowsize" $1 --put -
echo "BLD/SAMPLES/SFM.PLA"; atftp --option "disable windowsize" $1 --put -l samplesrc/sfm.pla -r $2/BLD/SAMPLES/SFM.PLA#040000
echo "BLD/SAMPLES/SFMSPRT.PLA"; atftp --option "disable windowsize" $1 --put -l samplesrc/sfmsprt.pla -r $2/BLD/SAMPLES/SFMSPRT.PLA#040000
echo "BLD/SAMPLES/FPPOW.PLA"; atftp --option "disable windowsize" $1 --put -l samplesrc/fppow.pla -r $2/BLD/SAMPLES/FPPOW.PLA#040000
echo "BLD/SAMPLES/MON.PLA"; atftp --option "disable windowsize" $1 --put -l utilsrc/apple/mon.pla -r $2/BLD/SAMPLES/MON.PLA#040000
# Scripts
echo "SCRIPTS/BOUNCE.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/bounce.4th -r $2/SCRIPTS/BOUNCE.4TH#040000
echo "SCRIPTS/HRBOUNCE.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/hrbounce.4th -r $2/SCRIPTS/HRBOUNCE.4TH#040000
echo "SCRIPTS/CONIO.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/conio.4th -r $2/SCRIPTS/CONIO.4TH#040000
echo "SCRIPTS/FILEIO.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/fileio.4th -r $2/SCRIPTS/FILEIO.4TH#040000
echo "SCRIPTS/FPU.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/fpu.4th -r $2/SCRIPTS/FPU.4TH#040000
echo "SCRIPTS/GRLIB.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/grlib.4th -r $2/SCRIPTS/GRLIB.4TH#040000
echo "SCRIPTS/HGRLIB.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/hgrlib.4th -r $2/SCRIPTS/HGRLIB.4TH#040000
echo "SCRIPTS/INT32.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/int32.4th -r $2/SCRIPTS/INT32.4TH#040000
echo "SCRIPTS/ROD.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/rod.4th -r $2/SCRIPTS/ROD.4TH#040000
echo "SCRIPTS/PLASMA.4TH"; atftp --option "disable windowsize" $1 --put -l scripts/plasma.4th -r $2/SCRIPTS/PLASMA.4TH#040000
echo "BLD/SAMPLES/MON.PLA"; atftp --option "disable windowsize" $1 --put -l utilsrc/apple/mon.pla -r $2/BLD/SAMPLES/MON.PLA#040000

View File

@ -36,7 +36,3 @@ echo "SYS/SNDSEQ"; atftp --option "disable windowsize" $1 --put -l rel/apple/S
echo "SYS/PORTIO"; atftp --option "disable windowsize" $1 --put -l rel/apple/PORTIO#FE1000 -r $2/SYS/PORTIO#FE1000
echo "SYS/UTHERNET2";atftp --option "disable windowsize" $1 --put -l rel/apple/UTHERNET2#FE1000 -r $2/SYS/UTHERNET2#FE1000
echo "SYS/UTHERNET"; atftp --option "disable windowsize" $1 --put -l rel/apple/UTHERNET#FE1000 -r $2/SYS/UTHERNET#FE1000
echo "SYS/PLFORTH"; atftp --option "disable windowsize" $1 --put -l rel/PLFORTH#FE1000 -r $2/SYS/PLFORTH#FE1000
echo "SYS/HRFORTH"; atftp --option "disable windowsize" $1 --put -l rel/HRFORTH#FE1000 -r $2/SYS/HRFORTH#FE1000
echo "SYS/HR2FORTH"; atftp --option "disable windowsize" $1 --put -l rel/HR2FORTH#FE1000 -r $2/SYS/HR2FORTH#FE1000

File diff suppressed because it is too large Load Diff