Merge PR 134 'Updated FSC and Catalog'

This commit is contained in:
Bobbi Webber-Manners 2021-10-24 20:43:02 -04:00
parent 8e5ca206f5
commit 00208b0248
3 changed files with 629 additions and 429 deletions

Binary file not shown.

View File

@ -14,6 +14,8 @@
* 13-Oct-2021 ARGS, EOF returns errors, optimised passing registers.
* 14-Oct-2021 Tidied FILE handler.
* 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.
* $B0-$BF Temporary filing system workspace
@ -99,6 +101,8 @@ OSBGETRET >>> ENTAUX
* OSARGS - adjust file arguments
* On entry, A=action
* X=>4 byte ZP control block
* Y=file handle
* Y<>0 A=FF Flush channel Y
* A=00 Read PTR#Y
* A=01 Write PTR#Y
@ -107,8 +111,6 @@ OSBGETRET >>> ENTAUX
* Y=0 A=FF Flush all channels
* A=00 Return filing system number in A
* A=01 Read command line address
* X=>4 byte ZP control block
* Y=file handle
* On exit, A=0 - implemented (except ARGS 0,0)
* A - preserved=unimplemented
* X,Y - preserved
@ -199,15 +201,16 @@ OSARGSDONE PLA
RTS
* OSFILE - perform actions on entire files
* OSFILE - perform actions on entire files/objects
* On entry, A=action
* XY=>control block
* On exit, A=preserved if unimplemented
* A=0 object not found (not load/save)
* A=1 file found
* A=2 directory found
* A=2 directory found (not load/save)
* XY preserved
* control block updated
*
OSFILEMIN EQU $FF ; $FF=LOAD
OSFILEMAX EQU $08 ; $08=MKDIR
@ -216,7 +219,7 @@ FILEHND PHX
PHA
CLC
ADC #256-OSFILEMIN
CMP #OSFILEMAX+257-OSFILEMIN ; NB: LTR evaluation
CMP #OSFILEMAX+257-OSFILEMIN ; NB: LtoR evaluation
BCS FILEIGNORE
STX FSCTRL+0 ; FSCTRL=>control block
@ -276,24 +279,20 @@ FILEIGNORE PLA ; Returned object type
RTS
OSFSCM ASC 'OSFSC.'
DB $00
* FSC Command Table
*******************
* These are commands specific to the filing system that can't be
* called via OSFILE, OSFSC, etc.
*
FSCCOMMAND ASC 'CHDIR'
DB $C0
DW FSCCHDIR-1 ; Change directory, XY=>params
DB $80
DW FSCCHDIR-1 ; Change directory, LPTR=>params
ASC 'CD'
DB $C0
DW FSCCHDIR-1 ; Change directory, XY=>params
DB $80
DW FSCCHDIR-1 ; Change directory, LPTR=>params
ASC 'DIR'
DB $C0
DW FSCCHDIR-1 ; Change directory, XY=>params
* TO DO, CHDIR should be $80 for LPTR=>params
DB $80
DW FSCCHDIR-1 ; Change directory, LPTR=>params
ASC 'DRIVE'
DB $80
DW FSCDRIVE-1 ; Select drive, LPTR=>params
@ -310,52 +309,91 @@ FSCCOMMAND ASC 'CHDIR'
DB $80
DW FSCDESTROY-1 ; DESTROY <objlist>, LPTR=>params
ASC 'COPY'
DB $C0
DW COPY-1 ; COPY <source> <dest>, XY=>params
DB $80
DW FSCCOPY-1 ; COPY <source> <dest>, LPTR=>params
*
DB $FF ; Terminator
* FSC Dispatch Table
********************
FSCDISPATCH DW FSCOPT-1 ; A=0 - *OPT
DW CHKEOF-1 ; A=1 - Read EOF
DW FSCRUN-1 ; A=2 - */filename
DW FSC03-1 ; A=3 - *command
DW FSCRUN-1 ; A=4 - *RUN
DW FSCCAT-1 ; A=5 - *CAT
DW FSCUKN-1 ; A=6
DW FSCUKN-1 ; A=7
DW FSCUKN-1 ; A=8
DW FSCCAT-1 ; A=9 - *EX
DW FSCCAT-1 ; A=10 - *INFO
DW FSCUKN-1 ; A=11
DW FSCRENAME-1 ; A=12 - *RENAME
* OSFSC - miscellanous file system calls
*****************************************
* On entry, A=action, XY=>command line
* or A=action, X=param1, Y=param2
* On exit, A=preserved if unimplemented
* A=modified if implemented
* A=0 if implemented
* X,Y=any return values
*
FSCHND
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
FSCHND CMP #13
BCS FSCUKN
STA FSAREG
STX FSXREG
STY FSYREG
ASL A
TAX
LDA FSCDISPATCH+1,X
PHA
LDA FSCDISPATCH+0,X
PHA
LDX FSXREG
LDA FSAREG
RTS
* Performs OSFSC *OPT function
FSOPT RTS ; No FS options for now
* 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
FSCDRIVE JMP DRIVE
* OSFSC 00 - *OPT function
FSCOPT TXA
BEQ :OPT0
LDA FSFLAG2
AND :OPTMSK-1,X
EOR :OPTSET-0,Y
AND :OPTMSK-1,X
EOR :OPTSET-0,Y
:OPT0 STA FSFLAG2
:OPTNULL RTS
:OPTMSK DB $3F,$CF,$F3,$FC
:OPTSET DB $00,$55,$AA,$FF
FSCFREE JMP FREE
FSCACCESS JMP ACCESS
FSCDESTROY JMP DESTROY
FSCTITLE
*FSCDRIVE JMP DRIVE
*
*FSCFREE JMP FREE
*
*FSCACCESS JMP ACCESS
*
*FSCDESTROY JMP DESTROY
*
*JMPCAT JMP FSCCAT
FSCUKN PHA
LDA #<OSFSCM
@ -363,15 +401,37 @@ FSCUKN PHA
JSR PRSTR
PLA
FSCNULL RTS
OSFSCM ASC 'OSFSC.'
DB $00
JMPCAT JMP FSCCAT
* OSFSC 01 - Read EOF function
* X=File ref number
*
CHKEOF
* >>> WRTMAIN
* STX MOSFILE ; File reference number
* >>> WRTAUX
TXA ; A=channel
>>> XF2MAIN,FILEEOF
CHKEOFRET >>> ENTAUX
TAX ; Return code -> X
TYA ; Y=any ProDOS error
JMP CHKERROR
* OSFSC 03 - *command, fall back to *RUN command
* XY=>command line
*
FSC03 JSR XYtoLPTR
LDX #<FSCCOMMAND
LDY #>FSCCOMMAND
JSR CLILOOKUP
BEQ FSCNULL
JSR LPTRtoXY
BEQ FSCNULL ; Matched, return
JSR LPTRtoXY ; Fall through to *RUN
* OSFSC 04 - *RUN filename
* XY=>pathname
*
FSCRUN STX OSFILECB ; Pointer to filename
STY OSFILECB+1
@ -397,26 +457,15 @@ FSCRUNLP LDA (OSLPTR),Y ; Look for command line
SEC ; Not from RESET
JMP (OSFILECB+6) ; Jump to EXEC addr
FSCREN JMP RENAME
FSCCHDIR JMP CHDIR
* Performs OSFSC Read EOF function
* File ref number is in X
CHKEOF
* >>> WRTMAIN
* STX MOSFILE ; File reference number
* >>> WRTAUX
TXA ; A=channel
>>> XF2MAIN,FILEEOF
CHKEOFRET >>> ENTAUX
TAX ; Return code -> X
TYA ; Y=any ProDOS error
JMP CHKERROR
* FSCREN JMP RENAME
*
* FSCCHDIR JMP CHDIR
* Display catalog entries and info
* A=5 *CAT, A=9 *EX, A=10 *INFO
* XY=>pathname
*
FSCCAT EOR #$06
CLC
ROR A ; 01100000=*CAT
@ -430,85 +479,132 @@ FSCCAT EOR #$06
STARCATRET >>> ENTAUX
JSR CHKERROR ; See if error occurred
JSR FORCENL
* CATDONE
LDA #0 ; 0=OK
RTS
* Print one block of a catalog. Called by CATALOG
* Block is in AUXBLK
PRONEBLK >>> ENTAUX
LDA AUXBLK+4 ; Get storage type
AND #$E0 ; Mask 3 MSBs
*
LDA #<AUXBLK+4 ; FSPTR1=>first entry
STA FSPTR1+0
LDA #>AUXBLK+4
STA FSPTR1+1
LDA #13 ; Max 13 entries per block
STA FSNUM
:CATLP LDY #$00
LDA (FSPTR1),Y ; Get storage type
CMP #$E0
BNE :NOTKEY ; Not a key block
* 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
PLP
BCC :L1X
JSR OSNEWL
:L1X PLA
INC
CMP #13 ; Number of dirents in block
CLC
BNE :L1
:NOTKEY
* LDA #$00
*:L1 PHA
* PHP
JSR PRONEENT ; CC=entry, CS=header
* PLP
* BCC :L1X
* JSR OSNEWL
*:L1X
CLC ; Step to next entry
LDA FSPTR1+0
ADC #$27
STA FSPTR1+0
LDA FSPTR1+1
ADC #$00
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
* Print a single directory entry
* On entry: A = dirent index in AUXBLK
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
LDA (ZP3),Y
BEQ :EXIT1 ; Inactive entry
* 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
LDA (FSPTR1),Y
AND #$0F ; Len of filename
BEQ :CATEXIT ; Inactive entry
PHP
TAX
LDY #$01
:L2 CPX #$00
BEQ :S2
LDA (ZP3),Y
JSR OSWRCH
:L2 INY
LDA (FSPTR1),Y
JSR OSWRCH ; Print filename
DEX
INY
BRA :L2
BNE :L2
* LDY #$01
*:L2 CPX #$00
* BEQ :S2
* LDA (FSPTR1),Y
* JSR OSWRCH
* DEX
* INY
* BRA :L2
:S2 PLP
BCS :EXIT
LDA #$20
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
BIT FSAREG
BPL :S2LP
INY
INY
INY
INY
:S2LP JSR OSWRCH
INY
CPY #$15
BNE :S2LP
BIT FSAREG
BPL :EXIT
LDY #$21
BMI :CATINFO ; Display object info
JMP PRACCESS
:EXITHDR JMP OSNEWL
PLP
:CATEXIT RTS
* BPL :EXIT
:CATINFO LDY #$21
LDX #3
LDA #0
JSR PRADDR0
@ -517,55 +613,155 @@ PRONEENT PHP
LDY #$17
JSR PRADDR
JSR PRSPACE
LDY #$00
LDA (ZP3),Y
AND #$F0
CMP #$D0
BNE :NOTDIR
LDA #'D'
JSR OSWRCH
JSR PRLOCK
JSR PRACCESS
BIT FSFLAG2
BVS CATLONG
LDY #$0A
PRSPACES JSR PRSPACE
INY
CPY #$10
BCC PRSPACES
RTS
CATLONG LDY #$21
JSR PRDATETIME
LDY #$18
JSR PRDATETIME
JMP OSNEWL
:NOTDIR JSR PRLOCK
LDA (ZP3),Y
PRDATETIME JSR PRSPACE
JSR PRSPACE
LDA (FSPTR1),Y
PHA
AND #$1F
JSR PRDECSLH ; Day
INY
LDA (FSPTR1),Y
ASL A
PLA
ROL A
ROL A
ROL A
ROL A
AND #$0F
JSR PRDECSLH ; Month
LDA (FSPTR1),Y
PHA
CMP #80
LDA #$19
BCS :CENTURY
LDA #$20
:CENTURY JSR PRHEX ; Century
PLA
LSR A
PHP
AND #1
BEQ :NOWR
LDA #'W'
JSR PRDEC ; Year
JSR PRSPACE
INY
INY
LDA (FSPTR1),Y
JSR PRDEC ; Hour
LDA #$3A
JSR OSWRCH
:NOWR PLP
BCC :NOWR
LDA #'R'
JSR OSWRCH
:NORD
DEY
LDA (FSPTR1),Y ; Minute
PRDEC TAX
LDA #$99
SED
:PRDECLP CLC
ADC #$01
DEX
BPL :PRDECLP
CLD
JMP PRHEX
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
JMP OSNEWL
:EXIT1 PLP
:EXIT RTS
:EXITHDR JMP OSNEWL
PRLOCK LDY #$1E
LDA (ZP3),Y
PRACCESS LDX #$04 ; Offset to chars
LDY #$1E
LDA (FSPTR1),Y
PHA
LDY #$00 ; Chars printed
LDA (FSPTR1),Y
CMP #$D0
JSR :PRACCCHR ; 'D'
PLA
CPY #$01 ; Has 'D' been printed?
PHP
PHA
EOR #$C0
CMP #$40
BCS PRADDROK
LDA #'L'
JSR :PRACCCHR ; 'L'
PLA
PLP
BCS :PRACCDONE ; Dir, skip 'WR'
ROR A
PHP
ROR A
JSR :PRACCCHR ; 'W'
PLP
JSR :PRACCCHR ; 'R'
:PRACCDONE LDA #$20
:PRACCLP JSR :PRSPACE
CPY #$04
BCC :PRACCLP
:PRSKIP RTS
:PRACCCHR DEX
BCC :PRSKIP
LDA ACCESSCHRS,X
:PRSPACE INY
JMP OSWRCH
ACCESSCHRS ASC 'RWLD'
*PRLOCK LDY #$1E
* LDA (FSPTR1),Y
* CMP #$40
* BCS PRADDROK
* LDA #'L'
* JMP OSWRCH
PRADDR LDX #3
PRADDRLP LDA (ZP3),Y
PRADDRLP LDA (FSPTR1),Y
PRADDR0 JSR OUTHEX
DEY
DEX
BNE PRADDRLP
PRADDROK RTS
PRSPACE LDA #' '
JMP OSWRCH
PRCHAR JMP OSWRCH
* Perform FSCV $0C RENAME function
* Parameter string in XY
* OSFSC $0C - RENAME function
* XY=>pathname
FSCRENAME
RENAME JSR PARSNAME ; Copy Arg1->MOSFILE
CMP #$00 ; Length of arg1
BEQ :SYNTAX
@ -583,9 +779,12 @@ RENRET
LDA #$00
RTS
* Perform *COPY function
* Parameter string in XY
COPY JSR PARSNAME ; Copy Arg1->MOSFILE
* Handle *COPY command
* LPTR=>parameters string
*
FSCCOPY JSR PARSLPTR
* COPY JSR PARSNAME ; Copy Arg1->MOSFILE
CMP #$00 ; Length of arg1
BEQ :SYNTAX
JSR PARSLPTR2 ; Copy Arg2->MOSFILE2
@ -602,9 +801,12 @@ COPYRET
LDA #$00
RTS
* Handle *DIR (directory change) command
* On entry, XY points to command line
CHDIR JSR PARSNAME ; Copy filename->MOSFILE
* 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
@ -613,8 +815,11 @@ CHDIR JSR PARSNAME ; Copy filename->MOSFILE
BRK
:HASPARM >>> XF2MAIN,SETPFX
* Handle *DRIVE command, which is similar
* On entry, (OSLPTR),Y points to command line
* LPTR=>parameters string
*
FSCDRIVE
DRIVE LDA (OSLPTR),Y ; First char
CMP #$3A ; Colon
BNE :ERR
@ -638,7 +843,11 @@ CHDIRRET
BRK
:EXIT RTS
* Handle *FREE command
* LPTR=>parameters string
*
FSCFREE
FREE LDA (OSLPTR),Y ; First char
CMP #$3A ; Colon
BNE :ERR
@ -668,7 +877,7 @@ FREERET
SBC AUXBLK+1 ; MSB of blocks used
TAY
LDA #$00 ; *TO DO* b16-b23 of free
* NEW
JSR :FREEDEC ; Print 'AAYYXX blocks aaayyyxxx bytes '
LDX #<:FREE
LDY #>:FREE
@ -681,22 +890,6 @@ FREERET
LDY #>:USED
JMP OUTSTR ; Print 'used'<nl>
* OLD
* JSR PRDECXY ; Print in decimal
* LDX #<:FREEM
* LDY #>:FREEM
* JSR OUTSTR
* JSR FORCENL
* LDX AUXBLK+0 ; Blocks used
* LDY AUXBLK+1
* JSR PRDECXY ; Print in decimal
* LDX #<:USEDM
* LDY #>:USEDM
* JSR OUTSTR
* JSR FORCENL
* RTS
*
* NEW
:FREEDEC STX FSNUM+1
STY FSNUM+2
STA FSNUM+3
@ -724,13 +917,12 @@ FREERET
DB 13,0
:USED ASC 'used'
DB 13,0
*
* OLD
*:FREEM ASC ' 512-byte Blocks Free'
* DB $00
*:USEDM ASC ' 512-byte Blocks Used'
* DB $00
* Handle *ACCESS command
* LPTR=>parameters string
*
FSCACCESS
ACCESS JSR PARSLPTR ; Copy filename->MOSFILE
CMP #$00 ; Filename length
BEQ :SYNTAX
@ -738,7 +930,7 @@ ACCESS JSR PARSLPTR ; Copy filename->MOSFILE
>>> XF2MAIN,SETPERM
:SYNTAX BRK
DB $DC
ASC 'Syntax: ACCESS <listspec> <L|R|W>'
ASC 'Syntax: ACCESS <listspec> <L|W|R>'
BRK
ACCRET >>> ENTAUX
@ -746,6 +938,11 @@ ACCRET >>> ENTAUX
LDA #$00
RTS
* Handle *DESTROY command
* LPTR=>parameters string
*
FSCDESTROY
DESTROY JSR PARSLPTR ; Copy filename->MOSFILE
CMP #$00 ; Filename length
BEQ :SYNTAX
@ -760,12 +957,20 @@ DESTRET >>> ENTAUX
LDA #$00
RTS
* Handle *TITLE command
* LPTR=>parameters string
* Syntax: *TITLE (<drive>) <title>
*
FSCTITLE RTS
* Parse filename pointed to by XY
* Write filename to MOSFILE in main memory
* Returns length in A
* Returns length in A with EQ/NE set
PARSNAME JSR XYtoLPTR
PARSLPTR CLC ; Means parsing a filename
JSR GSINIT ; Init gen string handling
JSR GSINIT ; Init general string handling
PHP
SEI ; Disable IRQs
LDX #$00 ; Length
@ -785,7 +990,7 @@ PARSLPTR CLC ; Means parsing a filename
* Parse filename pointed to by (OSLPTR),Y
* Write filename to MOSFILE2 in main memory
* Returns length in A
* Returns length in A with EQ/NE set
PARSNAME2 JSR XYtoLPTR
PARSLPTR2 CLC ; Means parsing a filename
JSR GSINIT ; Init gen string handling
@ -804,23 +1009,23 @@ PARSLPTR2 CLC ; Means parsing a filename
STA $C005 ; Back to aux
PLP ; IRQs back as they were
TXA ; Return len in A
RTS
NOTERROR RTS
* Move this somewhere
CHKERROR CMP #$20
BCS MKERROR
RTS
*ERREXISTS LDA #$47 ; File exists
ERRNOTFND LDA #$46 ; File not found
* Check returned code for return code or error code
* A<$20 - return to user, A>$1F - generate error
*
CHKERROR CMP #$20
BCC NOTERROR
MKERROR
* IF FALSE
BIT $E0
BPL MKERROR1 ; *TEST*
BPL MKERROR1 ; *DEBUG*
PHA
LDX #15
MKERRLP
LDA ERRMSG,X
MKERRLP LDA ERRMSG,X
STA $100,X
DEX
BPL MKERRLP
@ -836,31 +1041,28 @@ MKERRLP
JSR ERRHEX
STA $109
JMP $100
ERRHEX
AND #15
ERRHEX AND #15
CMP #10
BCC ERRHEX1
ADC #6
ERRHEX1
ADC #48
ERRHEX1 ADC #48
RTS
ERRMSG
BRK
ERRMSG BRK
DB $FF
ASC 'ERR: $00'
BRK
MKERROR1
CMP #$40
* FIN
* Translate ProDOS error code into BBC error
MKERROR1 CMP #$40
BCS MKERROR2
ORA #$30 ; <$40 -> $30-$3F
MKERROR2
SEC
SBC #$37
MKERROR2 SEC
SBC #$38
CMP #$28
BCC MKERROR3
LDA #$00 ; I/O error
MKERROR3
ASL A
BCC MKERROR3 ; $28-$30, $40-$5F
LDA #$27 ; Otherwise I/O error
MKERROR3 ASL A
TAX
LDA MKERROR4+1,X
PHA
@ -868,8 +1070,7 @@ MKERROR3
PHA
PHP
RTI
MKERROR4 DW ERROR27
DW ERROR28,ERROR27,ERROR27,ERROR2B,ERROR27,ERROR27,ERROR2E,ERROR27
MKERROR4 DW ERROR28,ERROR27,ERROR27,ERROR2B,ERROR27,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
@ -921,6 +1122,12 @@ MKERROR4 DW ERROR27
* AcornOS ProDOS
ERROR28 DW $D200
ASC 'Disk not present' ; $28 - No device detected/connected
ERROR2B DW $C900
ASC 'Disk write protected'; $2B - Disk write protected
ERROR2E DW $C800
ASC 'Disk changed' ; $2E - Disk switched
ERROR40 DW $CC00
ASC 'Bad filename' ; $40 - Invalid pathname syntax
ERROR41 DW $C400
@ -961,7 +1168,7 @@ ERROR51 DW $A800
ERROR53 DW $DC00
ASC 'Invalid parameter' ; $53 - Invalid parameter
ERROR54 DW $D400
ASC 'Directory not empty' ; $54 - Directory not empty
ASC 'Directory not empty' ; $54 - Directory not empty (split from $4E)
ERROR55 DW $FF00
ASC 'ProDOS: VCB full' ; $55 - Volume Control Block table full
ERROR56 DW $FF00
@ -969,21 +1176,14 @@ ERROR56 DW $FF00
ERROR57 DW $FF00
ASC 'ProDOS: Dup volm' ; $57 - Duplicate volume
ERROR5B ; spare
ERROR27 DW $FF00
ASC 'I/O error' ; $27 - I/O error
ERROR28 DW $D200
ASC 'Disk not present' ; $28 - No device detected/connected
ERROR5A DW $FF00
ASC 'Sector not found' ; $5A - Bit map disk address is impossible
ERROR2B DW $C900
ASC 'Disk write protected' ; $2B - Disk write protected
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
ERROR2E DW $C800
ASC 'Disk changed' ; $2E - Disk switched
ERROR27 DW $FF00
ASC 'I/O error' ; $27 - I/O error
DB $00

View File

@ -16,8 +16,10 @@
* $E0-$EE Internal MOS workspace
* $EF-$FF MOS API workspace
FSFLAG1 EQU $E2
FSFLAG2 EQU $E3
DEBUG EQU $E0 ; $E0 *TEST* Debug flag
* ; $E1
FSFLAG1 EQU $E2 ; $E2
FSFLAG2 EQU $E3 ; $E3 HOSTFS *OPT settings
GSFLAG EQU $E4 ; $E4 GSREAD processing flags
GSCHAR EQU $E5 ; $E5 GSREAD accumulator
OSTEXT EQU $E6 ; $E6 => text string $E6 OSNUM+0
@ -68,5 +70,3 @@ OSGBPBCB EQU OSFILECB+1 ; OSGBPB control block
* $0300-$03DF
* $03E0-$03FF Used for interfacing with ProDOS XFER