mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2024-09-27 16:55:31 +00:00
Merge PR 140 'More fsc updates'
This commit is contained in:
parent
5d7f8cd0c6
commit
38bcf9b4dd
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
@ -14,7 +14,7 @@
|
||||
*************************
|
||||
* OSBYTE DISPATCH TABLE *
|
||||
*************************
|
||||
BYTWRDADDR DW BYTE00XX ; OSBYTE 0 - Machine host
|
||||
BYTWRDADDR DW BYTE00 ; OSBYTE 0 - Machine host - INIT.s
|
||||
DW BYTE01 ; OSBYTE 1 - User flag
|
||||
DW BYTE02 ; OSBYTE 2 - OSRDCH source
|
||||
DW BYTE03 ; OSBYTE 3 - OSWRCH dest
|
||||
@ -248,12 +248,12 @@ WORD00 IF MAXLEN-OSTEXT-2
|
||||
BPL :WORD00LP2
|
||||
INY ; Initial line length = zero
|
||||
ELSE
|
||||
LDA (OSCTRL),Y ; Copy control block
|
||||
STA OSTEXT,Y ; 0,1 => text
|
||||
INY ; 2 = MAXLEN
|
||||
CPY #$05 ; 3 = MINCHAR
|
||||
BCC WORD00 ; 4 = MAXCHAR
|
||||
LDY #$00 ; Initial line length = zero
|
||||
LDY #$04 ; Copy control block
|
||||
:WORD00LP3 LDA (OSCTRL),Y ; 0,1 => text
|
||||
STA OSTEXT,Y ; 2 = MAXLEN
|
||||
DEY ; 3 = MINCHAR
|
||||
BPL :WORD00LP3 ; 4 = MAXCHAR
|
||||
INY ; Initial line length = zero
|
||||
FIN
|
||||
* STY FXLINES ; Reset line counter
|
||||
CLI
|
||||
@ -467,38 +467,3 @@ OSWORDM ASC 'OSWORD($'
|
||||
DB $00
|
||||
OSBM2 ASC ').'
|
||||
DB $00
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -26,10 +26,8 @@
|
||||
* 09-Sep-2021 Moved keyboard OSBYTEs to here.
|
||||
* 12-Sep-2021 COPY calls new VDU entry point.
|
||||
* 15-Sep-2021 INKEY(0) tests once and returns immediately.
|
||||
* TO DO: CHKESC should go through translations before testing.
|
||||
|
||||
* TO DO: move these to VDU
|
||||
* OLDCHAR EQU OSKBD1 ; *TEMP* ; character under cursor
|
||||
* COPYCHAR EQU OSKBD2 ; *TEMP* ; character under copy cursor
|
||||
|
||||
FLASHER EQU BYTEVARBASE+176 ; VSync counter for flashing cursor
|
||||
FXEXEC EQU BYTEVARBASE+198
|
||||
@ -56,6 +54,7 @@ WRCHHND PHA
|
||||
PHX
|
||||
PHY
|
||||
* TO DO Check any output redirections
|
||||
* PHA
|
||||
|
||||
JSR OUTCHAR
|
||||
* TO DO Check any printer output
|
||||
@ -444,33 +443,3 @@ BYTE7DOK RTS
|
||||
|
||||
BYTE76 LDX #$00 ; Update LEDs and return X=SHIFT
|
||||
RTS ; Not possible with Apple
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
405
auxmem.hostfs.s
405
auxmem.hostfs.s
@ -16,6 +16,8 @@
|
||||
* 23-Oct-2021 Uses single dispatch to mainmem FILE handler.
|
||||
* 24-Oct-2021 Tidied FSC handler. Optimised CATALOG, CAT shows access.
|
||||
* *EX can use two columns. *OPT stored.
|
||||
* 29-Oct-2021 Bad *command->Bad command, bad *RUN->File not found.
|
||||
* Optimised RENAME, COPY, CHDIR, DRIVE. FREE<cr> allowed.
|
||||
|
||||
|
||||
* $B0-$BF Temporary filing system workspace
|
||||
@ -42,12 +44,7 @@ FINDHND PHX
|
||||
JSR PARSNAME ; Copy filename->MOSFILE
|
||||
PLA ; Recover options
|
||||
>>> XF2MAIN,OFILE
|
||||
:CLOSE
|
||||
* >>> WRTMAIN
|
||||
* STY MOSFILE ; Write file number
|
||||
* >>> WRTAUX
|
||||
>>> XF2MAIN,CFILE ; Pass A,Y to main code
|
||||
|
||||
:CLOSE >>> XF2MAIN,CFILE ; Pass A,Y to main code
|
||||
OSFINDRET >>> ENTAUX
|
||||
JSR CHKERROR ; Check if error returned
|
||||
PLY ; Value of A on entry
|
||||
@ -68,9 +65,6 @@ OSGBPBM ASC 'OSGBPB.'
|
||||
BPUTHND PHX
|
||||
PHY
|
||||
PHA ; Stash char to write
|
||||
* >>> WRTMAIN
|
||||
* STY MOSFILE ; File reference number
|
||||
* >>> WRTAUX
|
||||
>>> XF2MAIN,FILEPUT ; Pass A,Y to main code
|
||||
OSBPUTRET >>> ENTAUX
|
||||
JSR CHKERROR
|
||||
@ -83,9 +77,6 @@ OSBPUTRET >>> ENTAUX
|
||||
* OSBGET - read one byte from an open file
|
||||
BGETHND PHX
|
||||
PHY
|
||||
* >>> WRTMAIN
|
||||
* STY MOSFILE ; File ref number
|
||||
* >>> WRTAUX
|
||||
>>> XF2MAIN,FILEGET ; Pass A,Y to main code
|
||||
OSBGETRET >>> ENTAUX
|
||||
CPY #$01
|
||||
@ -143,22 +134,11 @@ ARGSHND PHX
|
||||
|
||||
:S2 CMP #$FF ; Y=0,A=FF => flush all files
|
||||
BNE :IEXIT
|
||||
* >>> WRTMAIN
|
||||
* STZ MOSFILE ; Zero means flush all
|
||||
* >>> WRTAUX
|
||||
JMP :FLUSH
|
||||
:IEXIT JMP :EXIT ; Exit preserved
|
||||
|
||||
:HASFILE
|
||||
* >>> WRTMAIN
|
||||
* STY MOSFILE ; File ref num
|
||||
* STX MOSFILE+1 ; Pointer to ZP control block
|
||||
* >>> WRTAUX
|
||||
CMP #$00 ; Y!=0,A=0 => read seq ptr
|
||||
:HASFILE CMP #$00 ; Y!=0,A=0 => read seq ptr
|
||||
BNE :S3
|
||||
* >>> WRTMAIN
|
||||
* STZ MOSFILE+2 ; 0 means get pos
|
||||
* >>> WRTAUX
|
||||
TXA
|
||||
>>> XF2MAIN,TELL ; A=ZP, Y=channel
|
||||
|
||||
@ -177,9 +157,6 @@ ARGSHND PHX
|
||||
|
||||
:S4 CMP #$02 ; Y!=0,A=2 => read file len
|
||||
BNE :S5
|
||||
* >>> WRTMAIN
|
||||
* STA MOSFILE+2 ; Non-zero means get len
|
||||
* >>> WRTAUX
|
||||
TXA
|
||||
>>> XF2MAIN,SIZE ; A=ZP, Y=channel
|
||||
|
||||
@ -241,34 +218,12 @@ FILEHND PHX
|
||||
PLA ; Get action back
|
||||
>>> XF2MAIN,CALLFILE
|
||||
|
||||
* BEQ :SAVE ; A=00 -> SAVE
|
||||
* CMP #$FF
|
||||
* BEQ :LOAD ; A=FF -> LOAD
|
||||
* CMP #$06
|
||||
* BEQ :DELETE ; A=06 -> DELETE
|
||||
* BCC :JMPINFO ; A=01-05 -> INFO
|
||||
* CMP #$08
|
||||
* BEQ :MKDIR ; A=08 -> MKDIR
|
||||
*
|
||||
* PLY ; Not implemented, return unchanged
|
||||
* PLX
|
||||
* RTS
|
||||
*
|
||||
*:JMPINFO JMP :INFO
|
||||
*:SAVE >>> XF2MAIN,SAVEFILE
|
||||
*:LOAD >>> XF2MAIN,LOADFILE
|
||||
*:DELETE >>> XF2MAIN,DELFILE
|
||||
*:INFO >>> XF2MAIN,INFOFILE
|
||||
*:MKDIR >>> XF2MAIN,MAKEDIR
|
||||
|
||||
* On return here, A<$20 return to caller, A>$1F ProDOS error
|
||||
OSFILERET >>> ENTAUX
|
||||
JSR CHKERROR ; Check if error returned
|
||||
PHA
|
||||
LDY #$11 ; Copy updated control block back
|
||||
:L3
|
||||
* LDA AUXBLK,Y ; Mainmem left it in AUXBLK
|
||||
LDA OSFILECB,Y ; Mainmem left it in OSFILECB
|
||||
:L3 LDA OSFILECB,Y ; Mainmem left it in OSFILECB
|
||||
STA (FSCTRL),Y
|
||||
DEY
|
||||
BPL :L3
|
||||
@ -349,32 +304,14 @@ FSCHND CMP #13
|
||||
PHA
|
||||
LDA FSCDISPATCH+0,X
|
||||
PHA
|
||||
LDX FSXREG
|
||||
LDA FSAREG
|
||||
FSCNULL LDA FSAREG
|
||||
LDY FSYREG
|
||||
LDX FSXREG ; Set EQ/NE from X
|
||||
RTS
|
||||
|
||||
* CMP #$00
|
||||
* BEQ FSOPT ; A=0 - *OPT
|
||||
* CMP #$01
|
||||
* BEQ CHKEOF ; A=1 - Read EOF
|
||||
* CMP #$02
|
||||
* BEQ FSCRUN ; A=2 - */filename
|
||||
* CMP #$03
|
||||
* BEQ FSC03 ; A=3 - *command
|
||||
* CMP #$04
|
||||
* BEQ FSCRUN ; A=4 - *RUN
|
||||
* CMP #$05
|
||||
* BEQ JMPCAT ; A=5 - *CAT
|
||||
* CMP #$09
|
||||
* BEQ JMPCAT ; A=9 - *EX
|
||||
* CMP #$0A
|
||||
* BEQ JMPCAT ; A=10 - *INFO
|
||||
* CMP #$0C
|
||||
* BEQ FSCREN ; A=12 - *RENAME
|
||||
|
||||
* OSFSC 00 - *OPT function
|
||||
FSCOPT TXA
|
||||
BEQ :OPT0
|
||||
* Entered with A=$00 and EQ/NE from X
|
||||
FSCOPT BEQ :OPT0
|
||||
LDA FSFLAG2
|
||||
AND :OPTMSK-1,X
|
||||
EOR :OPTSET-0,Y
|
||||
@ -385,34 +322,25 @@ FSCOPT TXA
|
||||
:OPTMSK DB $3F,$CF,$F3,$FC
|
||||
:OPTSET DB $00,$55,$AA,$FF
|
||||
|
||||
*FSCDRIVE JMP DRIVE
|
||||
*
|
||||
*FSCFREE JMP FREE
|
||||
*
|
||||
*FSCACCESS JMP ACCESS
|
||||
*
|
||||
*FSCDESTROY JMP DESTROY
|
||||
*
|
||||
*JMPCAT JMP FSCCAT
|
||||
|
||||
FSCUKN PHA
|
||||
FSCUKN
|
||||
DO DEBUG
|
||||
PHA
|
||||
LDA #<OSFSCM
|
||||
LDY #>OSFSCM
|
||||
JSR PRSTR
|
||||
PLA
|
||||
FSCNULL RTS
|
||||
FIN
|
||||
FSCRET RTS
|
||||
DO DEBUG
|
||||
OSFSCM ASC 'OSFSC.'
|
||||
DB $00
|
||||
FIN
|
||||
|
||||
|
||||
* OSFSC 01 - Read EOF function
|
||||
* X=File ref number
|
||||
*
|
||||
CHKEOF
|
||||
* >>> WRTMAIN
|
||||
* STX MOSFILE ; File reference number
|
||||
* >>> WRTAUX
|
||||
TXA ; A=channel
|
||||
CHKEOF TXA ; A=channel
|
||||
>>> XF2MAIN,FILEEOF
|
||||
CHKEOFRET >>> ENTAUX
|
||||
TAX ; Return code -> X
|
||||
@ -427,13 +355,15 @@ FSC03 JSR XYtoLPTR
|
||||
LDX #<FSCCOMMAND
|
||||
LDY #>FSCCOMMAND
|
||||
JSR CLILOOKUP
|
||||
BEQ FSCNULL ; Matched, return
|
||||
BEQ FSCRET ; Matched, return
|
||||
JSR LPTRtoXY ; Fall through to *RUN
|
||||
LDA #$FE ; Will become A=$05
|
||||
|
||||
* OSFSC 04 - *RUN filename
|
||||
* OSFSC 02 - */filename, OSFSC 04 - *RUN filename
|
||||
* XY=>pathname
|
||||
*
|
||||
FSCRUN STX OSFILECB ; Pointer to filename
|
||||
FSCRUN PHA
|
||||
STX OSFILECB+0 ; Pointer to filename
|
||||
STY OSFILECB+1
|
||||
JSR XYtoLPTR
|
||||
FSCRUNLP LDA (OSLPTR),Y ; Look for command line
|
||||
@ -445,22 +375,26 @@ FSCRUNLP LDA (OSLPTR),Y ; Look for command line
|
||||
JSR LPTRtoXY
|
||||
STX FSCMDLINE+0 ; Set CMDLINE=>command line
|
||||
STY FSCMDLINE+1 ; Collected by OSARGS 1,0
|
||||
LDA #$FF ; OSFILE load flag
|
||||
PLA
|
||||
EOR #$FB ; Convert $FE->$05, $02/$04->$Fx
|
||||
BMI :FSCRUN2 ; *RUN, go direct to LOAD
|
||||
JSR :FSCCALL ; Do an initial INFO
|
||||
DEC A ; $01->$00
|
||||
BEQ :FSCRUN2 ; A file, load and run it
|
||||
JMP FSCNULL ; Not a file, return all preserved
|
||||
:FSCRUN2 LDA #$FF ; A=LOAD
|
||||
STA OSFILECB+6 ; Use file's address
|
||||
LDX #<OSFILECB ; Pointer to control block
|
||||
LDY #>OSFILECB
|
||||
JSR OSFILE
|
||||
JSR :CALL
|
||||
JSR :FSCCALL ; LOAD the file
|
||||
JSR :CALLCODE ; Call the loaded code
|
||||
LDA #$00 ; A=0 on return
|
||||
RTS
|
||||
:CALL LDA #$01 ; A=1 - entering code
|
||||
:FSCCALL LDX #<OSFILECB ; Pointer to control block
|
||||
LDY #>OSFILECB
|
||||
JMP OSFILE
|
||||
:CALLCODE LDA #$01 ; A=1 - entering code
|
||||
SEC ; Not from RESET
|
||||
JMP (OSFILECB+6) ; Jump to EXEC addr
|
||||
|
||||
* FSCREN JMP RENAME
|
||||
*
|
||||
* FSCCHDIR JMP CHDIR
|
||||
|
||||
|
||||
* Display catalog entries and info
|
||||
* A=5 *CAT, A=9 *EX, A=10 *INFO
|
||||
@ -485,7 +419,6 @@ STARCATRET >>> ENTAUX
|
||||
* Print one block of a catalog. Called by CATALOG
|
||||
* Block is in AUXBLK
|
||||
PRONEBLK >>> ENTAUX
|
||||
*
|
||||
LDA #<AUXBLK+4 ; FSPTR1=>first entry
|
||||
STA FSPTR1+0
|
||||
LDA #>AUXBLK+4
|
||||
@ -495,28 +428,14 @@ PRONEBLK >>> ENTAUX
|
||||
:CATLP LDY #$00
|
||||
LDA (FSPTR1),Y ; Get storage type
|
||||
CMP #$E0
|
||||
* PHP
|
||||
BCC :NOTKEY ; Not a key block
|
||||
|
||||
* LDA AUXBLK+4 ; Get storage type
|
||||
* AND #$E0 ; Mask 3 MSBs
|
||||
* CMP #$E0
|
||||
* BNE :NOTKEY ; Not a key block
|
||||
|
||||
* Print directory name
|
||||
LDA #<:DIRM
|
||||
LDY #>:DIRM
|
||||
JSR PRSTR
|
||||
SEC
|
||||
:NOTKEY
|
||||
* LDA #$00
|
||||
*:L1 PHA
|
||||
* PHP
|
||||
JSR PRONEENT ; CC=entry, CS=header
|
||||
* PLP
|
||||
* BCC :L1X
|
||||
* JSR OSNEWL
|
||||
*:L1X
|
||||
:NOTKEY JSR PRONEENT ; CC=entry, CS=header
|
||||
CLC ; Step to next entry
|
||||
LDA FSPTR1+0
|
||||
ADC #$27
|
||||
@ -526,13 +445,6 @@ PRONEBLK >>> ENTAUX
|
||||
STA FSPTR1+1
|
||||
DEC FSNUM
|
||||
BNE :CATLP ; Loop for all entries
|
||||
|
||||
* PLA
|
||||
* INC
|
||||
* CMP #13 ; Number of dirents in block
|
||||
* CLC
|
||||
* BNE :L1
|
||||
|
||||
>>> XF2MAIN,CATALOGRET
|
||||
:DIRM ASC 'Directory: '
|
||||
DB $00
|
||||
@ -540,70 +452,26 @@ PRONEBLK >>> ENTAUX
|
||||
* Print a single directory entry
|
||||
* On entry: A = dirent index in AUXBLK
|
||||
* CC=entry, CS=header
|
||||
PRONEENT
|
||||
* PHP
|
||||
* TAX
|
||||
* LDA #<AUXBLK+4 ; Skip pointers
|
||||
* STA ZP3
|
||||
* LDA #>AUXBLK+4
|
||||
* STA ZP3+1
|
||||
*:L1 CPX #$00
|
||||
* BEQ :S1
|
||||
* CLC
|
||||
* LDA #$27 ; Size of dirent
|
||||
* ADC ZP3
|
||||
* STA ZP3
|
||||
* LDA #$00
|
||||
* ADC ZP3+1
|
||||
* STA ZP3+1
|
||||
* DEX
|
||||
* BRA :L1
|
||||
:S1 LDY #$00 ; Characters printed
|
||||
PRONEENT LDY #$00 ; Characters printed
|
||||
LDA (FSPTR1),Y
|
||||
AND #$0F ; Len of filename
|
||||
BEQ :CATEXIT ; Inactive entry
|
||||
BEQ NULLENT ; Inactive entry
|
||||
PHP
|
||||
TAX
|
||||
|
||||
:L2 INY
|
||||
LDA (FSPTR1),Y
|
||||
JSR OSWRCH ; Print filename
|
||||
DEX
|
||||
BNE :L2
|
||||
|
||||
* LDY #$01
|
||||
*:L2 CPX #$00
|
||||
* BEQ :S2
|
||||
* LDA (FSPTR1),Y
|
||||
* JSR OSWRCH
|
||||
* DEX
|
||||
* INY
|
||||
* BRA :L2
|
||||
|
||||
:S2 PLP
|
||||
BCS :EXITHDR ; Header entry, no info
|
||||
JSR PRSPACES
|
||||
|
||||
* LDA #$20
|
||||
* BIT FSAREG
|
||||
* BPL :S2LP
|
||||
* INY
|
||||
* INY
|
||||
* INY
|
||||
* INY
|
||||
*:S2LP JSR OSWRCH
|
||||
* INY
|
||||
* CPY #$10
|
||||
* BCC :S2LP
|
||||
|
||||
JSR PRSPACES ; Pad after filename
|
||||
BIT FSAREG
|
||||
BMI :CATINFO ; Display object info
|
||||
JMP PRACCESS
|
||||
:EXITHDR JMP OSNEWL
|
||||
PLP
|
||||
:CATEXIT RTS
|
||||
|
||||
* BPL :EXIT
|
||||
* Print object catalog info
|
||||
:CATINFO LDY #$21
|
||||
LDX #3
|
||||
LDA #0
|
||||
@ -615,14 +483,15 @@ PRONEENT
|
||||
JSR PRSPACE
|
||||
JSR PRACCESS
|
||||
BIT FSFLAG2
|
||||
BVS CATLONG
|
||||
BMI CATLONG ; *OPT 1,2 - detailed EX display
|
||||
LDY #$0A
|
||||
PRSPACES JSR PRSPACE
|
||||
INY
|
||||
CPY #$10
|
||||
BCC PRSPACES
|
||||
RTS
|
||||
NULLENT RTS
|
||||
|
||||
* Print extended catalog info
|
||||
CATLONG LDY #$21
|
||||
JSR PRDATETIME
|
||||
LDY #$18
|
||||
@ -676,34 +545,7 @@ PRDECSLH JSR PRDEC
|
||||
LDA #'/'
|
||||
JMP OSWRCH
|
||||
|
||||
* LDY #$00
|
||||
* LDA (FSPTR1),Y
|
||||
* AND #$F0
|
||||
* CMP #$D0
|
||||
* BNE :NOTDIR
|
||||
* LDA #'D'
|
||||
* JSR OSWRCH
|
||||
* JSR PRLOCK
|
||||
* JMP OSNEWL
|
||||
*:NOTDIR JSR PRLOCK
|
||||
* LDA (FSPTR1),Y
|
||||
* LSR A
|
||||
* PHP
|
||||
* AND #1
|
||||
* BEQ :NOWR
|
||||
* LDA #'W'
|
||||
* JSR OSWRCH
|
||||
*:NOWR PLP
|
||||
* BCC :NOWR
|
||||
* LDA #'R'
|
||||
* JSR OSWRCH
|
||||
*:NORD
|
||||
* JSR PRSPACE
|
||||
* LDY #$22
|
||||
* LDX #2
|
||||
* JSR PRADDRLP
|
||||
:EXITHDR JMP OSNEWL
|
||||
|
||||
* Print object access string
|
||||
PRACCESS LDX #$04 ; Offset to chars
|
||||
LDY #$1E
|
||||
LDA (FSPTR1),Y
|
||||
@ -740,14 +582,7 @@ PRACCESS LDX #$04 ; Offset to chars
|
||||
JMP OSWRCH
|
||||
ACCESSCHRS ASC 'RWLD'
|
||||
|
||||
|
||||
*PRLOCK LDY #$1E
|
||||
* LDA (FSPTR1),Y
|
||||
* CMP #$40
|
||||
* BCS PRADDROK
|
||||
* LDA #'L'
|
||||
* JMP OSWRCH
|
||||
|
||||
* Print object addresses
|
||||
PRADDR LDX #3
|
||||
PRADDRLP LDA (FSPTR1),Y
|
||||
PRADDR0 JSR OUTHEX
|
||||
@ -760,103 +595,81 @@ PRCHAR JMP OSWRCH
|
||||
|
||||
|
||||
* OSFSC $0C - RENAME function
|
||||
* XY=>pathname
|
||||
FSCRENAME
|
||||
RENAME JSR PARSNAME ; Copy Arg1->MOSFILE
|
||||
CMP #$00 ; Length of arg1
|
||||
BEQ :SYNTAX
|
||||
* XY=>pathnames
|
||||
*
|
||||
FSCRENAME JSR PARSNAME ; Copy Arg1->MOSFILE
|
||||
BEQ :SYNTAX ; No <oldname>
|
||||
JSR PARSLPTR2 ; Copy Arg2->MOSFILE2
|
||||
CMP #$00 ; Length of arg2
|
||||
BEQ :SYNTAX
|
||||
BEQ :SYNTAX ; No <newname>
|
||||
>>> 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.
|
||||
RENRET
|
||||
>>> ENTAUX
|
||||
JSR CHKERROR
|
||||
LDA #$00
|
||||
RTS
|
||||
COPYRET
|
||||
CHDIRRET >>> ENTAUX
|
||||
JMP CHKERROR
|
||||
|
||||
|
||||
* Handle *COPY command
|
||||
* LPTR=>parameters string
|
||||
*
|
||||
FSCCOPY JSR PARSLPTR
|
||||
* COPY JSR PARSNAME ; Copy Arg1->MOSFILE
|
||||
CMP #$00 ; Length of arg1
|
||||
BEQ :SYNTAX
|
||||
FSCCOPY JSR PARSLPTR ; Copy Arg1->MOSFILE
|
||||
BEQ :SYNTAX ; No <source>
|
||||
JSR PARSLPTR2 ; Copy Arg2->MOSFILE2
|
||||
CMP #$00 ; Length of arg2
|
||||
BEQ :SYNTAX
|
||||
>>> XF2MAIN,COPYFILE
|
||||
BEQ :SYNTAX ; No <dest>
|
||||
>>> XF2MAIN,COPYFILE ; Do the heavy lifting
|
||||
:SYNTAX BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: COPY <listspec> <*objspec*>'
|
||||
ASC 'Syntax: COPY <sourcespec> <destspec>'
|
||||
BRK
|
||||
COPYRET
|
||||
>>> ENTAUX
|
||||
JSR CHKERROR
|
||||
LDA #$00
|
||||
RTS
|
||||
|
||||
|
||||
* Handle *DIR/*CHDIR/*CD (directory change) command
|
||||
* LPTR=>parameters string
|
||||
*
|
||||
FSCCHDIR JSR PARSLPTR
|
||||
* CHDIR JSR PARSNAME ; Copy filename->MOSFILE
|
||||
CMP #$00 ; Filename length
|
||||
BNE :HASPARM
|
||||
BRK
|
||||
FSCCHDIR JSR PARSLPTR ; Copy filename->MOSFILE
|
||||
BEQ ERRCHDIR ; No <dir>
|
||||
FSCCHDIR2 >>> XF2MAIN,SETPFX
|
||||
ERRCHDIR BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: DIR <*objspec*>'
|
||||
ASC 'Syntax: DIR <dir>'
|
||||
BRK
|
||||
:HASPARM >>> XF2MAIN,SETPFX
|
||||
|
||||
|
||||
* Handle *DRIVE command, which is similar
|
||||
* Handle *DRIVE command, which is similar to CHDIR
|
||||
* LPTR=>parameters string
|
||||
*
|
||||
FSCDRIVE
|
||||
DRIVE LDA (OSLPTR),Y ; First char
|
||||
FSCDRIVE LDA (OSLPTR),Y ; First char
|
||||
CMP #$3A ; Colon
|
||||
BNE :ERR
|
||||
BNE :SYNTAX
|
||||
JSR PARSLPTR ; Copy arg->MOSFILE
|
||||
CMP #$03 ; Check 3 char arg
|
||||
BEQ :HASPARM
|
||||
:ERR BRK
|
||||
BEQ FSCCHDIR2 ; Pass on as CHDIR
|
||||
:SYNTAX BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: DRIVE <drv> (eg: DRIVE :61)'
|
||||
BRK
|
||||
:HASPARM >>> XF2MAIN,SETPFX
|
||||
|
||||
CHDIRRET
|
||||
>>> ENTAUX
|
||||
JSR CHKERROR
|
||||
CMP #$00
|
||||
BEQ :EXIT
|
||||
BRK
|
||||
DB $CE ; Bad directory
|
||||
ASC 'Bad dir'
|
||||
BRK
|
||||
:EXIT RTS
|
||||
|
||||
|
||||
* Handle *FREE command
|
||||
* LPTR=>parameters string
|
||||
* Also allows *FREE<cr> for current drive
|
||||
*
|
||||
FSCFREE
|
||||
FREE LDA (OSLPTR),Y ; First char
|
||||
CMP #$3A ; Colon
|
||||
BNE :ERR
|
||||
* LDA (OSLPTR),Y ; First char
|
||||
* CMP #$3A ; Colon
|
||||
* BNE :ERR
|
||||
JSR PARSLPTR ; Copy arg->MOSFILE
|
||||
BEQ :HASPARM ; *FREE <cr>
|
||||
CMP #$03 ; Check 3 char arg
|
||||
BEQ :HASPARM
|
||||
:ERR BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: FREE <drv> (eg: FREE :61)'
|
||||
ASC 'Syntax: FREE (<drv>) (eg: FREE :61)'
|
||||
BRK
|
||||
:HASPARM >>> XF2MAIN,DRVINFO
|
||||
|
||||
@ -869,22 +682,25 @@ FREERET
|
||||
DB $CE ; Bad directory
|
||||
ASC 'Bad dir'
|
||||
BRK
|
||||
:NOERR SEC
|
||||
LDA AUXBLK+2 ; LSB of total blks
|
||||
SBC AUXBLK+0 ; LSB of blocks used
|
||||
TAX
|
||||
LDA AUXBLK+3 ; MSB of total blks
|
||||
SBC AUXBLK+1 ; MSB of blocks used
|
||||
TAY
|
||||
LDA #$00 ; *TO DO* b16-b23 of free
|
||||
|
||||
* Disk size is two-byte 512-byte block count
|
||||
* Maximum disk size is $FFFF blocks = 1FFFF00 bytes = 33554176 bytes = 32M-512
|
||||
:NOERR SEC
|
||||
LDA AUXBLK+2 ; LSB of total blocks
|
||||
SBC AUXBLK+0 ; LSB of blocks used
|
||||
TAX ; X=b0-b7 of blocks free
|
||||
LDA AUXBLK+3 ; MSB of total blocks
|
||||
SBC AUXBLK+1 ; MSB of blocks used
|
||||
TAY ; Y=b8-b15 of blocks free
|
||||
LDA #$00 ; A=b16-b23 of blocks free
|
||||
JSR :FREEDEC ; Print 'AAYYXX blocks aaayyyxxx bytes '
|
||||
LDX #<:FREE
|
||||
LDY #>:FREE
|
||||
JSR OUTSTR ; Print 'free'<nl>
|
||||
LDX AUXBLK+0 ; Blocks used
|
||||
LDY AUXBLK+1
|
||||
LDA #$00 ; *TO DO* b16-b23 of used
|
||||
|
||||
LDX AUXBLK+0 ; X=b0-b7 of blocks used
|
||||
LDY AUXBLK+1 ; Y=b8-b15 of blocks used
|
||||
LDA #$00 ; A=b16-b23 of blocks used
|
||||
JSR :FREEDEC ; Print 'AAYYXX blocks aaayyyxxx bytes '
|
||||
LDX #<:USED
|
||||
LDY #>:USED
|
||||
@ -893,7 +709,6 @@ FREERET
|
||||
:FREEDEC STX FSNUM+1
|
||||
STY FSNUM+2
|
||||
STA FSNUM+3
|
||||
* What's the maximum number of blocks?
|
||||
* JSR PRHEX ; Blocks b16-b23 in hex
|
||||
JSR PR2HEX ; Blocks b0-b15 in hex
|
||||
LDX #<:BLOCKS
|
||||
@ -922,8 +737,8 @@ FREERET
|
||||
* Handle *ACCESS command
|
||||
* LPTR=>parameters string
|
||||
*
|
||||
FSCACCESS
|
||||
ACCESS JSR PARSLPTR ; Copy filename->MOSFILE
|
||||
ACCESS
|
||||
FSCACCESS JSR PARSLPTR ; Copy filename->MOSFILE
|
||||
CMP #$00 ; Filename length
|
||||
BEQ :SYNTAX
|
||||
JSR PARSLPTR2 ; Copy Arg2->MOSFILE2
|
||||
@ -1070,24 +885,24 @@ MKERROR3 ASL A
|
||||
PHA
|
||||
PHP
|
||||
RTI
|
||||
MKERROR4 DW ERROR28,ERROR27,ERROR27,ERROR2B,ERROR27,ERROR27,ERROR2E,ERROR27
|
||||
MKERROR4 DW ERROR28,ERROR27,ERROR27,ERROR2B,ERROR2C,ERROR27,ERROR2E,ERROR27
|
||||
DW ERROR40,ERROR41,ERROR42,ERROR43,ERROR44,ERROR45,ERROR46,ERROR47
|
||||
DW ERROR48,ERROR49,ERROR4A,ERROR4B,ERROR4C,ERROR4D,ERROR4E,ERROR4F
|
||||
DW ERROR50,ERROR51,ERROR52,ERROR53,ERROR54,ERROR55,ERROR56,ERROR57
|
||||
DW ERROR27,ERROR27,ERROR5A,ERROR5B,ERROR27,ERROR5D,ERROR5E,ERROR27
|
||||
DW ERROR27,ERROR27,ERROR5A,ERROR27,ERROR27,ERROR27,ERROR5E,ERROR27
|
||||
|
||||
* $27 - I/O error (disk not formatted)
|
||||
* $28 - No device con'd (drive not present) Disk not present
|
||||
* $29 -(GSOS Driver is busy)
|
||||
* $2A -
|
||||
* $2B - Disk write protected. Disk write protected
|
||||
* $2C -(GSOS bad byte count)
|
||||
* $2C - Bad byte count - file too long File too long
|
||||
* $2D -(GSOS bad block number)
|
||||
* $2E - Disk switched Disk changed
|
||||
* $2F - Device is offline (drive empty/absent)
|
||||
|
||||
* $40 - Invalid pathname syntax. Bad filename
|
||||
* $41 -(Duplicate filename. split from $47) Is a directory)
|
||||
* $41 -(Duplicate filename. split from $47) Is a directory
|
||||
* $42 - File Control Block table full. Too many open
|
||||
* $43 - Invalid reference number. Channel not open
|
||||
* $44 - Path not found. (Dir not found) File not found
|
||||
@ -1107,16 +922,16 @@ MKERROR4 DW ERROR28,ERROR27,ERROR27,ERROR2B,ERROR27,ERROR27,ERROR2E,ERROR
|
||||
* $52 - Not a ProDOS disk. Disk not recognised
|
||||
* $53 - Invalid parameter. Invalid parameter
|
||||
* $54 -(Dir not empty when deleting, cf $4E) DEL: Dir not empty
|
||||
* $55 - Volume Control Block table full.
|
||||
* $55 - Volume Control Block table full. (Too many disks mounted)
|
||||
* $56 - Bad buffer address.
|
||||
* $57 - Duplicate volume.
|
||||
* $58 - Bad volume bitmap.
|
||||
* $58 - Bad volume bitmap/Not block device.
|
||||
* $59 -(GSOS File level out of range)
|
||||
* $5A - Bit map disk address is impossible. Sector not found
|
||||
* $5B -(GSOS Bad ChangePath pathname)
|
||||
* $5C -(GSOS Not executable file)
|
||||
* $5D -(GSOS OS/FS not found) (EOF during load or save) Data lost
|
||||
* $5E -(Couldn't open to save) Can't save
|
||||
* $5D -(GSOS OS/FS not found)
|
||||
* $5E -(Destination filename has wildcards) Wildcards
|
||||
* $5F -(GSOS Too many applications)
|
||||
* $60+ - (GSOS)
|
||||
|
||||
@ -1126,6 +941,8 @@ ERROR28 DW $D200
|
||||
ASC 'Disk not present' ; $28 - No device detected/connected
|
||||
ERROR2B DW $C900
|
||||
ASC 'Disk write protected'; $2B - Disk write protected
|
||||
ERROR2C DW $C600
|
||||
ASC 'File too big' ; $2C - Too big to save
|
||||
ERROR2E DW $C800
|
||||
ASC 'Disk changed' ; $2E - Disk switched
|
||||
ERROR40 DW $CC00
|
||||
@ -1175,18 +992,10 @@ ERROR56 DW $FF00
|
||||
ASC 'ProDOS: Bad addr' ; $56 - Bad buffer address
|
||||
ERROR57 DW $FF00
|
||||
ASC 'ProDOS: Dup volm' ; $57 - Duplicate volume
|
||||
ERROR5B ; spare
|
||||
ERROR5A DW $FF00
|
||||
ASC 'Sector not found' ; $5A - Bit map disk address is impossible
|
||||
ERROR5D DW $CA00
|
||||
ASC 'Data lost' ; $5D - EOF during LOAD or SAVE
|
||||
ERROR5E DW $C000
|
||||
ASC 'Can'
|
||||
DB $27
|
||||
ASC 't save' ; $5E - Couldn't open for save
|
||||
ERROR5E DW $FD00
|
||||
ASC 'Wildcards' ; $5E - Can't use wildcards in dest filename
|
||||
ERROR27 DW $FF00
|
||||
ASC 'I/O error' ; $27 - I/O error
|
||||
DB $00
|
||||
|
||||
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
* BBC Micro 'virtual machine' in Apple //e aux memory
|
||||
***********************************************************
|
||||
|
||||
MAXROM EQU $F9 ; Max sideways ROM number
|
||||
|
||||
ZP1 EQU $90 ; $90-$9f are spare Econet space
|
||||
; so safe to use
|
||||
ZP2 EQU $92
|
||||
@ -123,8 +125,7 @@ MOSHIGH SEI
|
||||
DEX
|
||||
BPL :INITPG2
|
||||
|
||||
JSR ROMINIT ; Initialize sideways ROM table
|
||||
|
||||
JSR ROMINIT ; Build list of sideways ROMs
|
||||
JSR KBDINIT ; Returns A=startup MODE
|
||||
JSR VDUINIT ; Initialise VDU driver
|
||||
JSR PRHELLO
|
||||
@ -160,6 +161,18 @@ SERVICE TAX ; Enter here with A=Service Num
|
||||
BYTE8F
|
||||
SERVICEX LDA $F4
|
||||
PHA ; Save current ROM
|
||||
|
||||
* LDA $E0 ; *DEBUG*
|
||||
* AND #$20
|
||||
* BEQ :SERVDEBUG
|
||||
* TXA
|
||||
* JSR PRHEX
|
||||
* LDA OSLPTR+1
|
||||
* JSR PRHEX
|
||||
* LDA OSLPTR+0
|
||||
* JSR PRHEX ; *DEBUG*
|
||||
*:SERVDEBUG
|
||||
|
||||
TXA
|
||||
LDX MAXROM ; Start at highest ROM
|
||||
:SERVLP JSR ROMSELECT ; Bring it into memory
|
||||
@ -191,12 +204,7 @@ BYTE00 BEQ BYTE00A ; OSBYTE 0,0 - generate error
|
||||
RTS ; %000x1xxx host type, 'A'pple
|
||||
BYTE00A BRK
|
||||
DB $F7
|
||||
HELLO ASC 'Applecorn MOS 2021-10-27'
|
||||
HELLO ASC 'Applecorn MOS 2021-10-28'
|
||||
DB $00 ; Unify MOS messages
|
||||
|
||||
MAXROM DB $00 ; Index of highest sideways ROM
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -16,7 +16,8 @@
|
||||
* $E0-$EE Internal MOS workspace
|
||||
* $EF-$FF MOS API workspace
|
||||
|
||||
DEBUG EQU $E0 ; $E0 *TEST* Debug flag
|
||||
* DEBUG EQU $00 ; $00=*OPT 255 debug code removed
|
||||
DEBUG EQU $E0 ; $E0=*OPT 255 debug code included
|
||||
* ; $E1
|
||||
FSFLAG1 EQU $E2 ; $E2
|
||||
FSFLAG2 EQU $E3 ; $E3 HOSTFS *OPT settings
|
||||
@ -35,8 +36,11 @@ OSXREG EQU OSAREG+1 ; $F0 X register
|
||||
OSYREG EQU OSXREG+1 ; $F1 Y register
|
||||
OSCTRL EQU OSXREG ; $F0 (XY)=>control block
|
||||
OSLPTR EQU $F2 ; $F2 => command line
|
||||
OSROMNUM EQU $F4 ; $F4 current ROM
|
||||
*
|
||||
ROMID EQU $F4 ; $F4 current ROM
|
||||
ROMTMP EQU $F5 ; $F5
|
||||
ROMPTR EQU $F6 ; $F6 =>
|
||||
* ; $F8 *TEMP* pseudo-SROM settings
|
||||
* ; $F9 *TEMP* pseudo-SROM settings
|
||||
OSINTWS EQU $FA ; $FA IRQ ZP pointer, use when IRQs off
|
||||
OSINTA EQU $FC ; $FC IRQ register A store
|
||||
FAULT EQU $FD ; $FD Error message pointer
|
||||
@ -70,7 +74,3 @@ OSGBPBCB EQU OSFILECB+1 ; OSGBPB control block
|
||||
|
||||
* $0300-$03DF
|
||||
* $03E0-$03FF Used for interfacing with ProDOS XFER
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
* 23-Oct-2021 Moved all the OSFILE routines together.
|
||||
* Optimised entry and return from OSFILE routines.
|
||||
* DELETE returns 'Dir not empty' when appropriate.
|
||||
* 29-Oct-2021 DRVINFO reads current drive if "".
|
||||
|
||||
|
||||
* ProDOS file handling to rename a file
|
||||
@ -104,7 +105,7 @@ COPYFILE >>> ENTMAIN
|
||||
LDA #$46 ; 'File not found'
|
||||
BRA :EXIT
|
||||
:BADDEST JSR CLSDIR
|
||||
LDA #$FD ; 'Wildcards' error
|
||||
LDA #$5E ; 'Wildcards' error
|
||||
BRA :EXIT
|
||||
:NOMORE JSR CLSDIR
|
||||
LDA #$00
|
||||
@ -454,24 +455,15 @@ FILEDISPATCH CMP #$00
|
||||
SVCSAVE JMP SAVEFILE
|
||||
SVCLOAD JMP LOADFILE
|
||||
|
||||
INFOFILE
|
||||
* >>> ENTMAIN
|
||||
* JSR PREPATH ; Preprocess path
|
||||
* JSR UPDFB ; Update FILEBLK
|
||||
JSR UPDPATH ; Process path and get info
|
||||
INFOFILE JSR UPDPATH ; Process path and get info
|
||||
JMP COPYFB ; Copy back to aux mem
|
||||
* >>> XF2AUX,OSFILERET
|
||||
|
||||
|
||||
* ProDOS file handling to delete a file
|
||||
* Called by AppleMOS OSFILE
|
||||
* Return A=0 no object, A=1 file deleted, A=2 dir deleted
|
||||
* A>$1F ProDOS error
|
||||
DELFILE
|
||||
* >>> ENTMAIN
|
||||
* JSR PREPATH ; Preprocess path
|
||||
* JSR UPDFB ; Update FILEBLK
|
||||
JSR UPDPATH ; Process path and get info
|
||||
DELFILE JSR UPDPATH ; Process path and get info
|
||||
JSR COPYFB ; Copy back to aux mem
|
||||
PHA ; Save object type
|
||||
JSR DODELETE
|
||||
@ -495,7 +487,6 @@ DELFILE
|
||||
PHA
|
||||
:DELETED PLA ; Get object back
|
||||
:EXIT RTS
|
||||
* >>> XF2AUX,OSFILERET
|
||||
|
||||
DODELETE LDA #<MOSFILE ; Attempt to destroy file
|
||||
STA DESTPL+1
|
||||
@ -511,11 +502,7 @@ DODELETE LDA #<MOSFILE ; Attempt to destroy file
|
||||
* Invoked by AppleMOS OSFILE
|
||||
* Return A=$02 on success (ie: 'directory')
|
||||
* A>$1F ProDOS error, translated by OSFILE handler
|
||||
MAKEDIR
|
||||
* >>> ENTMAIN
|
||||
* JSR PREPATH ; Preprocess path
|
||||
* JSR UPDFB ; Update FILEBLK
|
||||
JSR UPDPATH ; Process path and get info
|
||||
MAKEDIR JSR UPDPATH ; Process path and get info
|
||||
CMP #$02
|
||||
BEQ :EXIT1 ; Dir already exists
|
||||
|
||||
@ -529,16 +516,13 @@ MAKEDIR
|
||||
JSR UPDFB ; Update FILEBLK, returns A=$02
|
||||
:EXIT1 JSR COPYFB ; Copy FILEBLK to aux mem
|
||||
:EXIT RTS
|
||||
* >>> XF2AUX,OSFILERET
|
||||
|
||||
|
||||
* ProDOS file handling for MOS OSFILE LOAD call
|
||||
* Invoked by AppleMOS OSFILE
|
||||
* Return A=01 if successful (meaning 'file')
|
||||
* A>$1F ProDOS error, translated by FILERET
|
||||
LOADFILE
|
||||
* >>> ENTMAIN
|
||||
LDX #4
|
||||
LOADFILE LDX #4
|
||||
:LP LDA FBLOAD,X ; Get address to load to
|
||||
STA ZPMOS,X
|
||||
DEX
|
||||
@ -577,7 +561,6 @@ LOADFILE
|
||||
JSR COPYFB ; Copy FILEBLK to auxmem
|
||||
LDA #$01 ; $01=File
|
||||
:EXIT2 RTS
|
||||
* >>> XF2AUX,OSFILERET
|
||||
|
||||
|
||||
* A=channel, MOSZP+0/1=address to load to, TO DO: MOS+4/5=length to read
|
||||
@ -623,9 +606,7 @@ READDATA STA READPL+1
|
||||
* Invoked by AppleMOS OSFILE
|
||||
* Return A=01 if successful (ie: 'file')
|
||||
* A>$1F ProDOS error translated by FILERET
|
||||
SAVEFILE
|
||||
* >>> ENTMAIN
|
||||
SEC ; Compute file length
|
||||
SAVEFILE SEC ; Compute file length
|
||||
LDA FBEND+0
|
||||
SBC FBSTRT+0
|
||||
STA LENREM+0
|
||||
@ -638,7 +619,8 @@ SAVEFILE
|
||||
LDA FBEND+3
|
||||
SBC FBSTRT+3
|
||||
BEQ :L0 ; >16M
|
||||
:TOOBIG JMP :CANTSAVE
|
||||
:TOOBIG LDA #$2C ; Bad byte count - file too long
|
||||
RTS
|
||||
|
||||
:L0 JSR PREPATH ; Preprocess pathname
|
||||
JSR EXISTS ; See if file exists ...
|
||||
@ -681,9 +663,6 @@ SAVEFILE
|
||||
BNE :EXIT3 ; Change 'Insuff. access'
|
||||
LDA #$4F ; to 'Locked'
|
||||
:EXIT3 RTS
|
||||
* >>> XF2AUX,OSFILERET
|
||||
:CANTSAVE LDA #$5E ; Can't open/create
|
||||
BRA :EXIT3 ; TO DO: Error=File too long
|
||||
|
||||
|
||||
* A=channel, FBSTRT+0/1=address to save from
|
||||
@ -849,8 +828,7 @@ UPDFB LDA #<MOSFILE
|
||||
LDA #$01 ; Prepare A=file
|
||||
LDX GINFOPL+7
|
||||
CPX #$0D ; Is it a directory?
|
||||
BNE :UPDFB5
|
||||
LDA #$02 ; Return A=directory
|
||||
ADC #$00 ; Becomes A=2 for directory
|
||||
:UPDFB5 RTS
|
||||
|
||||
:ERR
|
||||
@ -865,9 +843,9 @@ CHKNOTFND CMP #$44 ; Convert ProDOS 'not found'
|
||||
|
||||
|
||||
* Quit to ProDOS
|
||||
QUIT INC $3F4 ; Invalidate powerup byte
|
||||
QUIT INC $03F4 ; Invalidate powerup byte
|
||||
STA $C054 ; PAGE2 off
|
||||
STA $C00E ; Turn off alt charset
|
||||
STA $C00E ; Alt font off
|
||||
JSR MLI
|
||||
DB QUITCMD
|
||||
DW QUITPL
|
||||
@ -962,7 +940,8 @@ INFOCLS JSR CLSDIR ; Be sure to close it!
|
||||
BRA CATEXIT
|
||||
|
||||
|
||||
* Set prefix. Used by *CHDIR to change directory
|
||||
* Set prefix. Used by *CHDIR/*DRIVE to change directory
|
||||
*
|
||||
SETPFX >>> ENTMAIN
|
||||
JSR PREPATH ; Preprocess pathname
|
||||
JSR WILDONE ; Handle any wildcards
|
||||
@ -974,13 +953,19 @@ SETPFX >>> ENTMAIN
|
||||
JSR MLI ; SET_PREFIX
|
||||
DB SPFXCMD
|
||||
DW SPFXPL
|
||||
* Returns $4B 'Unknown storage' if *CD <notdir>
|
||||
:EXIT >>> XF2AUX,CHDIRRET
|
||||
:ERR LDA #$40 ; Invalid pathname syn
|
||||
BRA :EXIT
|
||||
|
||||
* Obtain info on blocks used/total blocks
|
||||
DRVINFO >>> ENTMAIN
|
||||
JSR PREPATH
|
||||
LDA MOSFILE
|
||||
BNE :DRVINF2
|
||||
INC MOSFILE
|
||||
LDA #'@'
|
||||
STA MOSFILE+1 ; Convert "" to "@"
|
||||
:DRVINF2 JSR PREPATH
|
||||
BCS :ERR
|
||||
LDA #<MOSFILE
|
||||
STA GINFOPL+1
|
||||
@ -1115,5 +1100,3 @@ MAINRDMEM STA A1L
|
||||
LDA (A1L)
|
||||
MAINRDEXIT >>> XF2AUX,NULLRTS ; Back to an RTS
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user