mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2024-06-15 19:29:32 +00:00
Improved LOADFILE error handling
This commit is contained in:
parent
28f7d31491
commit
7bb65cdca8
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
82
applecorn.s
82
applecorn.s
|
@ -203,8 +203,9 @@ RESET TSX
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
* ProDOS file handling for MOS OSFILE LOAD call
|
* ProDOS file handling for MOS OSFILE LOAD call
|
||||||
* Return A=0 if file not found
|
* Return A=0 if successful
|
||||||
* A=1 if file found
|
* A=1 if file not found
|
||||||
|
* A=2 if read error
|
||||||
LOADFILE LDX $0100 ; Recover SP
|
LOADFILE LDX $0100 ; Recover SP
|
||||||
TXS
|
TXS
|
||||||
LDA $C081 ; Gimme the ROM!
|
LDA $C081 ; Gimme the ROM!
|
||||||
|
@ -216,14 +217,16 @@ LOADFILE LDX $0100 ; Recover SP
|
||||||
LDA #>MOSFILE
|
LDA #>MOSFILE
|
||||||
STA OPENPL+2
|
STA OPENPL+2
|
||||||
JSR OPENFILE
|
JSR OPENFILE
|
||||||
BCS :NOTFOUND ; File not found error
|
BCS :NOTFND ; File not found
|
||||||
|
|
||||||
:L1 LDA OPENPL+5 ; File ref number
|
:L1 LDA OPENPL+5 ; File ref number
|
||||||
STA READPL+1
|
STA READPL+1
|
||||||
JSR RDBLK
|
JSR RDBLK
|
||||||
BCS :EOF ; Assume only poss error is EOF
|
BCC :S1
|
||||||
|
CMP #$4C ; EOF
|
||||||
|
BEQ :EOF
|
||||||
|
BRA :READERR
|
||||||
|
|
||||||
LDA #<RDBUF
|
:S1 LDA #<RDBUF
|
||||||
STA A1L
|
STA A1L
|
||||||
LDA #>RDBUF
|
LDA #>RDBUF
|
||||||
STA A1H
|
STA A1H
|
||||||
|
@ -238,12 +241,12 @@ LOADFILE LDX $0100 ; Recover SP
|
||||||
LDA FBEXEC+1
|
LDA FBEXEC+1
|
||||||
LDX BLOCKS
|
LDX BLOCKS
|
||||||
:L2 CPX #$00
|
:L2 CPX #$00
|
||||||
BEQ :S1
|
BEQ :S2
|
||||||
INC
|
INC
|
||||||
INC
|
INC
|
||||||
DEX
|
DEX
|
||||||
BRA :L2
|
BRA :L2
|
||||||
:S1 STA A4H
|
:S2 STA A4H
|
||||||
|
|
||||||
SEC ; Main -> AUX
|
SEC ; Main -> AUX
|
||||||
JSR AUXMOVE
|
JSR AUXMOVE
|
||||||
|
@ -251,18 +254,17 @@ LOADFILE LDX $0100 ; Recover SP
|
||||||
INC BLOCKS
|
INC BLOCKS
|
||||||
BRA :L1
|
BRA :L1
|
||||||
|
|
||||||
:NOTFOUND
|
:NOTFND LDA #$01 ; Nothing found
|
||||||
LDA #$00 ; Nothing found
|
|
||||||
PHA
|
PHA
|
||||||
BRA :EXIT
|
BRA :EXIT
|
||||||
:EOF
|
:READERR LDA #$02 ; Read error
|
||||||
LDA #$01 ; File found
|
|
||||||
PHA
|
PHA
|
||||||
|
BRA :EOF2
|
||||||
LDA OPENPL+1 ; File ref num
|
:EOF LDA #$00 ; Success
|
||||||
|
PHA
|
||||||
|
:EOF2 LDA OPENPL+1 ; File ref num
|
||||||
STA CLSPL+5
|
STA CLSPL+5
|
||||||
JSR CLSFILE
|
JSR CLSFILE
|
||||||
|
|
||||||
:EXIT LDA $C08B ; R/W RAM, bank 1
|
:EXIT LDA $C08B ; R/W RAM, bank 1
|
||||||
LDA $C08B
|
LDA $C08B
|
||||||
LDA #<OSFILERET ; Return to caller in aux
|
LDA #<OSFILERET ; Return to caller in aux
|
||||||
|
@ -315,10 +317,10 @@ SAVEFILE LDX $0100 ; Recover SP
|
||||||
SEC ; Compute file length
|
SEC ; Compute file length
|
||||||
LDA FBEND
|
LDA FBEND
|
||||||
SBC FBSTRT
|
SBC FBSTRT
|
||||||
STA LEN
|
STA :LEN
|
||||||
LDA FBEND+1
|
LDA FBEND+1
|
||||||
SBC FBSTRT+1
|
SBC FBSTRT+1
|
||||||
STA LEN+1
|
STA :LEN+1
|
||||||
|
|
||||||
:L1 LDA FBSTRT ; Setup for first block
|
:L1 LDA FBSTRT ; Setup for first block
|
||||||
STA A1L
|
STA A1L
|
||||||
|
@ -344,13 +346,13 @@ SAVEFILE LDX $0100 ; Recover SP
|
||||||
|
|
||||||
:FWD1 BRA :CANTOPEN ; Forwarding call from above
|
:FWD1 BRA :CANTOPEN ; Forwarding call from above
|
||||||
|
|
||||||
:S1 LDA LEN+1 ; MSB of length remaining
|
:S1 LDA :LEN+1 ; MSB of length remaining
|
||||||
CMP #$02
|
CMP #$02
|
||||||
BCS :S2 ; MSB of len >= 2 (not last)
|
BCS :S2 ; MSB of len >= 2 (not last)
|
||||||
|
|
||||||
CMP #$00 ; If no bytes left ...
|
CMP #$00 ; If no bytes left ...
|
||||||
BNE :S3
|
BNE :S3
|
||||||
LDA LEN
|
LDA :LEN
|
||||||
BNE :S3
|
BNE :S3
|
||||||
BRA :NORMALEND
|
BRA :NORMALEND
|
||||||
|
|
||||||
|
@ -358,9 +360,9 @@ SAVEFILE LDX $0100 ; Recover SP
|
||||||
STA A2L
|
STA A2L
|
||||||
LDA FBEND+1
|
LDA FBEND+1
|
||||||
STA A2H
|
STA A2H
|
||||||
LDA LEN
|
LDA :LEN
|
||||||
STA WRITEPL+4 ; Remaining bytes to write
|
STA WRITEPL+4 ; Remaining bytes to write
|
||||||
LDA LEN+1
|
LDA :LEN+1
|
||||||
STA WRITEPL+5
|
STA WRITEPL+5
|
||||||
|
|
||||||
:S2 LDA #<RDBUF
|
:S2 LDA #<RDBUF
|
||||||
|
@ -383,12 +385,12 @@ SAVEFILE LDX $0100 ; Recover SP
|
||||||
|
|
||||||
:UPDLEN
|
:UPDLEN
|
||||||
SEC ; Update length remaining
|
SEC ; Update length remaining
|
||||||
LDA LEN
|
LDA :LEN
|
||||||
SBC WRITEPL+4
|
SBC WRITEPL+4
|
||||||
STA LEN
|
STA :LEN
|
||||||
LDA LEN+1
|
LDA :LEN+1
|
||||||
SBC WRITEPL+5
|
SBC WRITEPL+5
|
||||||
STA LEN+1
|
STA :LEN+1
|
||||||
BRA :ENDLOOP
|
BRA :ENDLOOP
|
||||||
|
|
||||||
:CANTOPEN
|
:CANTOPEN
|
||||||
|
@ -398,14 +400,15 @@ SAVEFILE LDX $0100 ; Recover SP
|
||||||
LDA OPENPL+1 ; File ref num
|
LDA OPENPL+1 ; File ref num
|
||||||
STA CLSPL+5
|
STA CLSPL+5
|
||||||
JSR CLSFILE
|
JSR CLSFILE
|
||||||
:WERR2 LDA #$02 ; Write error
|
LDA #$02 ; Write error
|
||||||
BRA :EXIT
|
BRA :EXIT
|
||||||
:NORMALEND
|
:NORMALEND
|
||||||
LDA OPENPL+1 ; File ref num
|
LDA OPENPL+1 ; File ref num
|
||||||
STA CLSPL+5
|
STA CLSPL+5
|
||||||
JSR CLSFILE
|
JSR CLSFILE
|
||||||
BCS :WERR2 ; Catch error during close
|
|
||||||
LDA #$00 ; Success!
|
LDA #$00 ; Success!
|
||||||
|
BCC :EXIT ; If close OK
|
||||||
|
LDA #$02 ; Write error
|
||||||
:EXIT PHA
|
:EXIT PHA
|
||||||
LDA $C08B ; R/W RAM, bank 1
|
LDA $C08B ; R/W RAM, bank 1
|
||||||
LDA $C08B
|
LDA $C08B
|
||||||
|
@ -417,7 +420,7 @@ SAVEFILE LDX $0100 ; Recover SP
|
||||||
SEC
|
SEC
|
||||||
BIT $FF58
|
BIT $FF58
|
||||||
JMP XFER
|
JMP XFER
|
||||||
LEN DW $0000
|
:LEN DW $0000
|
||||||
|
|
||||||
* Create disk file
|
* Create disk file
|
||||||
CRTFILE JSR MLI
|
CRTFILE JSR MLI
|
||||||
|
@ -910,24 +913,35 @@ OSFILERET
|
||||||
|
|
||||||
CPY #$FF ; LOAD
|
CPY #$FF ; LOAD
|
||||||
BNE :S4
|
BNE :S4
|
||||||
CMP #$00 ; No file found
|
CMP #$01 ; No file found
|
||||||
BNE :EXIT
|
BNE :SL1
|
||||||
BRK
|
BRK
|
||||||
DB $D6 ; Error number
|
DB $D6 ; Error number ?? TBD
|
||||||
ASC 'File not found'
|
ASC 'File not found'
|
||||||
BRK
|
BRK
|
||||||
|
LDA #$00 ; Return code - no file
|
||||||
|
BRA :EXIT
|
||||||
|
:SL1 CMP #$02 ; Read error
|
||||||
|
BNE :SL2
|
||||||
|
BRK
|
||||||
|
DB $D6 ; Error number
|
||||||
|
ASC 'Read error'
|
||||||
|
BRK
|
||||||
|
LDA #$01 ; Return code - file found
|
||||||
|
BRA :EXIT
|
||||||
|
:SL2 LDA #$01 ; Return code - file found
|
||||||
BRA :EXIT
|
BRA :EXIT
|
||||||
|
|
||||||
:S4 CPY #$00 ; SAVE
|
:S4 CPY #$00 ; SAVE
|
||||||
BNE :EXIT
|
BNE :S6
|
||||||
CMP #$01 ; Unable to create or open
|
CMP #$01 ; Unable to create or open
|
||||||
BNE :S5
|
BNE :SS1
|
||||||
BRK
|
BRK
|
||||||
DB $D5 ; Error number ?? TBD
|
DB $D5 ; Error number ?? TBD
|
||||||
ASC 'Create error'
|
ASC 'Create error'
|
||||||
BRK
|
BRK
|
||||||
BRA :S6
|
BRA :S6
|
||||||
:S5 CMP #$02 ; Unable to write
|
:SS1 CMP #$02 ; Unable to write
|
||||||
BNE :S6
|
BNE :S6
|
||||||
BRK
|
BRK
|
||||||
DB $D5 ; Error number ?? TBD
|
DB $D5 ; Error number ?? TBD
|
||||||
|
|
Loading…
Reference in New Issue
Block a user