Accessing Sprta DOS from XForth#
Source Library SPARTA.F#
This is a library of the Basic Sparta DOS Access Routines
- ?SPARTA Tests if this is Sparta DOS
- COMTAB Returns the Address of the COMTAB Datastructure
- BUFOFF Returns the Address of the BUFOFF (Buffer Offset) Pointer
- ZCRNAME get the next Filename/Parameter from the commandlinebuffer to acces by FNAME or PARM
- GETPARM internal Routine, should not be used directly
- FNAME returns Address and Length of the current Parameter as a Filename (with Dx:)
- PARM returns Address and Length of the current Parameter (without Dx:)
- RESETBUF reset the Buffer Pointer to zero, to restart reading of commandline
- PARAMS returns the number of commandline parameters
- (TIME) internal routine to access time structure
- HOUR get the current hour after call to VDTIME
- MINUTE get the current minute after call to VDTIME
- SECOND get the current second after call to VDTIME
( Sparta DOS routines )
: ?SPARTA ( -- f )
( returns 1 if this is Sparta DOS )
HEX 700 DECIMAL C@ 83 = ;
: COMTAB ( -- addr )
( gets CPMTAB base address )
10 @ ;
: BUFOFF ( -- addr )
( adress of bufferoffset )
COMTAB 10 + ;
: ZCRNAME ( -- )
( gets next cmd-line parm to COMFNAME )
COMTAB 3 + CALL DROP ;
: GETPARM ( addr -- addr n )
( gets current parameter, needs address )
DUP DUP DUP 28 + SWAP
DO
I C@ 155 =
IF I LEAVE THEN
LOOP SWAP - ;
: FNAME ( -- addr n )
( get next param as filename )
COMTAB 33 + GETPARM ;
: PARM ( -- addr n )
( get next param without Dx: )
COMTAB 36 + GETPARM ;
: RESETBUF ( -- )
( Resets buffer offset )
0 BUFOFF C! ZCRNAME ;
: PARAMS ( -- n )
( number of parameters on the cmd-line )
RESETBUF
0 BEGIN
ZCRNAME PARM SWAP DROP
DUP IF
SWAP 1+ SWAP
THEN
0= UNTIL
RESETBUF ;
: (TIME) ( n -- time )
( internal routine to access time )
COMTAB + C@ ;
: HOUR ( -- hh )
( get the current hour )
16 (TIME) ;
: MINUTE ( -- mm )
( get the current minute )
17 (TIME) ;
: SECOND ( -- ss )
( get the current seconds )
18 (TIME) ;
CR ." Sparta DOS Extensions loaded..." CR
XFORTH Extension LAUNCH#
This can be used to create a new FORTH with is able to start a FORTH Sourcefile from the Sparta-DOS commandline.
_Example_ ==D1:XFORTHS PARAM.F P1 P2 P3==
( LAUNCH FORTH Source from Sparta DOS )
( Command line )
: LAUNCH ( -- )
PARAMS ( do we have cmdline params? )
IF ( yes )
CR ZCRNAME ( get next filename )
FNAME INCLUDED ( and include )
ELSE
QUIT ( jump to interpreter )
THEN ;
Testscript for the Sparta DOS Extension (PARAM.F)#
This little test script prints the commandline contents. This also shows how to use the commands.
_Usage:_ XFORTHS PARAM.F test1 test2 test3
: SPARTA-TEST PARAMS IF ." PROGRAMM: " FNAME TYPE CR PARAMS . ." Commandline Parameter(s)" CR PARAMS 1+ 1 DO ZCRNAME I . ." PARAM: " PARM TYPE CR LOOP ELSE ." NO PARAMETER" CR THEN ; CR SPARTA-TEST MON
Script to save a new FORTH with Sparta DOS Extensions#
This Script saves the current FORTH image on memory to disk.
To have an extended FORTH follow these steps:
1 start XFORTH 2 INCLUDE" D1:SPARTA.F" -- includes the Sparta DOS Extensions 3 INCLUDE" D1:LAUNCH.F" -- includes the Launch feature 4 INCLUDE" D1:MKFRTH.F" -- saves the new FORTH as "XFORTHS.COM"
( MAKEFORTH Script )
( 2001-2003 CAS )
( for X-FORTH 1.x )
( and Sparta DOS )
BASE @ ( SAVE BASE )
HEX ( switch to Hexadecimal)
CR CR CR ( print message )
CR ." MAKEFORTH 1.0 "
CR ." ------------- "
CR ." Save current FORTH as "
CR ." XFORTHS.COM"
CR
( Set Last word as init word )
LATEST PFA CFA ABORTINIT !
( Calculate FORTH Memory )
CR ." Forth MemLow " 0 +ORIGIN .
CR ." Last Command and MemHigh "
LATEST DUP .
C +ORIGIN !
HERE ." -> " .
HERE DUP 1C +ORIGIN !
1E +ORIGIN !
( change Filename here )
FILE" D:XFORTHS.COM" W/O OPEN-FILE
CR ." File Open RC=" .
( create ATARi COM Fileheader )
FFFF 0600 !
02E0 0602 !
02E1 0604 !
0 +ORIGIN DUP 0606 ! 0608 !
1E +ORIGIN @ 1 - 060A !
DUP ( Save fileid)
0600 SWAP
CR ." Write Header RC="
0C SWAP WRITE-FILE .
DUP
0 +ORIGIN SWAP
1E +ORIGIN @ 0 +ORIGIN - SWAP
CR ." Write Forth RC="
WRITE-FILE .
CR ." Close File RC="
CLOSE-FILE .
CR ." Forth saved! "
CR
BASE ! ( restore BASE )