871 lines
26 KiB
Plaintext
871 lines
26 KiB
Plaintext
|
||
|
||
*======================================
|
||
* THE MON AND NOMON COMMAND HANDLERS.
|
||
*======================================
|
||
|
||
* NOTE: THE MON & NOMON COMMANDS AND
|
||
* THEIR ALPHABETIC ARGUMENTS (C,I,O)
|
||
* ARE FIRST DETECTED VIA COMMAND
|
||
* PARSING. CIOCUMUL IS TESTED AT THE
|
||
* DSPLYCHR ($9F9F) PORTION OF THE VIDEO
|
||
* PARSING ROUTINE TO SEE IF A CHAR
|
||
* SHOULD BE SENT TO THE SCREEN OR
|
||
* NOT. IT IS EASY TO BECOME CONFUSED
|
||
* OVER THE DISTINCTION BETWEEN
|
||
* CIOCUMUL AND MONPRSD. THE FORMER
|
||
* REPRESENTS THE CUMMULATIVE UPDATED
|
||
* RECORD OF THE C, I, O ARGUMENTS
|
||
* WHEREAS THE LATER DESCRIBES THE
|
||
* MOST RECENT ADDITIONS OF THE
|
||
* C, I, O ARGUMENTS PRESENT IN THE
|
||
* TABLE OF PARSED VALUES.
|
||
* THE ALPHABETIC ARUMENTS (C, I, O)
|
||
* ARE REPRESENTED BY THE FOLLOWING
|
||
* SPECIFIC BITS:
|
||
* C = $40 = %01000000
|
||
* I = $20 = %00100000
|
||
* O = $10 = %00010000
|
||
* COMBINATION OF ARGUMENTS ARE SIMPLY
|
||
* DESCRIBED BY THE APPROPRIATE BIT
|
||
* SETTINGS: EX. CIO = $70 = $01110000
|
||
|
||
CMDMON LDA CIOCUMUL ;GET PREV CUMMULATIVE RECORD AND
|
||
ORA MONPRSD ;MERGE WITH THE LATEST PARSED VAL
|
||
STA CIOCUMUL ;TO UPDATE CUMMULATIVE RECORD.
|
||
RTS ;RTN 2 THE CALLER OF THE MON CMD.
|
||
;(OFTEN RETURNS 2 AFTRCMD ($A17D)
|
||
;ASSOCIATED WITH THE COMMAND
|
||
;PARSING & PROCESSING ROUTINES.)
|
||
|
||
CMDNOMON BIT MONPRSD ;TEST BIT6 IN PARSED TBL TO SEE IF
|
||
;"NOMON C" IS SELECTED.
|
||
BVC CLRMON ;BRANCH IF "C" NOT INCLUDED.
|
||
JSR CRVIADOS ;"C" WAS INCLUDED, SO PRT <CR>
|
||
;CAUSE CMD (BUT NOT <CR>) WAS
|
||
;ALREADY PRINTED.
|
||
|
||
CLRMON LDA #%01110000 ;SHUT OFF BITS IN PARSED TABLE
|
||
EOR MONPRSD ;THAT CORRESPOND 2 THE ALPHABETIC
|
||
;ARGUMENTS ISSUED WITH NOMON CMD.
|
||
AND CIOCUMUL ;NOW MAKE SURE THAT THOSE BITS
|
||
STA CIOCUMUL ;ARE OFF IN CUMMULATIVE RECORD.
|
||
RTS ;RTN TO CALLER OF THE NOMON CMD.
|
||
;(OFTEN RETURNS 2 AFTRCMD ($A17D)
|
||
;ASSOCIATED WITH THE COMMAND
|
||
;PARSING & PROCESSING ROUTINES.)
|
||
|
||
|
||
*==================================
|
||
* THE MAXFILES COMMAND HANDLER.
|
||
*==================================
|
||
|
||
* THE MAXFILES COMMAND IS USED TO
|
||
* DEFINE THE # OF FILES THAT MAY
|
||
* BE OPENED AT ONE TIME (IE. 1-16).
|
||
* A DEFAULT VALUE OF 3 IS USED FOR
|
||
* COLDSTARTS (IE, WHEN THE DISK IS
|
||
* BOOTED) OR WHEN THE FP OR INT
|
||
* COMMANDS ARE ISSUED. THIS VALUE
|
||
* CAN BE CHANGED BY ALTERING THE
|
||
* CONTENTS OF $AAB1. (THE MAXFILES
|
||
* CMD CAN BE TRICKED INTO BUILDING
|
||
* ITS BUFFERS AT A LOWER LOCATION
|
||
* IN ORDER TO CREATE A SANCTUARY
|
||
* WHERE CUSTOM MACHINE LANGUAGE
|
||
* ROUTINES CAN'T BE OVERWRITTEN BY
|
||
* BASIC. SEE FORMATTED DIS'MBLY
|
||
* OF MAXFILES CMD FOR DETAILS.)
|
||
|
||
CMDMXFIL LDA #0 ;SHUT OFF THE EXEC FLG.
|
||
STA EXECFLAG
|
||
LDA A5L ;GET ARGUMENT ISSUED WITH CMD AND
|
||
PHA ;SAVE IT ON THE STK.
|
||
;NOTE: ARGUMENT WAS PREVIOUSLY
|
||
;SCREENED TO INSURE THAT IS IS
|
||
;BTWN 1 AND 16 ($A0AA - $A0C7).
|
||
JSR CLOSEALL ;CLOSE ALL OPEN FILES.
|
||
PLA ;RETRIEVE ARGUEMENT ISSUED WITH
|
||
STA MXFILVAL ;CMD & STORE IT IN THE MAIN
|
||
;VARIABLES TABLE.
|
||
JMP BILDBUFS ;GO BUILD MXFILVAL # OF DOS BUFS.
|
||
;RTNS 2 CALLER OF MAXFILES CMD.
|
||
;(OFTEN RETURNS 2 AFTRCMD ($A17D)
|
||
;ASSOCIATED WITH THE COMMAND
|
||
;PARSING & PROCESSING ROUTINES.)
|
||
|
||
|
||
*=================================
|
||
* THE DELETE COMMAND HANDLER.
|
||
*=================================
|
||
|
||
CMDELETE LDA #5 ;OPCODE FOR DELETE.
|
||
JSR HNDLCMD1 ;CLOSE THE FILE & RLEASE ITS BUF.
|
||
;REASSIGN A DOS BUF TO THE FILE.
|
||
;CHNG FILE DESCRP IN DIR SEC BUF.
|
||
;WRITE UPDATED DIR SEC BUF 2 DSK.
|
||
;FREE UP DATA & T/S LIST SECTORS.
|
||
;WRITE UPDATED VTOC TO DISK.
|
||
JSR GETBUFF ;FIND REASSIGNED DOS BUF.
|
||
LDY #0 ;FREE UP DOS BUF OF FILE BY
|
||
TYA ;STORING A $00 IN 1RST BYTE OF
|
||
STA (A3L),Y ;THE DOS FILE NAME BUFFER.
|
||
RTS ;EXIT 2 CALLER OF THE DELETE CMD.
|
||
;(OFTEN RETURNS 2 AFTRCMD ($A17D)
|
||
;ASSOCIATED WITH THE COMMAND
|
||
;PARSING & PROCESSING ROUTINES.)
|
||
|
||
|
||
*==================================
|
||
* THE LOCK AND UNLOCK CMD HANDLERS.
|
||
*==================================
|
||
|
||
CMDLOCK LDA #7 ;LOCK OPCODE.
|
||
BNE LOKUNLOK ;ALWAYS.
|
||
CMDUNLOK LDA #8 ;UNLOCK OPCODE.
|
||
|
||
|
||
*---------------------------------
|
||
* ROUTINE COMMON TO LOCK, UNLOCK
|
||
* AND VERIFY COMMAND HANDLERS.
|
||
*---------------------------------
|
||
|
||
LOKUNLOK JSR HNDLCMD1 ;CALL PART OF THE MAIN COMMAND
|
||
;HANDLER ROUTINE TO LOCK, UNLOCK
|
||
;OR VERIFY THE FILE.
|
||
JMP CMDCLOSE ;EXIT COMMAND VIA CLOSE.
|
||
;RTN 2 THE CALLER OF THE COMMAND.
|
||
;(OFTEN RETURNS 2 AFTRCMD ($A17D)
|
||
;ASSOCIATED WITH THE COMMAND
|
||
;PARSING & PROCESSING ROUTINES.)
|
||
|
||
|
||
*=================================
|
||
* THE VERIFY COMMAND HANDLER.
|
||
*=================================
|
||
|
||
CMDVERFY LDA #12 ;VERIFY OPCODE.
|
||
BNE LOKUNLOK ;GO CALL THE CMD HNDLR TO VERIFY
|
||
;FILE & THEN EXIT VIA CLOSE CMD.
|
||
|
||
|
||
*=================================
|
||
* THE RENAME COMMAND HANDLER.
|
||
*=================================
|
||
|
||
CMDRENAM LDA ADRSFNBF ;COPY ADR OF SECONDARY FILENAME 2
|
||
STA RENAMBUF ;RENAME BUF IN FM PARAMETER LIST.
|
||
LDA ADRSFNBF+1
|
||
STA RENAMBUF+1
|
||
LDA #9 ;RENAME OPCODE.
|
||
STA TEMPBYT
|
||
JSR CLOSIFOP ;CLOSE FILE IF IT IS ALREADY OPEN
|
||
;AND THEN DO THE RENAME FUNCTION:
|
||
; -COPY NEW FILE NAME 2 DIRECTORY
|
||
; SECTOR BUFFER & THEN WRITE THE
|
||
; UPDATED DIREC SEC BACK 2 DISK.
|
||
JMP CMDCLOSE ;EXIT RENAME CMD VIA CLOSE CMD.
|
||
;(OFTEN RETURNS 2 AFTRCMD ($A17D)
|
||
;ASSOCIATED WITH THE COMMAND
|
||
;PARSING & PROCESSING ROUTINES.)
|
||
|
||
|
||
*=================================
|
||
* THE APPEND COMMAND HANDLER.
|
||
*=================================
|
||
|
||
CMDAPPND JSR CMDOPEN ;GO OPEN THE FILE TO BE APPENDED.
|
||
READ2END JSR RDTXTBYT ;GO READ A TEXT FILE BYTE. (USE
|
||
;THE READ FUNCTION AND READ-ONE-
|
||
;BYTE SUBFUNCTION.)
|
||
BNE READ2END ;TAKE BRANCH IF DEALING WITH A
|
||
;VALID (IE. NON-ZERO) DATA BYTE.
|
||
;HAVEN'T ENCOUNTERED AN END-OF-
|
||
;FILE MARKER ($00) YET,SO GO BACK
|
||
;TO READ THE REST OF THE FILE.
|
||
JMP CKAPFLG ;FOUND END OF FILE,SO NOW GO BACK
|
||
;UP THE FILE POINTER IF NECESSARY
|
||
;AND EVENTUALLY EXIT THE APPEND
|
||
;CMD HANDLER VIA RSETPTRS ($B6B3)
|
||
;AND FMEXIT ($B386). NOTE THAT
|
||
;RSETPTRS RESETS THE SAVED STACK
|
||
;POINTER (STKSAV, $B39B) SO WE
|
||
;EVENTUALLY RETURN TO THE CALLER
|
||
;OF THE APPEND COMMAND. EXECUTION
|
||
;OFTEN RETURNS TO AFTRCMD ($A17D)
|
||
;LOCATED IN THE COMMAND PARSING
|
||
;AND PROCESSING ROUTINES.
|
||
|
||
|
||
*=================================
|
||
* THE OPEN COMMAND HANDLER.
|
||
*=================================
|
||
|
||
CMDOPEN LDA #0 ;CODE FOR TEXT FILE.
|
||
JMP OPNCKTYP ;GO OPEN THE FILE & CHK ITS TYPE.
|
||
;RTN 2 THE CALLER OF THE OPEN CMD
|
||
;(OFTEN RETURNS 2 AFTRCMD ($A17D)
|
||
;ASSOCIATED WITH THE COMMAND
|
||
;PARSING & PROCESSING ROUTINES.)
|
||
|
||
|
||
*====================================
|
||
* COMMON FILE MANAGER CMD HNDLR CODE.
|
||
*====================================
|
||
|
||
HNDLCMD LDA #1 ;OPEN OPCODE.
|
||
HNDLCMD1 STA TEMPBYT ;STORE OPCODE IN TEMPBYT.
|
||
LDA LENPRSD ;GET L-PARAMETER FROM PARSED TBL.
|
||
BNE SAVLENFM ;CHECK IF A NON-ZERO L-PARM WAS
|
||
;ISSUED WITH THE COMMAND.
|
||
LDA LENPRSD+1
|
||
BNE SAVLENFM
|
||
LDA #1 ;LNGTH WAS 0 SO MAKE IT 1 INSTEAD
|
||
STA LENPRSD
|
||
SAVLENFM LDA LENPRSD ;PUT LENGTH IN FM PARAMETER LIST.
|
||
STA RECLENFM ;NOTE: RECORD LENGTH = 1 FOR
|
||
LDA LENPRSD+1 ;SEQUENTIAL FILES, ELSE PARSED
|
||
STA RECLENFM+1 ;LENGTH FOR RANDOM ACCESS FILES.
|
||
|
||
|
||
*----------------------------------
|
||
* CLOSE FILE IF IT IS ALREADY OPEN.
|
||
*----------------------------------
|
||
|
||
CLOSIFOP JSR CMDCLOSE ;CLOSE IF ALREADY OPEN.
|
||
LDA A5L+1 ;A5L/H POINTS AT HIGHEST NUMBERED
|
||
;(LOWEST IN MEMORY) FREE DOS BUF.
|
||
BNE SAVFNPTR ;BRANCH IF FOUND A FREE BUFFER.
|
||
JMP NOBUFERR ;COULDN'T LOCATE A FREE BUFFER SO
|
||
;GO ISSUE OUT OF BUF'S MSG.
|
||
SAVFNPTR STA A3L+1 ;RESET A3L/H TO POINT AT DOS BUF
|
||
LDA A5L ;THAT WILL USE 4 FILENAME FIELD.
|
||
STA A3L
|
||
JSR CPYPFN ;REASSIGN A DOS BUFFER 2 THE FILE
|
||
;WE WANT TO OPEN.
|
||
JSR BUFS2PRM ;GET ADDR'S OF THE VARIOUS DOS
|
||
;BUFFERS FROM THE CHAIN BUFFER &
|
||
;PUT THEM IN THE FM PARM LIST.
|
||
JSR CPY2PARM ;PUT VOL, DRV, SLOT & ADDR OF THE
|
||
;PRIMARY FILENAME BUFFER IN THE
|
||
;FM PARAMETER LIST.
|
||
LDA TEMPBYT ;GET OPCODE BACK FROM TEMPBYT AND
|
||
STA OPCODEFM ;STICK IT IN THE FM PARM LIST.
|
||
JMP FMDRIVER ;USE FILE MANAGER TO DO FUNCTION.
|
||
|
||
|
||
*=================================
|
||
* THE CLOSE COMMAND HANDLER.
|
||
*=================================
|
||
|
||
CMDCLOSE LDA PRIMFNBF ;GET 1RST CHR FRM PRMRY NAME BUF.
|
||
CMP #" " ;DON'T ALLOW LEADING SPACES.
|
||
BEQ CLOSEALL ;LEADING SPC = SIGNAL 2 CLOSE ALL
|
||
;FILES. (A CLOSE CMD WAS ISSUED
|
||
;WITH NO ACCOMPANYING FILE NAME.)
|
||
JSR GETBUFF ;LOCATE A DOS BUFFER WITH SAME
|
||
;NAME, ELSE LOCATE A FREE BUFFER.
|
||
|
||
EVENTXIT BCS CLOSERTS ;EVENTUALLY EXIT VIA THIS ROUTE!!
|
||
|
||
JSR CLOSEONE ;MATCHING FILENAME WAS FOUND SO
|
||
;GO CLOSE THAT FILE.
|
||
JMP CMDCLOSE ;GO BACK TO POINT A5L/H AT A FREE
|
||
;DOS BUFFER & EXIT VIA EVENTXIT
|
||
;($A2F4) AND CLOSERTS ($A330).
|
||
|
||
|
||
*---------------------------------
|
||
* CLOSE A SPECIFIC FILE
|
||
* (& FREE ITS BUFFER).
|
||
*---------------------------------
|
||
|
||
CLOSEONE JSR CKEXCBUF ;CHK IF CURRENT FILENAME BUFFER
|
||
;BELONGS TO AN EXEC FILE.
|
||
BNE FREEBUFF ;BRANCH IF NOT EXECING FROM THIS
|
||
;PARTICULAR FILE. NOTE, ALWAYS
|
||
;TAKE BRANCH IF CLOSEONE ($A2FC)
|
||
;IS ACCESSED VIA CLOSEALL ($A316)
|
||
LDA #0 ;CLOSING AN EXEC FILE SO SHUT OFF
|
||
STA EXECFLAG ;THE EXEC FLAG. NOTE:THIS INSTRUC
|
||
;IS NEVER CARRIED OUT IF ACCESSED
|
||
;VIA CLOSEALL. (AN ACTIVE EXEC
|
||
;FILE WAS ALREADY DETECTED AND
|
||
;SKIPPED BY THE "BEQ CHKNXBUF"
|
||
;INSTRUCTION AT $A323.)
|
||
FREEBUFF LDY #0 ;FREE UP DOS BUF BY POKING A $00
|
||
TYA ;IN 1RST BYT OF DOS FILENAME BUF.
|
||
STA (A3L),Y
|
||
JSR BUFS2PRM ;GET ADDR'S OF THE VARIOUS DOS
|
||
;BUFS FROM THE CHAIN BUF & PUT
|
||
;THEM IN THE FM PARAMETER LIST.
|
||
LDA #2 ;PUT OPCODE FOR CLOSE FUNCTION
|
||
STA OPCODEFM ;IN THE FM PARAMETER LIST.
|
||
JMP FMDRIVER ;GO TO THE FILE MANAGER DRIVER TO
|
||
;DO THE CLOSE FUNCTION.
|
||
|
||
|
||
*---------------------------------------
|
||
* CLOSE ALL FILES (EXCEPT AN EXEC FILE).
|
||
* ENTER CLOSEALL WHEN IT IS ACCESSED VIA
|
||
* A DIRECT CALL OR IF THE FIRST CHAR IN
|
||
* THE PRIMAY FILENAME FIELD WAS A SPACE.
|
||
*---------------------------------------
|
||
|
||
CLOSEALL JSR GETFNBF1 ;PUT ADR OF 1RST DOS FILENAME BUF
|
||
;(LOCATED IN CHAIN OF DOS BUFS)
|
||
;IN THE A3L/H POINTER.
|
||
BNE CKIFEXEC ;ALWAYS.
|
||
CHKNXBUF JSR GETNXBUF ;GET ADR OF NEXT DOS FILENAME BUF
|
||
;FROM DOS CHAIN POINTERS BUFFER
|
||
;(OFFSET 37 & 36 BYTES FROM 1RST
|
||
;CHR OF PRESENT DOS FILENAME BUF)
|
||
BEQ CLOSERTS ;LNK ZEROED OUT -ALL FILES CLOSED
|
||
;(EXIT CLOSEALL VIA THIS ROUTE.)
|
||
CKIFEXEC JSR CKEXCBUF ;CHK IF CURRENT DOS FILENAME BUF
|
||
;BELONGS TO TO AN EXEC FILE.
|
||
BEQ CHKNXBUF ;EXEC ACTIVE SO DON'T CLOSE ITS
|
||
;BUFFER OUT OR WILL END UP
|
||
;IN NEVER-NEVER LAND. AFTER ALL,
|
||
;DON'T WANT TO CLOSE BUFFER IF WE
|
||
;ARE USING IT 2 EXEC (IE. WOULD
|
||
;BE LIKE BURYING SELVES ALIVE)!!
|
||
JSR GETFNBY1 ;GET 1RST BYTE IN DOS NAME BUF.
|
||
BEQ CHKNXBUF ;THIS FILE IS ALREADY CLOSED SO
|
||
;GO BACK TO CLOSE REST OF FILES.
|
||
JSR CLOSEONE ;FILE WAS OPEN SO GO CLOSE IT.
|
||
JMP CLOSEALL ;GO TO CLOSERTS VIA CLOSEALL!!!
|
||
CLOSERTS RTS ;EXIT TO CALLER OF THE CLOSE CMD.
|
||
;(OFTEN EXITS TO AFTRCMD ($A17D)
|
||
;LOCATED IN THE COMMAND PARSING &
|
||
;PROCESSING ROUTINES.)
|
||
|
||
|
||
*=================================
|
||
* THE BSAVE COMMAND HANDLER.
|
||
*=================================
|
||
|
||
CMDBSAVE LDA #%00001001 ;TEST BITS0 & 3 OF CUMLOPTN 2 SEE
|
||
AND CUMLOPTN ;IF A(DDR) & L(ENGTH) PARAMETERS
|
||
CMP #%00001001 ;WERE ISSUED WITH THE BSAVE CMD.
|
||
BEQ DOBSAV ;BOTH A- & L-PARMS PRESENT.
|
||
JMP CKIFCTRL ;GOT A SYNTAX ERROR.
|
||
|
||
DOBSAV LDA #4 ;CODE FOR BINARY FILE.
|
||
JSR OPNCKTYP ;CLOSE (IF NECESSARY) & THEN OPN.
|
||
LDA ADRPRSD+1 ;PREPARE TO WRITE ADDR TO DISK.
|
||
LDY ADRPRSD
|
||
JSR WRADRLEN ;CALL WRITE-ONE-BYTE SUBFUNCTION
|
||
;TWICE TO PUT A(DDR)-PARAMETER IN
|
||
;DATA SEC BUF. (NOTE: LEN2RDWR IS
|
||
;USED AS A TEMPORAY BUFFER FOR
|
||
;FOR DATA TRANSFER.)
|
||
|
||
LDA LENPRSD+1 ;PREPARE TO WRITE FILE LENGTH.
|
||
LDY LENPRSD
|
||
JSR WRADRLEN ;CALL WRITE-ONE-BYTE SUFUNCTION 2
|
||
;WRITE LENGTH AS THE 3RD & 4TH
|
||
;BYTES IN THE DATA SEC BUF.
|
||
;(LATER BUF WRITTEN AS 1RST SEC
|
||
;OF FILE. LEN2RDWR IS AGAIN USED
|
||
;AS A TEMP BUF 4 DATA TRANSFER.)
|
||
|
||
* NOW PREPARE TO WRITE THE REST
|
||
* OF THE BINARY FILE TO THE DISK.
|
||
|
||
LDA ADRPRSD+1 ;PUT ADDR OF SOURCE BUFFER IN
|
||
LDY ADRPRSD ;THE FM PARAMETER LIST.
|
||
JMP RDWRANGE ;GO TO WRITE-RANGE ROUTINE TO
|
||
;WRITE REST OF FILE TO THE DISK.
|
||
;(FILE IS ALSO VERIFIED AND THEN
|
||
;EXITED VIA THE CLOSE COMMAND.)
|
||
;EXECUTION EVENTUALLY RETURNS TO
|
||
;THE CALLER OF THE BSAVE COMMAND.
|
||
;OFTEN, RETURNS 2 AFTRCMD ($A17D)
|
||
;LOCATED IN THE CMD PARSING AND
|
||
;PROCESSING ROUTINES.
|
||
|
||
|
||
*=================================
|
||
* BLOAD COMMAND HANDLER
|
||
*=================================
|
||
|
||
CMDBLOAD JSR HNDLCMD ;CALL THE FM COMMAND HANDLER TO
|
||
;OPEN THE FILE.
|
||
|
||
* COMPARE FILE TYPE WANTED
|
||
* WITH FILE TYPE FOUND.
|
||
|
||
LDA #$7F ;STRIP LOCK BIT FROM FILE TYPE
|
||
AND FILTYPFM ;FOUND (VIA OPEN FUNCTION).
|
||
CMP #4 ;WAS FILE FOUND A BINARY FILE?
|
||
BEQ ADR4BLOD ;YES.
|
||
JMP TYPMISM ;NO - GO ISSUE FILE-MISMATCH MSG.
|
||
|
||
* REDUNDANT CODE! CLOSE (IF NECESSARY)
|
||
* AND THEN OPEN THE FILE AGAIN.
|
||
|
||
ADR4BLOD LDA #4 ;CODE FOR BINARY FILE.
|
||
JSR OPNCKTYP ;CLOSE & REOPEN FILE.
|
||
JSR RDADRLEN ;READ THE BLOAD ADR FROM THE DISK
|
||
;INTO LEN2RDWR.
|
||
TAX ;X=LOW BYTE OF BLOAD ADR FRM DSK
|
||
LDA CUMLOPTN ;CHK CUMLOPTN TO SEE IF AN A(DDR)
|
||
AND #%00000001 ;WAS ISSUED WITH THE BLOAD CMD.
|
||
BNE LEN4BLOD ;YES -SO IGNORE ADR READ FROM DSK
|
||
; & USE THE ACTUAL PARSED
|
||
; A-PARAMETER INSTEAD.
|
||
STX ADRPRSD ;STORE ADR READ FRM DSK IN PARSED
|
||
STY ADRPRSD+1 ;TABLE. (THIS WAY CAN ALWAYS USE
|
||
;VAL IN TABLE FOR BLOAD ADR.)
|
||
|
||
LEN4BLOD JSR RDADRLEN ;READ THE BLOAD LENGTH OFF DSK.
|
||
;(PUT RESULTS IN LEN2RDWR.)
|
||
LDX ADRPRSD ;SET (X)/(Y) = EITHER ORIG PARSED
|
||
LDY ADRPRSD+1 ;A-PARM ADR OR BLOAD ADR FRM DSK.
|
||
JMP LODINTFP ;GO READ THE REST OF THE FILE IN.
|
||
;EXITS VIA THE CLOSE COMMAND.
|
||
;RETURNS TO CALLER OF THE BLOAD
|
||
;CMD. (IF BLOAD CMD NOT CALLED BY
|
||
;BRUN, THEN OFTEN RTNS TO AFTRCMD
|
||
;($A17D) LOCATED IN THE COMMAND
|
||
;PARSING & PROCESSING ROUTINES.)
|
||
|
||
|
||
*=================================
|
||
* BRUN COMMAND HANDLER
|
||
*=================================
|
||
|
||
CMDBRUN JSR CMDBLOAD ;BLOAD THE PRGM.
|
||
JSR INITIOHK ;POINT THE I/O HOOKS AT DOS.
|
||
;NOTE: THIS CAN CREATE SOME
|
||
;EXOTIC BUGS IF THE BRUNED PRGM
|
||
;PRINTS ANY INFO OR IF "MON" IS
|
||
;ACTIVE. SEE FORMATTED DIS'MBLY
|
||
;OF BRUN CMD FOR EXPLANATION.)
|
||
JMP (ADRPRSD) ;BEGIN EXECUTION OF BINARY PRGM.
|
||
;EXECUTION NORMALLY RETURNS TO
|
||
;AFTRCMD ($A17D) LOCATED IN THE
|
||
;CMD PARSING AND PROCESSING
|
||
;ROUTINES. ALSO NOTE THAT
|
||
;THE COMPUTER MAY HANG ON CERTAIN
|
||
;OCCASSIONS. (SEE THE FORMATTED
|
||
;DISASSEMBLY OF THE BRUN CMD FOR
|
||
;EXPLANATION.)
|
||
|
||
|
||
*=================================
|
||
* SAVE COMMAND HANDLER
|
||
*=================================
|
||
|
||
CMDSAVE LDA ACTBSFLG ;CHK WHICH BASIC IS ACTIVE.
|
||
BEQ SAVINTGR ;BRANCH IF USING INTEGER.
|
||
;INT=$00, A(ROM)=$40, A(RAM)=$80.
|
||
LDA PROTFLG ;IF PROTECTION FLAG IS ON (IE. IS
|
||
;NEGATIVE), THEN ALL APPLESOFT
|
||
;CMDS CAUSE RUN & DOS'S SAVE CMD
|
||
;CAUSES A PHONY PROGRAM-TOO-LARGE
|
||
;MESSAGE TO BE GENERATED.
|
||
BPL SAVAPSFT ;BRANCH IF PROTECTION FLG IS OFF.
|
||
JMP TOOLARGE ;PROTECTED!!! - SPIT OUT PHONY
|
||
;PROGRAM-TOO-LARGE MESSAGE & XIT.
|
||
|
||
|
||
*---------------------------------
|
||
* SAVE AN APPLESOFT FILE
|
||
*---------------------------------
|
||
|
||
SAVAPSFT LDA #2 ;CODE FOR APPLESOFT FILE.
|
||
JSR OPNCKTYP ;GO OPEN THE NAMED FILE & CHECK
|
||
;ITS TYPE.
|
||
SEC ;CALC THE LNGTH OF THE PRGM SO WE
|
||
LDA PRGEND ;CAN WRITE IT AS 1RST TWO BYTES:
|
||
SBC TXTTAB ; LENGTH = PRGEND - TXTTAB
|
||
TAY
|
||
LDA PRGEND+1
|
||
SBC TXTTAB+1
|
||
|
||
JSR WRADRLEN ;WRITE THE LENGTH OF THE FP FILE
|
||
;BY USING THE WRITE-ONE-BYTE
|
||
;SUBFUNCTION TWICE.
|
||
|
||
* PREPARE TO WRITE REST OF FILE.
|
||
|
||
LDA TXTTAB+1 ;PRGM START = START OF OUTPUT BUF
|
||
LDY TXTTAB
|
||
JMP RDWRANGE ;GO TO THE WRITE-RANGE-OF-BYTES
|
||
;ROUTINE 2 WRITE THE REST OF FILE
|
||
;AND THEN VERIFY IT.
|
||
;AFTER VERIFICATION, THE SAVE CMD
|
||
;IS EXITED VIA THE CLOSE CMD.
|
||
;EXECUTION THEN RETURNS TO CALLER
|
||
;OF THE SAVE CMD. (OFTEN RTNS TO
|
||
;AFTRCMD ($A17D) LOCATED IN THE
|
||
;DOS CMD PARSING AND PROCESSING
|
||
;ROUTINES.)
|
||
|
||
|
||
*---------------------------------
|
||
* SAVE AN INTEGER FILE
|
||
*---------------------------------
|
||
|
||
SAVINTGR LDA #1 ;CODE FOR INTEGER FILE.
|
||
JSR OPNCKTYP ;GO OPEN THE INTEGER FILE.
|
||
|
||
SEC ;CALC LENGTH OF FILE.
|
||
LDA HIMEM
|
||
SBC INTPGMST
|
||
TAY
|
||
LDA HIMEM+1
|
||
SBC INTPGMST+1
|
||
|
||
JSR WRADRLEN ;WRITE LNGTH 2 DSK BY CALLING THE
|
||
;WRITE-ONE-BYTE SUBFUNCTION TWICE
|
||
LDA INTPGMST+1
|
||
LDY INTPGMST
|
||
JMP RDWRANGE ;WRITE THE REST OF FILE TO DSK.
|
||
|
||
|
||
*=================================
|
||
* OPEN NAMED FILE & CHECK ITS TYPE
|
||
*=================================
|
||
|
||
OPNCKTYP STA FILTYPFM ;PUT CODE FOR FILE TYPE IN THE
|
||
PHA ;FM PARAMETER LIST & SAVE ON STK.
|
||
;($00=TXT, $01=INT, $02=FP,
|
||
;$04=BIN, $08=S-TYPE, $10=RELOC,
|
||
;$20=A-TYPE AND $40=B-TYPE.)
|
||
JSR HNDLCMD ;USE THE FM CMD HANDLER TO OPEN.
|
||
PLA ;PULL THE FILE TYPE CODE FRM STK.
|
||
JMP CHKFTYPE ;GO CHK IF TYPE WNTD = TYPE FOUND
|
||
|
||
|
||
*============================================
|
||
* WRITE TWO BYTES.
|
||
*--------------------------------------------
|
||
* CODE WHICH WRITES ADDRESS AND LENGTH VALUES
|
||
* TO THE DATA SECTOR BUFFER. (LATER, THE
|
||
* DATA SEC BUF IS WRITTEN TO THE DISK.)
|
||
* CALLS WRITE-ONE-BYTE SUBFUNCTION TWICE.
|
||
* NOTE THAT LEN2RDWR IS USED AS A TEMPORARY
|
||
* BUFFER FOR DATA TRANSFER AS SHOWN BELOW:
|
||
* - LOW BYTE OF ADR OR LENGTH --> LEN2RDWR
|
||
* --> ONEIOBUF --> DATA SECTOR BUFFER.
|
||
* - HI BYTE OF ADR OR LENGTH --> LEN2RDWR+1
|
||
* --> ONEIOBUF --> DATA SECTOR BUFFER.
|
||
*============================================
|
||
|
||
WRADRLEN STY LEN2RDWR ;PUT LOW BYTE IN FM PARM LIST IN
|
||
;CASE THIS IS A L-PARM & WE NEED
|
||
;IT AS A COUNTER WHEN LATER WRITE
|
||
;RANGE OF BYTES TO DISK.
|
||
STY ONEIOBUF ;PUT BYTE TO WRITE IN PARM LIST.
|
||
STA LEN2RDWR+1 ;PUT HI BYTE IN FM PARM LIST IN
|
||
;CASE THIS IS A L-PARM & WE NEED
|
||
;IT AS COUNTER WHEN LATER WRITE
|
||
;RANGE OF BYTES TO DISK.
|
||
LDA #4 ;PUT WRITE OPCODE IN FM PARM LIST
|
||
STA OPCODEFM
|
||
LDA #1 ;PUT ONE-BYTE SUBCODE IN PARM LST
|
||
STA SUBCODFM
|
||
JSR FMDRIVER ;CALL FM DRV TO WRITE 1RST BYTE.
|
||
LDA LEN2RDWR+1 ;PUT HI BYTE TO WRITE IN PARM LST
|
||
STA ONEIOBUF
|
||
JMP FMDRIVER ;GO WRITE HI BYTE TO FILE.
|
||
|
||
|
||
*=================================
|
||
* READ/WRITE A RANGE OF BYTES
|
||
*=================================
|
||
|
||
RDWRANGE STY CURIOBUF ;PUT ADR OF OUTPUT BUF IN PRM LST
|
||
STA CURIOBUF+1
|
||
LDA #2 ;SET SUBCODE FOR RANGE OF BYTES.
|
||
JMP VRFYRWNG ;GO CALL THE FILE MANAGER TO WRITE
|
||
;DATA TO THE DISK. NEXT VERIFY
|
||
;THE INFO & CLOSE THE FILE.
|
||
|
||
|
||
*=================================
|
||
* CALL FM DRIVER & THEN CLOSE FILE
|
||
*=================================
|
||
|
||
CLOSEFM JSR FMDRIVER ;CALL THE FM DRIVER 2 READ/WRITE.
|
||
JMP CMDCLOSE ;GO CLOSE THE FILE.
|
||
|
||
|
||
*========================================
|
||
* GO ISSUE A FILE-TYPE-MISMATCH ERROR MSG
|
||
*========================================
|
||
|
||
TOTYPMIS JMP TYPMISM ;GO HANDLE MISMATCH ERROR.
|
||
|
||
|
||
*=================================
|
||
* LOAD COMMAND HANDLER
|
||
*=================================
|
||
|
||
CMDLOAD JSR CLOSEALL ;CLOSE ALL FILES (EXCEPT ACTIVE
|
||
;EXEC FILE).
|
||
OPENLOAD JSR HNDLCMD ;GO OPEN THE FILE.
|
||
|
||
LDA #%00100011 ;SET BITS IN (A) TO RESTRICT LOAD
|
||
;CMD 2 APLSFT ($02), INTGR ($01)
|
||
;OR A-TYPE ($20) FILES.
|
||
AND FILTYPFM ;TYPE FOUND (VIA OPEN FUNCTION).
|
||
BEQ TOTYPMIS ;ERR -NOT ONE OF THE ABOVE TYPES.
|
||
;GO ISSUE TYPE-MISMATCH ERR MSG.
|
||
STA FILTYPFM ;SAVE TYPE WANTED IN FM PARM LIST
|
||
|
||
LDA ACTBSFLG ;CHK WHICH LANG IS ACTIVE:
|
||
; INT=$00, FP=$40, A(RAM)=$80)
|
||
BEQ LODINTGR ;BRANCH IF USING INTEGER.
|
||
|
||
LDA #2 ;CODE FOR APPLESOFT (FP).
|
||
JSR SELCTBSC ;CHK IF TYPE WANTED IS APPLESOFT.
|
||
|
||
JSR RDADRLEN ;READ LENGTH OF THE FP PRGM FROM
|
||
;THE 1RST 2 BYTES OF THE FILE.
|
||
|
||
* CHK TO SEE IF THERE IS ENOUGH ROOM
|
||
* BETWEEN PRGM START POS'N & MEMSIZ
|
||
* TO ACCOMODATE FILE.
|
||
|
||
CLC ;ADD LNGTH OF FILE 2 START OF PGM
|
||
ADC TXTTAB ;(NORMALLY, $801).
|
||
TAX ;SAVE LOW BYTE OF PRGEND IN (X).
|
||
TYA ;RETRIEVE HI BYTE OF LEN FROM (Y)
|
||
ADC TXTTAB+1
|
||
|
||
CMP MEMSIZ+1
|
||
BCS TOTOOLRG ;BRANCH IF NOT ENOUGH ROOM.
|
||
;(GO ISSUE PRGM-TOO-LARGE MSG.)
|
||
|
||
* PRGM IS SHORT ENOUGH TO BE
|
||
* ACCOMODATED IN FREE MEMORY SPACE.
|
||
*
|
||
* SET ZERO-PAGE POINTERS.
|
||
|
||
STA PRGEND+1 ;SET END OF PRGM POINTER.
|
||
STA VARTAB+1 ;SET START OF VARIABLE SPACE.
|
||
STX PRGEND ;PRGEND: VAL IN TXTTAB + LENGTH.
|
||
STX VARTAB ;VARTAB: VAL IN TXTTAB + LENGTH.
|
||
LDX TXTTAB
|
||
LDY TXTTAB+1
|
||
|
||
JSR LODINTFP ;DESIGNATE WHERE IN FREE MEMORY 2
|
||
;LOAD PRGM & THEN GO LOAD IT.
|
||
JSR INITIOHK ;POINT THE I/O HOOKS AT DOS.
|
||
JMP (RLOCNTRY) ;NORMALLY PTS TO SETLINKS ($D4F2)
|
||
;ROUTINE IN BASIC WHICH SETS
|
||
;IMPORTANT Z-PAGE POINTERS,
|
||
;CLEARS OUT VARIABLES, RESETS STK
|
||
;PTR & THEN ADJUSTS LINKS IN EACH
|
||
;PROGRAM LINE.
|
||
;EVENTUALLY, EXECUTION FLOWS INTO
|
||
;BSC'S WRMSTART (RESTART, $D43C).
|
||
;IF THE LOAD CMD WAS CALLED VIA
|
||
;THE RUN CMD, EXECUTION BRANCHES
|
||
;BACK 2 THE RUNFPINT ($A4DC) PART
|
||
;OF THE RUN CMD (AFTER ADJUSTING
|
||
;THE STACK).
|
||
;IF LOAD WAS NOT CALLED FROM RUN,
|
||
;THEN THE THE RESTART ($D43C)
|
||
;PORTION OF BASIC EVENTUALLY
|
||
;REQUESTS FURTHER PRGM OR KEYBRD
|
||
;INPUT & ANOTHER CMD IS PARSED.
|
||
|
||
|
||
*---------------------------------
|
||
* LOAD AN INTEGER PROGRAM
|
||
*---------------------------------
|
||
|
||
LODINTGR LDA #1 ;CODE 4 INTEGER BASIC FILE TYPE.
|
||
JSR SELCTBSC ;CHK IF INTEGER BASIC IS ACTIVE.
|
||
;IF NOT, SWTCH FROM FP 2 INTEGER.
|
||
JSR RDADRLEN ;READ 1RST 2 BYTES OF FILE TO GET
|
||
;LENGTH OF PRGM TO LOAD.
|
||
SEC ;CALC START OF PRGRM.
|
||
LDA HIMEM ;(HIMEM - LENADRBF.)
|
||
SBC LENADRBF
|
||
TAX
|
||
LDA HIMEM+1
|
||
SBC LENADRBF+1
|
||
|
||
BCC TOTOOLRG ;LENGTH > HIMEM SO ISSUE ERR MSG.
|
||
TAY
|
||
CPY LOMEM+1 ;CHK IF PRGM < = LOMEM.
|
||
BCC TOTOOLRG ;START OF PRGM TOO LOW, SO GO
|
||
BEQ TOTOOLRG ;ISSUE PRGM-TOO-LARGE ERROR MSG.
|
||
|
||
STY INTPGMST+1 ;SET START-OF-PRGM POINTER.
|
||
STX INTPGMST
|
||
|
||
*=================================
|
||
* GO DO THE ACTUAL LOAD.
|
||
* (COMMON LOAD ROUT'N FOR
|
||
* FP OR INTEGER LOAD CMDS.)
|
||
*=================================
|
||
|
||
LODINTFP STX CURIOBUF ;DESIGNATE LOAD ADDR AS I/O BUF
|
||
STY CURIOBUF+1 ;IN THE FM PARAMETER LIST.
|
||
JMP CLOSEFM ;USE FILE MANAGER TO LOAD PRGM.
|
||
|
||
|
||
*=================================
|
||
* COMMON CODE USED TO READ THE
|
||
* BLOAD ADDRESS, BLOAD LENGTH
|
||
* OR LOAD LENGTH FROM THE DISK.
|
||
*=================================
|
||
|
||
RDADRLEN LDA ADLENADR ;GET ADR OF TWO-BYTE INPUT BUFFER
|
||
STA CURIOBUF ;(LENADRBF, $AA60) FRM RELOCATBL
|
||
LDA ADLENADR+1 ;CONSTANTS TBL & DESIGNATE IT AS
|
||
STA CURIOBUF+1 ;THE I/O BUF IN THE FM PARM LIST.
|
||
LDA #0 ;PUT LENGTH TO READ = 2 BYTES IN
|
||
STA LEN2RDWR+1 ;THE FM PARM LIST.
|
||
LDA #2
|
||
STA LEN2RDWR
|
||
LDA #3 ;PUT READ OPCODE IN FM PARM LIST.
|
||
STA OPCODEFM
|
||
LDA #2 ;INDICATE WANT 2 READ RNG OF BYTS
|
||
STA SUBCODFM
|
||
JSR FMDRIVER ;GO READ IN THE ADDR (OR LENGTH).
|
||
LDA LENADRBF+1 ;GET HI BYTE OF ADR (OR LENGTH)
|
||
;JUST READ FROM DISK.
|
||
STA LEN2RDWR+1 ;PUT VAL JUST RD IN PARM LIST IN
|
||
;CASE JUST READ LENGTH (SO KNOW
|
||
;HOW MUCH TO READ WHEN READ MAIN
|
||
;BODY OF FILE).
|
||
TAY ;SAVE HI BYTE IN (Y).
|
||
LDA LENADRBF ;DO LIKEWISE WITH LOW BYTE.
|
||
STA LEN2RDWR
|
||
RTS
|
||
|
||
|
||
*=================================
|
||
* CLOSE FILE & ISSUE A PROGRAM-
|
||
* TOO-LARGE ERROR MESSAGE.
|
||
*=================================
|
||
|
||
TOTOOLRG JSR CMDCLOSE ;CLOSE FILE.
|
||
JMP TOOLARGE ;ISSUE ERROR MSG.
|
||
|
||
|
||
*=================================
|
||
* SELECT DESIRED BASIC
|
||
*=================================
|
||
|
||
* CHK IF DESIRED BASIC IS UP OR NOT
|
||
* (SWITCH BASIC IF NECESSARY).
|
||
|
||
SELCTBSC CMP FILTYPFM ;TYPE WANTED = TYPE FOUND?
|
||
BEQ SELBSRTN ;YES - BASIC WANTED IS ACTIVE.
|
||
|
||
LDX NDX2CMD ;SAVE INDEX 2 PRESENT CMD IN CASE
|
||
STX NEXTCMD ;WE ARE USING INTEGER & MUST LOAD
|
||
;INTEGER FILE CALLED "APPLESOFT"
|
||
;IN ORDER TO LOAD A(RAM).
|
||
LSR ;SHIFT TYPE WANTED TO SEE WHICH
|
||
;BASIC TO SWITCH INTO.
|
||
BEQ SWTCH2FP ;SWITCH FROM INTEGER 2 APPLESOFT.
|
||
JMP CMDINT ;SWITCH FROM APPLESOFT 2 INTEGER.
|
||
|
||
|
||
* SWITCHING FROM INT TO APPLESOFT
|
||
* SO COPY NAME OF FILE FROM PRIMARY
|
||
* TO SECONDARY NAME BUF IN CASE WE
|
||
* HAVE TO USE RAM-BASED APPLESOFT.
|
||
|
||
SWTCH2FP LDX #29 ;30 BYTES TO COPY (0 TO 29).
|
||
PRIM2SND LDA PRIMFNBF,X ;GET BYTE FROM PRIMARY.
|
||
STA SCNDFNBF,X ;COPY IT TO SECONDARY.
|
||
DEX
|
||
BPL PRIM2SND ;BRANCH IF MORE BYTES TO COPY.
|
||
|
||
JMP CMDFP ;EXECUTE THE FP COMMAND.
|
||
|
||
SELBSRTN RTS ;DESIRED BASIC WAS ACTIVE.
|
||
|
||
|
||
*=================================
|
||
* RUN COMMAND HANDLER
|
||
*=================================
|
||
|
||
CMDRUN LDA ACTBSFLG ;CHK WHICH BASIC IS CURRENT.
|
||
BEQ LOAD4RUN ;BRANCH IF USING INTEGER BASIC.
|
||
|
||
STA RUNTRUPT ;SET THE RUN INTERCEPT FLAG TO
|
||
;SIGNAL THAT WE ARE ABOUT TO
|
||
;INTERRUPT THE RUN COMMAND TO DO
|
||
;LOAD. ($40=A(ROM), $80=A(RAM).)
|
||
LOAD4RUN JSR CMDLOAD ;GO LOAD THE PROGRAM.
|
||
;************* NOTE *************
|
||
;* THE "JSR" IS ACTUALLY A *
|
||
;* PLACEBO BECAUSE AFTER FILE *
|
||
;* IS LOADED, EXECUTION GOES IN2*
|
||
;* BASIC & THEN RE-ENTERS DOS *
|
||
;* THRU THE DOS INTERCEPTS. ONCE*
|
||
;* DOS GETS ITS MITTS BACK INTO *
|
||
;* THINGS, THE RUNTRUPT FLAG IS *
|
||
;* TESTED & THEN EXECUTION FLOWS*
|
||
;* TO THE NEXT INSTRUCTION (AT *
|
||
;* RUNFPINT). THE MACHINE DOES *
|
||
;* NOT GET LOST BECAUSE THE STK *
|
||
;* PTR GETS RESET ACCORDINDLY. *
|
||
;********************************
|
||
|
||
RUNFPINT JSR CRVIADOS ;PRINT A <CR>.
|
||
JSR INITIOHK ;RESET THE I/O HKS TO PT TO DOS.
|
||
JMP (RUNTRY) ;GO EXECUTE THE PRGM.
|
||
;(RUNTRY PTS TO RUNFPROM IF USING
|
||
;A(ROM) OR POINTS TO FPRAMRUN
|
||
;IF USING A(RAM).)
|
||
|
||
|
||
*=======================================
|
||
* INTEGER BASIC'S RUN CMD ENTRY POINT.
|
||
* (RUNTRY PTS HERE WHEN INTEGER ACTIVE.)
|
||
*=======================================
|
||
|
||
RUNINTGR LDA LOMEM ;CLEAR OUT ALL VARIABLES.
|
||
STA INTVRLND ;ZERO OUT INTEGER BASIC'S CURRENT
|
||
LDA LOMEM+1 ;VARIABLE POINTER.
|
||
STA INTVRLND+1
|
||
JMP (CHAINTRY) ;GO INTO INTEGER BASIC 2 EXECUTE.
|
||
|
||
|
||
*=================================
|
||
* CHAIN COMMAND HANDLER
|
||
*=================================
|
||
|
||
CMDCHAIN JSR OPENLOAD ;LOAD THE INTEGER PRGM.
|
||
JSR CRVIADOS ;PRINT A <CR>.
|
||
JSR INITIOHK ;POINT I/O HOOKS AT DOS.
|
||
JMP (CHAINTRY) ;GO INTO INTEGER BASIC 2 EXECUTE.
|
||
|
||
|
||
*=================================
|
||
* A(ROM)'S RUN ENTRY POINT.
|
||
* (RUNTRY POINTS HERE IF A(ROM)
|
||
* BASIC IS ACTIVE.)
|
||
*=================================
|
||
|
||
RUNFPROM JSR SETZPTRS ;CLEAR OUT ALL VARIABLES.
|
||
STA PROMPT ;ZERO OUT PROMPT & ON-ERROR FLAG.
|
||
STA ERRFLG
|
||
JMP NEWSTT ;JUMP INTO BASIC TO EXECUTE PRGM.
|
||
|
||
|
||
*=================================
|
||
* A(RAM)'S RUN ENTRY POINT.
|
||
* (RUNTRY POINTS HERE IF A(RAM)
|
||
* VERSION OF BASIC IS UP.)
|
||
*=================================
|
||
|
||
FPRAMRUN JSR CLRFPRAM ;CLEAR ALL VARIABLES.
|
||
STA PROMPT ;ZERO OUT PROMPT & ON ERROR FLAG.
|
||
STA ERRFLG
|
||
JMP RUNFPRAM ;GO RUN THE PROGRAM.
|
||
|