Sorted HOSTFS commands into order

Sorted HOSTFS commands into order, and slight tweek so I can concentrate on oscli.s
This commit is contained in:
jgharston 2022-10-09 15:24:36 +01:00 committed by GitHub
parent 0011b9f6de
commit 901ad6678c
2 changed files with 183 additions and 161 deletions

View File

@ -22,6 +22,7 @@
* 02-Oct-2021 ACCESS uses generic access byte parsing. * 02-Oct-2021 ACCESS uses generic access byte parsing.
* PRACCESS shares code with ACCESS. * PRACCESS shares code with ACCESS.
* 03-Oct-2021 PARSNAME checks filename length<64. * 03-Oct-2021 PARSNAME checks filename length<64.
* 09-Oct-2022 Sorted commands into order.
* $B0-$BF Temporary filing system workspace * $B0-$BF Temporary filing system workspace
@ -282,34 +283,43 @@ FILEIGNORE PLA ; Returned object type
******************* *******************
* These are commands specific to the filing system that can't be * These are commands specific to the filing system that can't be
* called via OSFILE, OSFSC, etc. * called via OSFILE, OSFSC, etc.
* Syntax is:
* <afsp> - ambiguous file specifier, acts on a single file, error if not file, wildcards allowed
* <fsp> - unambiguous file specifier, acts on a single file, error if not file, wildcards not allowed
* <dir> - directory, error if not directory
* <drv> - drive, eg :1 :2 :61, error if not drive
* <*objspec*> - able to act on multiple objects, any object type, wildcards allowed
* <access> - access string
* <title> - disk title
* (<...>) - optional
* *
FSCCOMMAND ASC 'CHDIR' FSCCOMMAND ASC 'ACCESS'
DB $80 DB $FF
DW FSCCHDIR-1 ; CHDIR <*objspec*>, LPTR=>params DW FSCACCESS-1 ; ACCESS <*objspec*> <access>, LPTR=>params
ASC 'CD' ASC 'CD'
DB $80 DB $FF
DW FSCCHDIR-1 ; CD <*objspec*> , LPTR=>params DW FSCCHDIR-1 ; CD <dir> , LPTR=>params
ASC 'DIR' ASC 'CHDIR'
DB $80 DB $FF
DW FSCCHDIR-1 ; DIR <*objspec*>, LPTR=>params DW FSCCHDIR-1 ; CHDIR <dir>, LPTR=>params
ASC 'DRIVE'
DB $80
DW FSCDRIVE-1 ; DRIVE <drive>, LPTR=>params
ASC 'FREE'
DB $80
DW FSCFREE-1 ; FREE <drive>, LPTR=>params
ASC 'ACCESS'
DB $80
DW FSCACCESS-1 ; ACCESS <listspec> <access>, LPTR=>params
ASC 'TITLE'
DB $80
DW FSCTITLE-1 ; TITLE (<drive>) <title>, LPTR=>params
ASC 'DESTROY'
DB $80
DW FSCDESTROY-1 ; DESTROY <listspec>, LPTR=>params
ASC 'COPY' ASC 'COPY'
DB $80 DB $FF
DW FSCCOPY-1 ; COPY <listspec> <*objspec*>, LPTR=>params DW FSCCOPY-1 ; COPY <*objspec*> <dest>, LPTR=>params
ASC 'DIR'
DB $FF
DW FSCCHDIR-1 ; DIR <*objspec*>, LPTR=>params
ASC 'DESTROY'
DB $FF
DW FSCDESTROY-1 ; DESTROY <*objspec*> (Y), LPTR=>params
ASC 'DRIVE'
DB $FF
DW FSCDRIVE-1 ; DRIVE <drv>, LPTR=>params
ASC 'FREE'
DB $FF
DW FSCFREE-1 ; FREE (<drv>), LPTR=>params
ASC 'TITLE'
DB $FF
DW FSCTITLE-1 ; TITLE (<drv>) <title>, LPTR=>params
* *
DB $FF ; Terminator DB $FF ; Terminator
@ -679,7 +689,7 @@ FSCRENAME JSR PARSNAME ; Copy Arg1->MOSFILE
>>> XF2MAIN,RENFILE >>> XF2MAIN,RENFILE
:SYNTAX BRK :SYNTAX BRK
DB $DC DB $DC
ASC 'Syntax: RENAME <objspec> <objspec>' ASC 'Syntax: RENAME <oldspec> <newspec>'
BRK BRK
* ProDOS returns $40 (Bad filename) for bad renames. * ProDOS returns $40 (Bad filename) for bad renames.
* Not easy to seperate out, so leave as Bad filename error. * Not easy to seperate out, so leave as Bad filename error.
@ -701,7 +711,7 @@ FSCCOPY JSR PARSLPTR ; Copy Arg1->MOSFILE
>>> XF2MAIN,COPYFILE ; Do the heavy lifting >>> XF2MAIN,COPYFILE ; Do the heavy lifting
:SYNTAX BRK :SYNTAX BRK
DB $DC DB $DC
ASC 'Syntax: COPY <listspec> <*objspec*>' ASC 'Syntax: COPY <*objspec*> <dest>'
BRK BRK
@ -714,7 +724,7 @@ FSCCHDIR JSR PARSLPTR ; Copy filename->MOSFILE
FSCCHDIR2 >>> XF2MAIN,SETPFX FSCCHDIR2 >>> XF2MAIN,SETPFX
ERRCHDIR BRK ERRCHDIR BRK
DB $DC DB $DC
ASC 'Syntax: DIR <*objspec*>' ASC 'Syntax: DIR <dir>'
BRK BRK
@ -726,7 +736,7 @@ FSCDRIVE JSR PARSLPTR ; Copy arg->MOSFILE
BNE FSCCHDIR2 ; Pass on as CHDIR BNE FSCCHDIR2 ; Pass on as CHDIR
:SYNTAX BRK :SYNTAX BRK
DB $DC DB $DC
ASC 'Syntax: DRIVE <drv> (eg: DRIVE :61)' ASC 'Syntax: DRIVE <drv>'
BRK BRK
@ -815,7 +825,7 @@ FSCACCESS JSR PARSLPTR ; Copy filename->MOSFILE
>>> XF2MAIN,SETPERM >>> XF2MAIN,SETPERM
:SYNTAX BRK :SYNTAX BRK
DB $DC DB $DC
ASC 'Syntax: ACCESS <listspec> <L|W|R>' ASC 'Syntax: ACCESS <*objspec*> <L|W|R>'
BRK BRK
@ -828,12 +838,13 @@ DESTROY JSR PARSLPTR ; Copy filename->MOSFILE
>>> XF2MAIN,MULTIDEL >>> XF2MAIN,MULTIDEL
:SYNTAX BRK :SYNTAX BRK
DB $DC DB $DC
ASC 'Syntax: DESTROY <listspec>' ASC 'Syntax: DESTROY <*objspec*>'
BRK BRK
* Handle *TITLE command * Handle *TITLE command
* LPTR=>parameters string * LPTR=>parameters string
* Syntax: *TITLE (<drive>) <title>
* *
FSCTITLE RTS FSCTITLE RTS

View File

@ -1,5 +1,5 @@
* AUXMEM.OSCLI.S * AUXMEM.OSCLI.S
* (c) BOBBI 2021 GPLv3 * (c) BOBBI 2021-2022 GPLv3
* *
* Handle OSCLI system calls * Handle OSCLI system calls
@ -12,12 +12,16 @@
* 07-Oct-2022 *CLOSE is a host command, fixed *EXEC. * 07-Oct-2022 *CLOSE is a host command, fixed *EXEC.
* 08-Oct-2022 Rewrote *TYPE, *DUMP, *SPOOL, shares code with *EXEC. * 08-Oct-2022 Rewrote *TYPE, *DUMP, *SPOOL, shares code with *EXEC.
* Sorted command table, added *HELP FILE. * Sorted command table, added *HELP FILE.
* Optimised CLILOOK dispatcher.
* COMMAND TABLE * COMMAND TABLE
*************** ***************
* Table structure is: { string, byte OR $80, destword-1 } $00 * Table structure is: { string, byte OR $80, destword-1 } $00
* Commands are entered with A=command byte with b7=1 * Commands are entered with A=command byte with b7=1
* EQ=no parameter
* b6=0 - Enter with XY=>parameters
* b6=1 - Enter with LPTR,Y=>parameters
* *
* Ok, let's get around to sorting these * Ok, let's get around to sorting these
CMDTABLE CMDTABLE
@ -28,17 +32,17 @@ CMDFILE ASC 'CAT' ; Must be first command so matches '*.'
DB $88 DB $88
DW STARFILE-1 ; CDIR -> OSFILE 08, CBLK=>filename DW STARFILE-1 ; CDIR -> OSFILE 08, CBLK=>filename
ASC 'CLOSE' ASC 'CLOSE'
DB $80 DB $FF
DW CMDCLOSE-1 ; CLOSE -> (LPTR)=>params DW CMDCLOSE-1 ; CLOSE -> (LPTR)=>params
ASC 'DELETE' ASC 'DELETE'
DB $86 DB $86
DW STARFILE-1 ; DELETE -> OSFILE 06, CBLK=>filename DW STARFILE-1 ; DELETE -> OSFILE 06, CBLK=>filename
ASC 'DUMP' ASC 'DUMP'
DB $80 DB $81 ; TO DO
DW CMDDUMP-1 ; DUMP -> (LPTR)=>params DW CMDDUMP-1 ; DUMP -> XY=>params
ASC 'EXEC' ASC 'EXEC'
DB $80 DB $81 ; TO DO
DW CMDEXEC-1 ; EXEC -> (LPTR)=>params DW CMDEXEC-1 ; EXEC -> XY=>params
ASC 'EX' ASC 'EX'
DB $89 DB $89
DW STARFSC-1 ; EX -> FSC 9, XY=>params DW STARFSC-1 ; EX -> FSC 9, XY=>params
@ -46,7 +50,7 @@ CMDFILE ASC 'CAT' ; Must be first command so matches '*.'
DB $8A DB $8A
DW STARFSC-1 ; INFO -> FSC 10, XY=>params DW STARFSC-1 ; INFO -> FSC 10, XY=>params
ASC 'LOAD' ASC 'LOAD'
DB $FF DB $81
DW STARLOAD-1 ; LOAD -> OSFILE FF, CBLK=>filename DW STARLOAD-1 ; LOAD -> OSFILE FF, CBLK=>filename
ASC 'MKDIR' ASC 'MKDIR'
DB $88 DB $88
@ -61,41 +65,42 @@ CMDFILE ASC 'CAT' ; Must be first command so matches '*.'
DB $8C DB $8C
DW STARFSC-1 ; RENAME -> FSC 12, XY=>params DW STARFSC-1 ; RENAME -> FSC 12, XY=>params
ASC 'SAVE' ASC 'SAVE'
DB $FF DB $81
DW STARSAVE-1 ; SAVE -> OSFILE 00, CBLK=>filename DW STARSAVE-1 ; SAVE -> OSFILE 00, CBLK=>filename
ASC 'SPOOL' ASC 'SPOOL'
DB $80 DB $81 ; TO DO
DW CMDSPOOL-1 ; SPOOL -> (LPTR)=>params DW CMDSPOOL-1 ; SPOOL -> XY=>params
ASC 'TYPE' ASC 'TYPE'
DB $80 DB $81 ; TO DO
DW CMDTYPE-1 ; TYPE -> (LPTR)=>params DW CMDTYPE-1 ; TYPE -> XY=>params
DB $00 ; Split between HELP lists * Split between HELP lists
DB $00
* *
CMDMOS ASC 'BASIC' CMDMOS ASC 'BASIC'
DB $80 DB $FF
DW STARBASIC-1 ; BASIC -> (LPTR)=>params DW STARBASIC-1 ; BASIC -> (LPTR)=>params
ASC 'ECHO' ASC 'ECHO'
DB $80 DB $FF
DW ECHO-1 ; ECHO -> (LPTR)=>params DW CMDECHO-1 ; ECHO -> (LPTR)=>params
ASC 'FX' ASC 'FX'
DB $80 DB $FF
DW STARFX-1 ; FX -> OSBYTE A,X,Y (LPTR)=>params DW STARFX-1 ; FX -> OSBYTE A,X,Y (LPTR)=>params
ASC 'FAST' ASC 'FAST'
DB $80
DW FAST-1 ; FAST -> (LPTR)=>params
ASC 'HELP'
DB $FF DB $FF
DW CMDFAST-1 ; FAST -> (LPTR)=>params
ASC 'HELP'
DB $81
DW STARHELP-1 ; HELP -> XY=>params DW STARHELP-1 ; HELP -> XY=>params
ASC 'KEY' ASC 'KEY'
DB $80 DB $FF
DW STARKEY-1 ; KEY -> (LPTR)=>params DW STARKEY-1 ; KEY -> (LPTR)=>params
ASC 'QUIT' ASC 'QUIT'
DB $80 DB $FF
DW STARQUIT-1 ; QUIT -> (LPTR)=>params DW STARQUIT-1 ; QUIT -> (LPTR)=>params
ASC 'SLOW' ASC 'SLOW'
DB $80 DB $FF
DW SLOW-1 ; SLOW -> (LPTR)=>params DW CMDSLOW-1 ; SLOW -> (LPTR)=>params
* terminator * Table terminator
DB $FF DB $FF
@ -163,21 +168,28 @@ CLIMATCH2 JSR CLIMATCH3 ; Call the routine
RTS ; Return A=0 to claim RTS ; Return A=0 to claim
CLIMATCH3 JSR SKIPSPC ; (OSLPTR),Y=>parameters CLIMATCH3 JSR SKIPSPC ; (OSLPTR),Y=>parameters
PHP ; Save EQ=end of line
LDA (OSTEXT,X) ; Command byte LDA (OSTEXT,X) ; Command byte
PHA
JSR CLISTEP ; Address low byte
STA OSTEMP STA OSTEMP
JSR CLISTEP ; Address high byte JSR CLISTEP ; Address low byte
PLX ; Get command byte
PHA ; Push address high
LDA OSTEMP
PHA ; Push address low
TXA ; Command byte
PHA PHA
JSR CLISTEP ; Address high byte
TAX ; X=high
PLA ; A=low
PLP ; EQ=end of line
PHX ; SP->high
PHA ; SP->low, high
PHP ; SP->flg, low, high
* BIT OSTEMP
* BVS CLICALL
LDA OSTEMP
ASL A ; Move bit 6 into bit 7 ASL A ; Move bit 6 into bit 7
BEQ CLICALL ; If $80-&BF don't convert LPTR BMI CLICALL ; If b6=1 don't convert LPTR
BEQ CLICALL ; *TEMP* If $80, skip - remove when HOSTFS updated
*
JSR LPTRtoXY ; XY=>parameters JSR LPTRtoXY ; XY=>parameters
CLICALL PLA ; A=command parameter CLICALL LDA OSTEMP ; A=command parameter
PLP ; EQ=no parameters
RTS ; Call command routine RTS ; Call command routine
CLISTEP INC OSTEXT+0,X ; Point to next table byte CLISTEP INC OSTEXT+0,X ; Point to next table byte
@ -220,7 +232,7 @@ CLISLASH JSR SKIPSPC1
BEQ CLIDONE ; */<cr> BEQ CLIDONE ; */<cr>
LDA #$02 LDA #$02
BNE STARFSC2 ; FSC 2 = */filename BNE STARFSC2 ; FSC 2 = */filename
*
CLIUNKNOWN LDA #$04 CLIUNKNOWN LDA #$04
JSR SERVICE ; Offer to sideways ROM(s) JSR SERVICE ; Offer to sideways ROM(s)
BEQ CLIDONE ; Claimed BEQ CLIDONE ; Claimed
@ -244,13 +256,16 @@ ERRBADADD BRK
BRK BRK
* MOS COMMANDS
**************
* *FX num(,num(,num)) * *FX num(,num(,num))
********************* * -------------------
STARFX JSR SCANDEC STARFX JSR SCANDEC
BRA STARBYTE1 BRA STARBYTE1
* Commands passed to OSBYTE * Commands passed to OSBYTE
*************************** * -------------------------
STARBYTE JSR XYtoLPTR STARBYTE JSR XYtoLPTR
STARBYTE1 STA OSAREG ; Save OSBYTE number STARBYTE1 STA OSAREG ; Save OSBYTE number
LDA #$00 ; Default X and Y LDA #$00 ; Default X and Y
@ -273,6 +288,9 @@ STARBYTE2 LDY OSYREG
BVS ERRBADCMD BVS ERRBADCMD
RTS RTS
* Line scanning
* -------------
* Scan decimal number * Scan decimal number
SCANDEC JSR SKIPSPC SCANDEC JSR SKIPSPC
JSR SCANDIGIT ; Check first digit JSR SCANDIGIT ; Check first digit
@ -381,8 +399,29 @@ XYtoLPTR STX OSLPTR+0
LDY #0 LDY #0
STARHELP9 RTS STARHELP9 RTS
* Print *HELP text * *BASIC
STARHELP JSR XYtoLPTR ; (OSLPTR),Y=>parameters * ------
STARBASIC LDX MAXROM
:BASICLP JSR ROMSELECT
BIT $8006
BPL :BASICGO ; No service, must be BASIC
DEX
BPL :BASICLP
JMP ERRBADCMD ; No BASIC, give an error
:BASICGO JMP BYTE8E
* *ECHO <GSTRANS string>
* ----------------------
CMDECHO SEC
ECHO0 JSR GSINIT
:ECHOLP1 JSR GSREAD
BCS STARHELP9
JSR OSWRCH
JMP :ECHOLP1
* *HELP (<options>)
* -----------------
STARHELP JSR XYtoLPTR ; Update OSLPTR=>parameters
JSR PRHELLO ; Unify version message JSR PRHELLO ; Unify version message
LDX #<HLPTABLE ; XY=>command table LDX #<HLPTABLE ; XY=>command table
LDY #>HLPTABLE LDY #>HLPTABLE
@ -391,14 +430,15 @@ STARHELP JSR XYtoLPTR ; (OSLPTR),Y=>parameters
LDA $8006 ; Does ROM have service entry? LDA $8006 ; Does ROM have service entry?
BMI STARHELP6 ; Yes, skip to send service call BMI STARHELP6 ; Yes, skip to send service call
JSR OSNEWL JSR OSNEWL
LDA #$09 ; Language name LDX #$09 ; Language name
LDY #$80 ; *TO DO* make this and BYTE8E LDY #$80 ; *TO DO* make this and BYTE8E
JSR PRSTR ; use same code JSR OSPRSTR ; use same code
JSR OSNEWL JSR OSNEWL
STARHELP6 LDY #0 ; (OSLPTR),Y=>parameters STARHELP6 LDY #0 ; (OSLPTR),Y=>parameters
LDA #9 LDA #9
JMP SERVICE ; Pass to sideways ROM(s) JMP SERVICE ; Pass to sideways ROM(s)
* Print *HELP text
HELPHOSTFS LDX #<FSCCOMMAND ; *HELP HOSTFS HELPHOSTFS LDX #<FSCCOMMAND ; *HELP HOSTFS
LDY #>FSCCOMMAND LDY #>FSCCOMMAND
BNE HELPLIST BNE HELPLIST
@ -435,14 +475,25 @@ STARHELP4 LDA #$08
JSR OSWRCH JSR OSWRCH
JMP FORCENL JMP FORCENL
* *KEY <num> <GSTRANS string>
* ---------------------------
STARKEY RTS
* Handle *QUIT command * *QUIT command
* -------------
STARQUIT >>> XF2MAIN,QUIT STARQUIT >>> XF2MAIN,QUIT
STARSAVE LDA #$00 ; Set A=0 - SAVE * FILING COMMANDS
STARLOAD PHA ; Entered with A=$FF - LOAD * ***************
JSR XYtoLPTR ; OSLPTR=>filename
* *LOAD and *SAVE
* ---------------
STARLOAD LDA #$7E ; Set here to A=$7E -> $FF, LOAD
STARSAVE EOR #$81 ; Entered with A=$81 -> $00, SAVE
* Can tweek this after HOSTFS command table updated
PHA
JSR XYtoLPTR ; Update OSLPTR=>filename
JSR SKIPWORD ; Step past filename JSR SKIPWORD ; Step past filename
BNE STARLDSV3 ; filename followed by addr BNE STARLDSV3 ; filename followed by addr
* *
@ -508,7 +559,7 @@ STARLDSVGO LDX OSLPTR+0
* *
* Commands passed to OSFILE * Commands passed to OSFILE
*************************** * -------------------------
STARFILE EOR #$80 STARFILE EOR #$80
STX OSFILECB+0 STX OSFILECB+0
STY OSFILECB+1 STY OSFILECB+1
@ -519,53 +570,20 @@ STARFILE EOR #$80
BNE STARDONE BNE STARDONE
JMP ERRNOTFND JMP ERRNOTFND
STARKEY
STARDONE RTS
* *BASIC
********
STARBASIC LDX MAXROM
:BASICLP JSR ROMSELECT
BIT $8006
BPL :BASICGO ; No service, must be BASIC
DEX
BPL :BASICLP
JMP ERRBADCMD ; No BASIC, give an error
:BASICGO JMP BYTE8E
* *ECHO <GSTRANS string>
************************
ECHO SEC
ECHO0 JSR GSINIT
ECHOLP1 JSR GSREAD
BCS STARDONE
JSR OSWRCH
JMP ECHOLP1
* FILING UTILITIES
* ================
* *CLOSE * *CLOSE
******** * ------
CMDCLOSE LDA #$00 CMDCLOSE LDA #$00
TAY TAY
JSR OSFIND ; Close all files JSR OSFIND ; Close all files
STA FXEXEC ; Ensure Spool/Exec handles cleared STA FXEXEC ; Ensure Spool/Exec handles cleared
STA FXSPOOL STA FXSPOOL
RTS STARDONE RTS
* *TYPE <afsp> * *TYPE <afsp>
************** * ------------
* LPTR=>parameters string * XY=>parameters string, EQ=no parameters
*
CMDTYPE
LDA (OSLPTR),Y ; TEMP
CMP #$0D ; TEMP
BEQ ERRTYPE ; No filename
JSR LPTRtoXY ; TEMP
* *
CMDTYPE BEQ ERRTYPE ; No filename
JSR OPENINFILE ; Try to open file JSR OPENINFILE ; Try to open file
:LOOP JSR OSBGET ; Read a byte :LOOP JSR OSBGET ; Read a byte
BCS TYPDMPEND ; EOF BCS TYPDMPEND ; EOF
@ -593,16 +611,11 @@ ERRDUMP BRK
ASC 'Syntax: DUMP <afsp>' ASC 'Syntax: DUMP <afsp>'
BRK BRK
* Handle *DUMP command * Handle *DUMP command
* LPTR=>parameters string * --------------------
* * XY=>parameters string, EQ=no parameters
CMDDUMP
LDA (OSLPTR),Y ; TEMP
CMP #$0D ; TEMP
BEQ ERRDUMP ; No filename
JSR LPTRtoXY ; TEMP
* *
CMDDUMP BEQ ERRDUMP ; No filename
JSR OPENINFILE ; Try to open file JSR OPENINFILE ; Try to open file
STZ OSNUM+0 ; Offset = zero STZ OSNUM+0 ; Offset = zero
STZ OSNUM+1 STZ OSNUM+1
@ -670,16 +683,11 @@ CMDDUMP
BCC :LOOP1 BCC :LOOP1
JMP TYPCLOSE ; Close and finish JMP TYPCLOSE ; Close and finish
* *SPOOL (<afsp>)
* Handle *SPOOL command * ---------------
* LPTR=>parameters string * XY=>parameters string, EQ=no parameters
*
CMDSPOOL
LDA (OSLPTR),Y ; TEMP
CMP #$0D ; TEMP
PHP ; TEMP
JSR LPTRtoXY ; TEMP
* *
CMDSPOOL PHP ; Save EQ/NE
PHY ; Save Y PHY ; Save Y
LDY FXSPOOL ; Get SPOOL handle LDY FXSPOOL ; Get SPOOL handle
BEQ :SPOOL1 ; Wasn't open, skip closing BEQ :SPOOL1 ; Wasn't open, skip closing
@ -690,20 +698,16 @@ CMDSPOOL
PLP ; Get NE=filename, EQ=no filename PLP ; Get NE=filename, EQ=no filename
BEQ :DONE ; No filename, all done BEQ :DONE ; No filename, all done
LDA #$80 ; A=OPENOUT, for writing LDA #$80 ; A=OPENOUT, for writing
JSR OUTPUTFILE ; Try to open file JSR OPENAFILE ; Try to open file
STA FXSPOOL ; Store SPOOL handle STA FXSPOOL ; Store SPOOL handle
:DONE RTS :DONE RTS
* *EXEC (<afsp>)
* Handle *EXEC command * --------------
* LPTR=>parameters string * XY=>parameters string, EQ=no parameters
*
CMDEXEC
LDA (OSLPTR),Y ; TEMP
CMP #$0D ; TEMP
PHP ; TEMP
JSR LPTRtoXY ; TEMP
* *
CMDEXEC0 LDA #$00 ; Close EXEC file
CMDEXEC PHP ; Save EQ/NE
PHY ; Save Y PHY ; Save Y
LDY FXEXEC ; Get EXEC handle LDY FXEXEC ; Get EXEC handle
BEQ :EXEC1 ; Wasn't open, skip closing it BEQ :EXEC1 ; Wasn't open, skip closing it
@ -718,43 +722,47 @@ CMDEXEC
EXECDONE RTS EXECDONE RTS
OPENINFILE LDA #$40 ; Open for input OPENINFILE LDA #$40 ; Open for input
OUTPUTFILE JSR OSFIND ; Try to open file OPENAFILE JSR OSFIND ; Try to open file
TAY ; Was file opened? TAY ; Was file opened?
BNE EXECDONE ; File opened BNE EXECDONE ; File opened
EXECNOTFND JMP ERRNOTFND ; File not found EXECNOTFND JMP ERRNOTFND ; File not found
* * ZIP SPEED COMMANDS
* ==================
* Handle *FAST command * Handle *FAST command
* --------------------
* Turn Apple II accelerators on * Turn Apple II accelerators on
FAST LDA #$80 ; Apple IIgs CMDFAST LDA #$80 ; Apple IIgs
TSB $C036 TSB $C036
STA GSSPEED STA GSSPEED
JSR UNLOCKZIP ; ZipChip JSR ZIPUNLOCK ; ZipChip
JSR DETECTZIP JSR ZIPDETECT
BCC :NOZIP BCC :NOZIP
STA $C05B ; Enable STA $C05B ; Enable
JMP LOCKZIP BCS ZIPLOCK
:NOZIP STA $C05C ; Ultrawarp fast :NOZIP STA $C05C ; Ultrawarp fast
RTS RTS
*
* Handle *SLOW command * Handle *SLOW command
* --------------------
* Turn Apple II accelerators off * Turn Apple II accelerators off
SLOW LDA #$80 ; Apple IIgs CMDSLOW LDA #$80 ; Apple IIgs
TRB $C036 TRB $C036
STZ GSSPEED STZ GSSPEED
JSR UNLOCKZIP ; ZipChip JSR ZIPUNLOCK ; ZipChip
JSR DETECTZIP JSR ZIPDETECT
BCC :NOZIP BCC :NOZIP
STZ $C05A ; Disable STZ $C05A ; Disable
JMP LOCKZIP BCS ZIPLOCK
:NOZIP STA $C05D ; Ultrawarp slow :NOZIP STA $C05D ; Ultrawarp slow
RTS RTS
* Detect a ZipChip * Detect a ZipChip
* Set carry is ZipChip found * Set carry is ZipChip found
DETECTZIP LDA $C05C ; ZipChip manual p25 DETECTZIP
ZIPDETECT LDA $C05C ; ZipChip manual p25
EOR #$FF EOR #$FF
STA $C05C STA $C05C
CMP $C05C CMP $C05C
@ -762,14 +770,16 @@ DETECTZIP LDA $C05C ; ZipChip manual p25
EOR #$FF EOR #$FF
STA $C05C STA $C05C
CMP $C05C CMP $C05C
BNE :NOZIP BEQ :ZIPOK ; BEQ already has SEC
SEC * BNE :NOZIP
RTS * SEC
* RTS
:NOZIP CLC :NOZIP CLC
RTS :ZIPOK RTS
* Unlock ZipChip registers * Unlock ZipChip registers
UNLOCKZIP PHP UNLOCKZIP
ZIPUNLOCK PHP
SEI ; Timing sensitive SEI ; Timing sensitive
LDA #$5A LDA #$5A
STA $C05A STA $C05A
@ -780,7 +790,8 @@ UNLOCKZIP PHP
RTS RTS
* Lock ZipChip registers * Lock ZipChip registers
LOCKZIP LDA #$A5 LOCKZIP
ZIPLOCK LDA #$A5
STA $C05A STA $C05A
RTS RTS