From 31ae683108f43a18822b139d4e39d9a970ba3980 Mon Sep 17 00:00:00 2001 From: jgharston Date: Sat, 8 Oct 2022 23:39:38 +0100 Subject: [PATCH 1/2] Tidied *HELP Command list now in (nearly) alphabetical order so *HELP is neater. Disabled ROMSEL speed-up. --- auxmem.misc.s | 3 +- auxmem.oscli.s | 166 ++++++++++++++++++++++++++----------------------- mainmem.menu.s | 6 +- 3 files changed, 94 insertions(+), 81 deletions(-) diff --git a/auxmem.misc.s b/auxmem.misc.s index 4be2df3..06cf144 100644 --- a/auxmem.misc.s +++ b/auxmem.misc.s @@ -338,7 +338,8 @@ ROMSELECT * fetching code to $8000. All registers must be preserved. PHP CPX ROMID ; Speed up by checking if - BEQ ROMSELOK ; already paged in +* BEQ ROMSELOK ; already paged in +* BUG: This needs ROMID an invalid value on startup so first access works PHA PHX PHY diff --git a/auxmem.oscli.s b/auxmem.oscli.s index 8c8ffb3..5a9e633 100644 --- a/auxmem.oscli.s +++ b/auxmem.oscli.s @@ -11,100 +11,102 @@ * 25-Oct-2021 Implemented *BASIC. * 07-Oct-2022 *CLOSE is a host command, fixed *EXEC. * 08-Oct-2022 Rewrote *TYPE, *DUMP, *SPOOL, shares code with *EXEC. +* Sorted command table, added *HELP FILE. * COMMAND TABLE *************** * Table structure is: { string, byte OR $80, destword-1 } $00 * Commands are entered with A=command byte with b7=1 -* if b6=1 (LPTR),Y=>parameters -* if b6=0 XY=>parameters -* fsc commands -CMDTABLE ASC 'CAT' ; Must be first command so matches '*.' +* +* Ok, let's get around to sorting these +CMDTABLE +CMDFILE ASC 'CAT' ; Must be first command so matches '*.' DB $85 DW STARFSC-1 ; CAT -> FSC 5, XY=>params - ASC 'RUN' - DB $84 - DW STARFSC-1 ; RUN -> FSC 4, XY=>params + ASC 'CDIR' + DB $88 + DW STARFILE-1 ; CDIR -> OSFILE 08, CBLK=>filename + ASC 'CLOSE' + DB $80 + DW CMDCLOSE-1 ; CLOSE -> (LPTR)=>params + ASC 'DELETE' + DB $86 + DW STARFILE-1 ; DELETE -> OSFILE 06, CBLK=>filename + ASC 'DUMP' + DB $80 + DW CMDDUMP-1 ; DUMP -> (LPTR)=>params + ASC 'EXEC' + DB $80 + DW CMDEXEC-1 ; EXEC -> (LPTR)=>params ASC 'EX' DB $89 DW STARFSC-1 ; EX -> FSC 9, XY=>params ASC 'INFO' DB $8A DW STARFSC-1 ; INFO -> FSC 10, XY=>params - ASC 'RENAME' - DB $8C - DW STARFSC-1 ; RENAME -> FSC 12, XY=>params -* osfile commands ASC 'LOAD' DB $FF DW STARLOAD-1 ; LOAD -> OSFILE FF, CBLK=>filename - ASC 'SAVE' - DB $FF - DW STARSAVE-1 ; SAVE -> OSFILE 00, CBLK=>filename - ASC 'DELETE' - DB $86 - DW STARFILE-1 ; DELETE -> OSFILE 06, CBLK=>filename ASC 'MKDIR' DB $88 DW STARFILE-1 ; MKDIR -> OSFILE 08, CBLK=>filename - ASC 'CDIR' - DB $88 - DW STARFILE-1 ; CDIR -> OSFILE 08, CBLK=>filename -* osbyte commands - ASC 'FX' - DB $80 - DW STARFX-1 ; FX -> OSBYTE A,X,Y (LPTR)=>params ASC 'OPT' DB $8B DW STARBYTE-1 ; OPT -> OSBYTE &8B,X,Y XY=>params -* others - ASC 'QUIT' - DB $80 - DW STARQUIT-1 ; QUIT -> (LPTR)=>params - ASC 'HELP' + ASC 'RUN' + DB $84 + DW STARFSC-1 ; RUN -> FSC 4, XY=>params + ASC 'RENAME' + DB $8C + DW STARFSC-1 ; RENAME -> FSC 12, XY=>params + ASC 'SAVE' DB $FF - DW STARHELP-1 ; HELP -> XY=>params - ASC 'BASIC' - DB $80 - DW STARBASIC-1 ; BASIC -> (LPTR)=>params - ASC 'KEY' - DB $80 - DW STARKEY-1 ; KEY -> (LPTR)=>params - ASC 'ECHO' - DB $80 - DW ECHO-1 ; ECHO -> (LPTR)=>params - ASC 'FAST' - DB $80 - DW FAST-1 ; FAST -> (LPTR)=>params - ASC 'SLOW' - DB $80 - DW SLOW-1 ; SLOW -> (LPTR)=>params -* filing utilities - ASC 'TYPE' - DB $80 - DW CMDTYPE-1 ; TYPE -> (LPTR)=>params - ASC 'DUMP' - DB $80 - DW CMDDUMP-1 ; DUMP -> (LPTR)=>params + DW STARSAVE-1 ; SAVE -> OSFILE 00, CBLK=>filename ASC 'SPOOL' DB $80 DW CMDSPOOL-1 ; SPOOL -> (LPTR)=>params - ASC 'EXEC' + ASC 'TYPE' DB $80 - DW CMDEXEC-1 ; EXEC -> (LPTR)=>params - ASC 'CLOSE' + DW CMDTYPE-1 ; TYPE -> (LPTR)=>params + DB $00 ; Split between HELP lists +* +CMDMOS ASC 'BASIC' DB $80 - DW CMDCLOSE-1 ; CLOSE -> (LPTR)=>params -* BUILD + DW STARBASIC-1 ; BASIC -> (LPTR)=>params + ASC 'ECHO' + DB $80 + DW ECHO-1 ; ECHO -> (LPTR)=>params + ASC 'FX' + DB $80 + DW STARFX-1 ; FX -> OSBYTE A,X,Y (LPTR)=>params + ASC 'FAST' + DB $80 + DW FAST-1 ; FAST -> (LPTR)=>params + ASC 'HELP' + DB $FF + DW STARHELP-1 ; HELP -> XY=>params + ASC 'KEY' + DB $80 + DW STARKEY-1 ; KEY -> (LPTR)=>params + ASC 'QUIT' + DB $80 + DW STARQUIT-1 ; QUIT -> (LPTR)=>params + ASC 'SLOW' + DB $80 + DW SLOW-1 ; SLOW -> (LPTR)=>params * terminator DB $FF + * *HELP TABLE ************* HLPTABLE ASC 'MOS' DB $80 DW HELPMOS-1 ; *HELP MOS + ASC 'FILE' + DB $80 + DW HELPFILE-1 ; *HELP FILE ASC 'HOSTFS' DB $80 DW HELPHOSTFS-1 ; *HELP HOSTFS @@ -139,7 +141,9 @@ CLINEXT JSR CLISTEP ; No match, step to next entry CLINEXT2 JSR CLISTEP ; Step past byte, address JSR CLISTEP JSR CLISTEP - BPL CLILP4 ; Loop to check next + BNE CLINEXT3 + JSR CLISTEP +CLINEXT3 BPL CLILP4 ; Loop to check next RTS ; Exit, A>$7F CLIDOT LDA (OSTEXT,X) @@ -395,13 +399,15 @@ STARHELP6 LDY #0 ; (OSLPTR),Y=>parameters LDA #9 JMP SERVICE ; Pass to sideways ROM(s) - HELPHOSTFS LDX #FSCCOMMAND BNE HELPLIST -HELPMOS LDX #CMDTABLE - +HELPFILE LDX #CMDFILE + BNE HELPLIST +HELPMOS LDX #CMDMOS +* HELPLIST STX OSTEXT+0 ; Start of command table STY OSTEXT+1 LDX #0 @@ -422,6 +428,7 @@ HELPLP4 LDA #32 JSR CLISTEP JSR CLISTEP JSR CLISTEP + BEQ STARHELP4 BPL HELPLP2 STARHELP4 LDA #$08 JSR OSWRCH @@ -581,15 +588,19 @@ TYPCLOSE LDA #$00 ERRTYPE BRK DB $DC ASC 'Syntax: TYPE ' +ERRDUMP BRK + DB $DC + ASC 'Syntax: DUMP ' BRK + * Handle *DUMP command * LPTR=>parameters string * CMDDUMP LDA (OSLPTR),Y ; TEMP CMP #$0D ; TEMP - BEQ :ERRDUMP ; No filename + BEQ ERRDUMP ; No filename JSR LPTRtoXY ; TEMP * JSR OPENINFILE ; Try to open file @@ -598,11 +609,18 @@ CMDDUMP :LOOP1 BIT ESCFLAG BMI TYPEESC ; Escape pressed PHY ; Save handle - LDX OSNUM+0 ; Print file offset - LDY OSNUM+1 - JSR PR2HEX - JSR PRSPACE + TYA + TAX ; X=handle + LDA #$7F + JSR OSBYTE ; Read EOF PLY ; Get handle back + TXA + BNE TYPCLOSE ; At EOF + LDA OSNUM+1 ; Print file offset + JSR PRHEX + LDA OSNUM+0 + JSR PRHEX + JSR PRSPACE LDA #8 ; 8 bytes to dump STA OSNUM+2 TSX ; Reserve bytes on stack @@ -621,7 +639,7 @@ CMDDUMP BNE :LOOP2 ; Loop to do 8 bytes CLC ; CLC=Not EOF BCC :DUMPCHRS ; Jump to display characters -:DUMPEOF LDA #$2A ; EOF met, pad with '**' +:DUMPEOF LDA #'*' ; EOF met, pad with '**' JSR OSWRCH JSR OSWRCH JSR PRSPACE @@ -636,9 +654,9 @@ CMDDUMP PHP ; Save EOF flag CMP #$7F BEQ :DUMPDOT - CMP #$20 + CMP #' ' BCS :DUMPCHR -:DUMPDOT LDA #$2E +:DUMPDOT LDA #'.' :DUMPCHR JSR OSWRCH ; Print character INC OSNUM+0 ; Increment offset BNE :DUMPNXT @@ -651,10 +669,6 @@ CMDDUMP PLP BCC :LOOP1 JMP TYPCLOSE ; Close and finish -:ERRDUMP BRK - DB $DC - ASC 'Syntax: DUMP ' - BRK * Handle *SPOOL command @@ -707,9 +721,7 @@ OPENINFILE LDA #$40 ; Open for input OUTPUTFILE JSR OSFIND ; Try to open file TAY ; Was file opened? BNE EXECDONE ; File opened -EXECNOTFND LDA #$46 - JMP MKERROR ; File not found - +EXECNOTFND JMP ERRNOTFND ; File not found * diff --git a/mainmem.menu.s b/mainmem.menu.s index 2c53edb..5fb8d78 100644 --- a/mainmem.menu.s +++ b/mainmem.menu.s @@ -6,7 +6,7 @@ * 13-Nov-2021 List of selected ROMs kept locally. -ROMMAX EQU $0382 +ROMTOTL EQU $0382 ; Prevent name clash ROMTHIS EQU $0383 ROMADDRS EQU $0384 ; List of ROM filename addresses @@ -49,7 +49,7 @@ ROMMENU JSR HOME ; Clear screen BCC :INITROM2 ; =7, two ROMs LDA #7 ; Load to bank 7 to 0 LDY #0 ; Starting at ROM 0 -:INITROM2 STA ROMMAX +:INITROM2 STA ROMTOTL ASL A TAX ; X=>ROM address table TYA @@ -69,7 +69,7 @@ ROMMENU JSR HOME ; Clear screen SELECTROM >>> ENTMAIN CMP ROMTHIS BEQ :SELECTDONE ; Already selected - CMP ROMMAX + CMP ROMTOTL BCC :GETROM BNE :SELECTDONE ; Out of range :GETROM PHA From 901ad6678cdfd19fcdc4fa0590182805e932aeb3 Mon Sep 17 00:00:00 2001 From: jgharston Date: Sun, 9 Oct 2022 15:24:36 +0100 Subject: [PATCH 2/2] Sorted HOSTFS commands into order Sorted HOSTFS commands into order, and slight tweek so I can concentrate on oscli.s --- auxmem.hostfs.s | 73 +++++++------ auxmem.oscli.s | 271 +++++++++++++++++++++++++----------------------- 2 files changed, 183 insertions(+), 161 deletions(-) diff --git a/auxmem.hostfs.s b/auxmem.hostfs.s index 5340927..c0e384c 100644 --- a/auxmem.hostfs.s +++ b/auxmem.hostfs.s @@ -22,6 +22,7 @@ * 02-Oct-2021 ACCESS uses generic access byte parsing. * PRACCESS shares code with ACCESS. * 03-Oct-2021 PARSNAME checks filename length<64. +* 09-Oct-2022 Sorted commands into order. * $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 * called via OSFILE, OSFSC, etc. +* Syntax is: +* - ambiguous file specifier, acts on a single file, error if not file, wildcards allowed +* - unambiguous file specifier, acts on a single file, error if not file, wildcards not allowed +* - directory, error if not directory +* - drive, eg :1 :2 :61, error if not drive +* <*objspec*> - able to act on multiple objects, any object type, wildcards allowed +* - access string +* - disk title +* (<...>) - optional * -FSCCOMMAND ASC 'CHDIR' - DB $80 - DW FSCCHDIR-1 ; CHDIR <*objspec*>, LPTR=>params +FSCCOMMAND ASC 'ACCESS' + DB $FF + DW FSCACCESS-1 ; ACCESS <*objspec*> <access>, LPTR=>params ASC 'CD' - DB $80 - DW FSCCHDIR-1 ; CD <*objspec*> , LPTR=>params - ASC 'DIR' - DB $80 - DW FSCCHDIR-1 ; DIR <*objspec*>, 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 + DB $FF + DW FSCCHDIR-1 ; CD <dir> , LPTR=>params + ASC 'CHDIR' + DB $FF + DW FSCCHDIR-1 ; CHDIR <dir>, LPTR=>params ASC 'COPY' - DB $80 - DW FSCCOPY-1 ; COPY <listspec> <*objspec*>, LPTR=>params + DB $FF + 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 @@ -679,7 +689,7 @@ FSCRENAME JSR PARSNAME ; Copy Arg1->MOSFILE >>> XF2MAIN,RENFILE :SYNTAX BRK DB $DC - ASC 'Syntax: RENAME <objspec> <objspec>' + ASC 'Syntax: RENAME <oldspec> <newspec>' BRK * ProDOS returns $40 (Bad filename) for bad renames. * 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 :SYNTAX BRK DB $DC - ASC 'Syntax: COPY <listspec> <*objspec*>' + ASC 'Syntax: COPY <*objspec*> <dest>' BRK @@ -714,7 +724,7 @@ FSCCHDIR JSR PARSLPTR ; Copy filename->MOSFILE FSCCHDIR2 >>> XF2MAIN,SETPFX ERRCHDIR BRK DB $DC - ASC 'Syntax: DIR <*objspec*>' + ASC 'Syntax: DIR <dir>' BRK @@ -726,7 +736,7 @@ FSCDRIVE JSR PARSLPTR ; Copy arg->MOSFILE BNE FSCCHDIR2 ; Pass on as CHDIR :SYNTAX BRK DB $DC - ASC 'Syntax: DRIVE <drv> (eg: DRIVE :61)' + ASC 'Syntax: DRIVE <drv>' BRK @@ -815,7 +825,7 @@ FSCACCESS JSR PARSLPTR ; Copy filename->MOSFILE >>> XF2MAIN,SETPERM :SYNTAX BRK DB $DC - ASC 'Syntax: ACCESS <listspec> <L|W|R>' + ASC 'Syntax: ACCESS <*objspec*> <L|W|R>' BRK @@ -828,12 +838,13 @@ DESTROY JSR PARSLPTR ; Copy filename->MOSFILE >>> XF2MAIN,MULTIDEL :SYNTAX BRK DB $DC - ASC 'Syntax: DESTROY <listspec>' + ASC 'Syntax: DESTROY <*objspec*>' BRK * Handle *TITLE command * LPTR=>parameters string +* Syntax: *TITLE (<drive>) <title> * FSCTITLE RTS diff --git a/auxmem.oscli.s b/auxmem.oscli.s index 5a9e633..f9bcb04 100644 --- a/auxmem.oscli.s +++ b/auxmem.oscli.s @@ -1,5 +1,5 @@ * AUXMEM.OSCLI.S -* (c) BOBBI 2021 GPLv3 +* (c) BOBBI 2021-2022 GPLv3 * * Handle OSCLI system calls @@ -12,12 +12,16 @@ * 07-Oct-2022 *CLOSE is a host command, fixed *EXEC. * 08-Oct-2022 Rewrote *TYPE, *DUMP, *SPOOL, shares code with *EXEC. * Sorted command table, added *HELP FILE. +* Optimised CLILOOK dispatcher. * COMMAND TABLE *************** * Table structure is: { string, byte OR $80, destword-1 } $00 * 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 CMDTABLE @@ -28,17 +32,17 @@ CMDFILE ASC 'CAT' ; Must be first command so matches '*.' DB $88 DW STARFILE-1 ; CDIR -> OSFILE 08, CBLK=>filename ASC 'CLOSE' - DB $80 + DB $FF DW CMDCLOSE-1 ; CLOSE -> (LPTR)=>params ASC 'DELETE' DB $86 DW STARFILE-1 ; DELETE -> OSFILE 06, CBLK=>filename ASC 'DUMP' - DB $80 - DW CMDDUMP-1 ; DUMP -> (LPTR)=>params + DB $81 ; TO DO + DW CMDDUMP-1 ; DUMP -> XY=>params ASC 'EXEC' - DB $80 - DW CMDEXEC-1 ; EXEC -> (LPTR)=>params + DB $81 ; TO DO + DW CMDEXEC-1 ; EXEC -> XY=>params ASC 'EX' DB $89 DW STARFSC-1 ; EX -> FSC 9, XY=>params @@ -46,7 +50,7 @@ CMDFILE ASC 'CAT' ; Must be first command so matches '*.' DB $8A DW STARFSC-1 ; INFO -> FSC 10, XY=>params ASC 'LOAD' - DB $FF + DB $81 DW STARLOAD-1 ; LOAD -> OSFILE FF, CBLK=>filename ASC 'MKDIR' DB $88 @@ -61,41 +65,42 @@ CMDFILE ASC 'CAT' ; Must be first command so matches '*.' DB $8C DW STARFSC-1 ; RENAME -> FSC 12, XY=>params ASC 'SAVE' - DB $FF + DB $81 DW STARSAVE-1 ; SAVE -> OSFILE 00, CBLK=>filename ASC 'SPOOL' - DB $80 - DW CMDSPOOL-1 ; SPOOL -> (LPTR)=>params + DB $81 ; TO DO + DW CMDSPOOL-1 ; SPOOL -> XY=>params ASC 'TYPE' - DB $80 - DW CMDTYPE-1 ; TYPE -> (LPTR)=>params - DB $00 ; Split between HELP lists + DB $81 ; TO DO + DW CMDTYPE-1 ; TYPE -> XY=>params +* Split between HELP lists + DB $00 * CMDMOS ASC 'BASIC' - DB $80 + DB $FF DW STARBASIC-1 ; BASIC -> (LPTR)=>params ASC 'ECHO' - DB $80 - DW ECHO-1 ; ECHO -> (LPTR)=>params + DB $FF + DW CMDECHO-1 ; ECHO -> (LPTR)=>params ASC 'FX' - DB $80 + DB $FF DW STARFX-1 ; FX -> OSBYTE A,X,Y (LPTR)=>params ASC 'FAST' - DB $80 - DW FAST-1 ; FAST -> (LPTR)=>params - ASC 'HELP' DB $FF + DW CMDFAST-1 ; FAST -> (LPTR)=>params + ASC 'HELP' + DB $81 DW STARHELP-1 ; HELP -> XY=>params ASC 'KEY' - DB $80 + DB $FF DW STARKEY-1 ; KEY -> (LPTR)=>params ASC 'QUIT' - DB $80 + DB $FF DW STARQUIT-1 ; QUIT -> (LPTR)=>params ASC 'SLOW' - DB $80 - DW SLOW-1 ; SLOW -> (LPTR)=>params -* terminator + DB $FF + DW CMDSLOW-1 ; SLOW -> (LPTR)=>params +* Table terminator DB $FF @@ -163,21 +168,28 @@ CLIMATCH2 JSR CLIMATCH3 ; Call the routine RTS ; Return A=0 to claim CLIMATCH3 JSR SKIPSPC ; (OSLPTR),Y=>parameters + PHP ; Save EQ=end of line LDA (OSTEXT,X) ; Command byte - PHA - JSR CLISTEP ; Address low byte STA OSTEMP - JSR CLISTEP ; Address high byte - PLX ; Get command byte - PHA ; Push address high - LDA OSTEMP - PHA ; Push address low - TXA ; Command byte + JSR CLISTEP ; Address low byte 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 - 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 -CLICALL PLA ; A=command parameter +CLICALL LDA OSTEMP ; A=command parameter + PLP ; EQ=no parameters RTS ; Call command routine CLISTEP INC OSTEXT+0,X ; Point to next table byte @@ -220,7 +232,7 @@ CLISLASH JSR SKIPSPC1 BEQ CLIDONE ; */<cr> LDA #$02 BNE STARFSC2 ; FSC 2 = */filename - +* CLIUNKNOWN LDA #$04 JSR SERVICE ; Offer to sideways ROM(s) BEQ CLIDONE ; Claimed @@ -244,13 +256,16 @@ ERRBADADD BRK BRK +* MOS COMMANDS +************** + * *FX num(,num(,num)) -********************* +* ------------------- STARFX JSR SCANDEC BRA STARBYTE1 * Commands passed to OSBYTE -*************************** +* ------------------------- STARBYTE JSR XYtoLPTR STARBYTE1 STA OSAREG ; Save OSBYTE number LDA #$00 ; Default X and Y @@ -273,6 +288,9 @@ STARBYTE2 LDY OSYREG BVS ERRBADCMD RTS +* Line scanning +* ------------- + * Scan decimal number SCANDEC JSR SKIPSPC JSR SCANDIGIT ; Check first digit @@ -381,8 +399,29 @@ XYtoLPTR STX OSLPTR+0 LDY #0 STARHELP9 RTS -* Print *HELP text -STARHELP JSR XYtoLPTR ; (OSLPTR),Y=>parameters +* *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> +* ---------------------- +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 LDX #<HLPTABLE ; XY=>command table LDY #>HLPTABLE @@ -391,14 +430,15 @@ STARHELP JSR XYtoLPTR ; (OSLPTR),Y=>parameters LDA $8006 ; Does ROM have service entry? BMI STARHELP6 ; Yes, skip to send service call JSR OSNEWL - LDA #$09 ; Language name + LDX #$09 ; Language name LDY #$80 ; *TO DO* make this and BYTE8E - JSR PRSTR ; use same code + JSR OSPRSTR ; use same code JSR OSNEWL STARHELP6 LDY #0 ; (OSLPTR),Y=>parameters LDA #9 JMP SERVICE ; Pass to sideways ROM(s) +* Print *HELP text HELPHOSTFS LDX #<FSCCOMMAND ; *HELP HOSTFS LDY #>FSCCOMMAND BNE HELPLIST @@ -435,14 +475,25 @@ STARHELP4 LDA #$08 JSR OSWRCH JMP FORCENL +* *KEY <num> <GSTRANS string> +* --------------------------- +STARKEY RTS -* Handle *QUIT command +* *QUIT command +* ------------- STARQUIT >>> XF2MAIN,QUIT -STARSAVE LDA #$00 ; Set A=0 - SAVE -STARLOAD PHA ; Entered with A=$FF - LOAD - JSR XYtoLPTR ; OSLPTR=>filename +* FILING COMMANDS +* *************** + +* *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 BNE STARLDSV3 ; filename followed by addr * @@ -508,7 +559,7 @@ STARLDSVGO LDX OSLPTR+0 * * Commands passed to OSFILE -*************************** +* ------------------------- STARFILE EOR #$80 STX OSFILECB+0 STY OSFILECB+1 @@ -519,53 +570,20 @@ STARFILE EOR #$80 BNE STARDONE 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 -******** +* ------ CMDCLOSE LDA #$00 TAY JSR OSFIND ; Close all files STA FXEXEC ; Ensure Spool/Exec handles cleared STA FXSPOOL - RTS +STARDONE RTS * *TYPE <afsp> -************** -* LPTR=>parameters string -* -CMDTYPE - LDA (OSLPTR),Y ; TEMP - CMP #$0D ; TEMP - BEQ ERRTYPE ; No filename - JSR LPTRtoXY ; TEMP +* ------------ +* XY=>parameters string, EQ=no parameters * +CMDTYPE BEQ ERRTYPE ; No filename JSR OPENINFILE ; Try to open file :LOOP JSR OSBGET ; Read a byte BCS TYPDMPEND ; EOF @@ -593,16 +611,11 @@ ERRDUMP BRK ASC 'Syntax: DUMP <afsp>' BRK - * Handle *DUMP command -* LPTR=>parameters string -* -CMDDUMP - LDA (OSLPTR),Y ; TEMP - CMP #$0D ; TEMP - BEQ ERRDUMP ; No filename - JSR LPTRtoXY ; TEMP +* -------------------- +* XY=>parameters string, EQ=no parameters * +CMDDUMP BEQ ERRDUMP ; No filename JSR OPENINFILE ; Try to open file STZ OSNUM+0 ; Offset = zero STZ OSNUM+1 @@ -670,16 +683,11 @@ CMDDUMP BCC :LOOP1 JMP TYPCLOSE ; Close and finish - -* Handle *SPOOL command -* LPTR=>parameters string -* -CMDSPOOL - LDA (OSLPTR),Y ; TEMP - CMP #$0D ; TEMP - PHP ; TEMP - JSR LPTRtoXY ; TEMP +* *SPOOL (<afsp>) +* --------------- +* XY=>parameters string, EQ=no parameters * +CMDSPOOL PHP ; Save EQ/NE PHY ; Save Y LDY FXSPOOL ; Get SPOOL handle BEQ :SPOOL1 ; Wasn't open, skip closing @@ -690,20 +698,16 @@ CMDSPOOL PLP ; Get NE=filename, EQ=no filename BEQ :DONE ; No filename, all done LDA #$80 ; A=OPENOUT, for writing - JSR OUTPUTFILE ; Try to open file + JSR OPENAFILE ; Try to open file STA FXSPOOL ; Store SPOOL handle :DONE RTS - -* Handle *EXEC command -* LPTR=>parameters string -* -CMDEXEC - LDA (OSLPTR),Y ; TEMP - CMP #$0D ; TEMP - PHP ; TEMP - JSR LPTRtoXY ; TEMP +* *EXEC (<afsp>) +* -------------- +* XY=>parameters string, EQ=no parameters * +CMDEXEC0 LDA #$00 ; Close EXEC file +CMDEXEC PHP ; Save EQ/NE PHY ; Save Y LDY FXEXEC ; Get EXEC handle BEQ :EXEC1 ; Wasn't open, skip closing it @@ -718,43 +722,47 @@ CMDEXEC EXECDONE RTS OPENINFILE LDA #$40 ; Open for input -OUTPUTFILE JSR OSFIND ; Try to open file +OPENAFILE JSR OSFIND ; Try to open file TAY ; Was file opened? BNE EXECDONE ; File opened EXECNOTFND JMP ERRNOTFND ; File not found -* +* ZIP SPEED COMMANDS +* ================== + * Handle *FAST command +* -------------------- * Turn Apple II accelerators on -FAST LDA #$80 ; Apple IIgs +CMDFAST LDA #$80 ; Apple IIgs TSB $C036 STA GSSPEED - JSR UNLOCKZIP ; ZipChip - JSR DETECTZIP + JSR ZIPUNLOCK ; ZipChip + JSR ZIPDETECT BCC :NOZIP STA $C05B ; Enable - JMP LOCKZIP + BCS ZIPLOCK :NOZIP STA $C05C ; Ultrawarp fast RTS -* * Handle *SLOW command +* -------------------- * Turn Apple II accelerators off -SLOW LDA #$80 ; Apple IIgs +CMDSLOW LDA #$80 ; Apple IIgs TRB $C036 STZ GSSPEED - JSR UNLOCKZIP ; ZipChip - JSR DETECTZIP + JSR ZIPUNLOCK ; ZipChip + JSR ZIPDETECT BCC :NOZIP STZ $C05A ; Disable - JMP LOCKZIP + BCS ZIPLOCK :NOZIP STA $C05D ; Ultrawarp slow RTS * Detect a ZipChip * Set carry is ZipChip found -DETECTZIP LDA $C05C ; ZipChip manual p25 +DETECTZIP +ZIPDETECT LDA $C05C ; ZipChip manual p25 EOR #$FF STA $C05C CMP $C05C @@ -762,14 +770,16 @@ DETECTZIP LDA $C05C ; ZipChip manual p25 EOR #$FF STA $C05C CMP $C05C - BNE :NOZIP - SEC - RTS + BEQ :ZIPOK ; BEQ already has SEC +* BNE :NOZIP +* SEC +* RTS :NOZIP CLC - RTS +:ZIPOK RTS * Unlock ZipChip registers -UNLOCKZIP PHP +UNLOCKZIP +ZIPUNLOCK PHP SEI ; Timing sensitive LDA #$5A STA $C05A @@ -780,7 +790,8 @@ UNLOCKZIP PHP RTS * Lock ZipChip registers -LOCKZIP LDA #$A5 +LOCKZIP +ZIPLOCK LDA #$A5 STA $C05A RTS