mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2024-06-13 07:29:35 +00:00
Merge PR #120 'Updated BGET, BPUT, ARGS, EOF'
This commit is contained in:
parent
70ff049987
commit
6b0c3fa327
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
143
auxmem.hostfs.s
143
auxmem.hostfs.s
|
@ -9,31 +9,24 @@
|
||||||
* Command line set by *RUN, and read by OSARGS
|
* Command line set by *RUN, and read by OSARGS
|
||||||
* 20-Sep-2021 *FREE uses new PRDECIMAL routine
|
* 20-Sep-2021 *FREE uses new PRDECIMAL routine
|
||||||
* 12-Oct-2021 OSFIND checks return value from calling maincode.
|
* 12-Oct-2021 OSFIND checks return value from calling maincode.
|
||||||
|
* 12-Oct-2021 BGET and BPUT check for returned error.
|
||||||
|
* 13-Oct-2021 FIND, BGET, BPUT optimised passing registers to main.
|
||||||
|
* 13-Oct-2021 ARGS, EOF returns errors, optimised passing registers.
|
||||||
|
|
||||||
|
|
||||||
* $B0-$BF Temporary filing system workspace
|
* $B0-$BF Temporary filing system workspace
|
||||||
FSXREG EQU $B0
|
|
||||||
FSYREG EQU $B1
|
|
||||||
FSAREG EQU $B2
|
|
||||||
FSCTRL EQU FSXREG
|
|
||||||
FSPTR1 EQU $B4
|
|
||||||
FSPTR2 EQU $B6
|
|
||||||
* $C0-$CF Persistant filing system workspace
|
* $C0-$CF Persistant filing system workspace
|
||||||
FSNUM EQU $C8 ; *TEMP*
|
FSXREG EQU $C0
|
||||||
|
FSYREG EQU $C1
|
||||||
|
FSAREG EQU $C2
|
||||||
|
FSZPC3 EQU $C3
|
||||||
|
FSCTRL EQU FSXREG
|
||||||
|
FSPTR1 EQU $C4
|
||||||
|
FSPTR2 EQU $C6
|
||||||
|
FSNUM EQU $C8
|
||||||
|
FSZPCC EQU $CC
|
||||||
FSCMDLINE EQU $CE
|
FSCMDLINE EQU $CE
|
||||||
|
|
||||||
; B0-B3 addr
|
|
||||||
; B4-B7 sect
|
|
||||||
; B8-BB
|
|
||||||
; BC-BF
|
|
||||||
; C0-C3 num
|
|
||||||
; C4-C5 cblk
|
|
||||||
; C6-C7
|
|
||||||
; C8-CB
|
|
||||||
; CC-CD
|
|
||||||
; CE-CF cmd
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* OSFIND - open/close a file for byte access
|
* OSFIND - open/close a file for byte access
|
||||||
FINDHND PHX
|
FINDHND PHX
|
||||||
|
@ -45,16 +38,16 @@ FINDHND PHX
|
||||||
JSR PARSNAME ; Copy filename->MOSFILE
|
JSR PARSNAME ; Copy filename->MOSFILE
|
||||||
PLA ; Recover options
|
PLA ; Recover options
|
||||||
>>> XF2MAIN,OFILE
|
>>> XF2MAIN,OFILE
|
||||||
:CLOSE >>> WRTMAIN
|
:CLOSE
|
||||||
STY MOSFILE ; Write file number
|
* >>> WRTMAIN
|
||||||
>>> WRTAUX
|
* STY MOSFILE ; Write file number
|
||||||
>>> XF2MAIN,CFILE
|
* >>> WRTAUX
|
||||||
OSFINDRET
|
>>> XF2MAIN,CFILE ; Pass A,Y to main code
|
||||||
>>> ENTAUX
|
|
||||||
|
OSFINDRET >>> ENTAUX
|
||||||
JSR CHKERROR ; Check if error returned
|
JSR CHKERROR ; Check if error returned
|
||||||
PLY ; Value of A on entry
|
PLY ; Value of A on entry
|
||||||
CPY #$00 ; Was it close?
|
BNE :S1 ; It wasn't close
|
||||||
BNE :S1
|
|
||||||
TYA ; Preserve A for close
|
TYA ; Preserve A for close
|
||||||
:S1 PLY
|
:S1 PLY
|
||||||
PLX
|
PLX
|
||||||
|
@ -71,12 +64,12 @@ OSGBPBM ASC 'OSGBPB.'
|
||||||
BPUTHND PHX
|
BPUTHND PHX
|
||||||
PHY
|
PHY
|
||||||
PHA ; Stash char to write
|
PHA ; Stash char to write
|
||||||
>>> WRTMAIN
|
* >>> WRTMAIN
|
||||||
STY MOSFILE ; File reference number
|
* STY MOSFILE ; File reference number
|
||||||
>>> WRTAUX
|
* >>> WRTAUX
|
||||||
>>> XF2MAIN,FILEPUT
|
>>> XF2MAIN,FILEPUT ; Pass A,Y to main code
|
||||||
OSBPUTRET
|
OSBPUTRET >>> ENTAUX
|
||||||
>>> ENTAUX
|
JSR CHKERROR
|
||||||
CLC ; Means no error
|
CLC ; Means no error
|
||||||
PLA
|
PLA
|
||||||
PLY
|
PLY
|
||||||
|
@ -86,18 +79,18 @@ OSBPUTRET
|
||||||
* OSBGET - read one byte from an open file
|
* OSBGET - read one byte from an open file
|
||||||
BGETHND PHX
|
BGETHND PHX
|
||||||
PHY
|
PHY
|
||||||
>>> WRTMAIN
|
* >>> WRTMAIN
|
||||||
STY MOSFILE ; File ref number
|
* STY MOSFILE ; File ref number
|
||||||
>>> WRTAUX
|
* >>> WRTAUX
|
||||||
>>> XF2MAIN,FILEGET
|
>>> XF2MAIN,FILEGET ; Pass A,Y to main code
|
||||||
OSBGETRET
|
OSBGETRET >>> ENTAUX
|
||||||
>>> ENTAUX
|
CPY #$01
|
||||||
CLC ; Means no error
|
BCC :EXIT ; If no error, return CC
|
||||||
CPY #$00 ; Check error status
|
LDA #$FE
|
||||||
BEQ :NOERR
|
CPY #$4C
|
||||||
SEC ; Set carry for error
|
BEQ :EXIT ; If at EOF, return CS
|
||||||
BRA :EXIT
|
TYA
|
||||||
:NOERR CLC
|
JSR CHKERROR
|
||||||
:EXIT PLY
|
:EXIT PLY
|
||||||
PLX
|
PLX
|
||||||
RTS
|
RTS
|
||||||
|
@ -146,41 +139,45 @@ ARGSHND PHX
|
||||||
|
|
||||||
:S2 CMP #$FF ; Y=0,A=FF => flush all files
|
:S2 CMP #$FF ; Y=0,A=FF => flush all files
|
||||||
BNE :IEXIT
|
BNE :IEXIT
|
||||||
>>> WRTMAIN
|
* >>> WRTMAIN
|
||||||
STZ MOSFILE ; Zero means flush all
|
* STZ MOSFILE ; Zero means flush all
|
||||||
>>> WRTAUX
|
* >>> WRTAUX
|
||||||
JMP :FLUSH
|
JMP :FLUSH
|
||||||
:IEXIT JMP :EXIT ; Exit preserved
|
:IEXIT JMP :EXIT ; Exit preserved
|
||||||
|
|
||||||
:HASFILE >>> WRTMAIN
|
:HASFILE
|
||||||
STY MOSFILE ; File ref num
|
* >>> WRTMAIN
|
||||||
STX MOSFILE+1 ; Pointer to ZP control block
|
* STY MOSFILE ; File ref num
|
||||||
>>> WRTAUX
|
* STX MOSFILE+1 ; Pointer to ZP control block
|
||||||
|
* >>> WRTAUX
|
||||||
CMP #$00 ; Y!=0,A=0 => read seq ptr
|
CMP #$00 ; Y!=0,A=0 => read seq ptr
|
||||||
BNE :S3
|
BNE :S3
|
||||||
>>> WRTMAIN
|
* >>> WRTMAIN
|
||||||
STZ MOSFILE+2 ; 0 means get pos
|
* STZ MOSFILE+2 ; 0 means get pos
|
||||||
>>> WRTAUX
|
* >>> WRTAUX
|
||||||
>>> XF2MAIN,TELL
|
TXA
|
||||||
|
>>> XF2MAIN,TELL ; A=ZP, Y=channel
|
||||||
|
|
||||||
:S3 CMP #$01 ; Y!=0,A=1 => write seq ptr
|
:S3 CMP #$01 ; Y!=0,A=1 => write seq ptr
|
||||||
BNE :S4
|
BNE :S4
|
||||||
>>> WRTMAIN
|
>>> WRTMAIN
|
||||||
|
STY GMARKPL+1 ; Write to MLI control block
|
||||||
LDA $00,X
|
LDA $00,X
|
||||||
STA MOSFILE+2
|
STA GMARKPL+2
|
||||||
LDA $01,X
|
LDA $01,X
|
||||||
STA MOSFILE+3
|
STA GMARKPL+3
|
||||||
LDA $02,X
|
LDA $02,X
|
||||||
STA MOSFILE+4
|
STA GMARKPL+4
|
||||||
>>> WRTAUX
|
>>> WRTAUX
|
||||||
>>> XF2MAIN,SEEK
|
>>> XF2MAIN,SEEK ; A=???, Y=channel
|
||||||
|
|
||||||
:S4 CMP #$02 ; Y!=0,A=2 => read file len
|
:S4 CMP #$02 ; Y!=0,A=2 => read file len
|
||||||
BNE :S5
|
BNE :S5
|
||||||
>>> WRTMAIN
|
* >>> WRTMAIN
|
||||||
STA MOSFILE+2 ; Non-zero means get len
|
* STA MOSFILE+2 ; Non-zero means get len
|
||||||
>>> WRTAUX
|
* >>> WRTAUX
|
||||||
>>> XF2MAIN,TELL
|
TXA
|
||||||
|
>>> XF2MAIN,SIZE ; A=ZP, Y=channel
|
||||||
|
|
||||||
:S5 CMP #$FF ; Y!=0,A=FF => flush file
|
:S5 CMP #$FF ; Y!=0,A=FF => flush file
|
||||||
BNE :EXIT
|
BNE :EXIT
|
||||||
|
@ -192,6 +189,7 @@ ARGSHND PHX
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
OSARGSRET >>> ENTAUX
|
OSARGSRET >>> ENTAUX
|
||||||
|
JSR CHKERROR
|
||||||
OSARGSDONE PLA
|
OSARGSDONE PLA
|
||||||
LDA #0 ; Implemented
|
LDA #0 ; Implemented
|
||||||
PLY
|
PLY
|
||||||
|
@ -425,14 +423,17 @@ FSCCHDIR JMP CHDIR
|
||||||
|
|
||||||
* Performs OSFSC Read EOF function
|
* Performs OSFSC Read EOF function
|
||||||
* File ref number is in X
|
* File ref number is in X
|
||||||
CHKEOF >>> WRTMAIN
|
CHKEOF
|
||||||
STX MOSFILE ; File reference number
|
* >>> WRTMAIN
|
||||||
>>> WRTAUX
|
* STX MOSFILE ; File reference number
|
||||||
|
* >>> WRTAUX
|
||||||
|
TXA ; A=channel
|
||||||
>>> XF2MAIN,FILEEOF
|
>>> XF2MAIN,FILEEOF
|
||||||
CHKEOFRET
|
CHKEOFRET >>> ENTAUX
|
||||||
>>> ENTAUX
|
|
||||||
TAX ; Return code -> X
|
TAX ; Return code -> X
|
||||||
RTS
|
TYA ; Y=any ProDOS error
|
||||||
|
JMP CHKERROR
|
||||||
|
|
||||||
|
|
||||||
* Perform CAT
|
* Perform CAT
|
||||||
* A=5 *CAT, A=9 *EX, A=10 *INFO
|
* A=5 *CAT, A=9 *EX, A=10 *INFO
|
||||||
|
@ -867,7 +868,7 @@ ERRHEX1
|
||||||
ERRMSG
|
ERRMSG
|
||||||
BRK
|
BRK
|
||||||
DB $FF
|
DB $FF
|
||||||
ASC 'TEST: $00'
|
ASC 'ERR: $00'
|
||||||
BRK
|
BRK
|
||||||
MKERROR1
|
MKERROR1
|
||||||
CMP #$40
|
CMP #$40
|
||||||
|
|
132
mainmem.svc.s
132
mainmem.svc.s
|
@ -13,6 +13,8 @@
|
||||||
* exits with MFI error, returns error if no more buffers,
|
* exits with MFI error, returns error if no more buffers,
|
||||||
* OPENOUT doesn't try to delete if nothing to delete.
|
* OPENOUT doesn't try to delete if nothing to delete.
|
||||||
* 13-Oct-2021 OSFIND implementes CLOSE#0.
|
* 13-Oct-2021 OSFIND implementes CLOSE#0.
|
||||||
|
* 13-Oct-2021 FIND, BGET, BPUT optimised passing registers to main.
|
||||||
|
* 13-Oct-2021 ARGS, EOF returns errors, optimised.
|
||||||
|
|
||||||
|
|
||||||
INFOFILE >>> ENTMAIN
|
INFOFILE >>> ENTMAIN
|
||||||
|
@ -283,6 +285,7 @@ COPY1FILE LDA #<MOSFILE
|
||||||
:BUFIDX1 DB $00
|
:BUFIDX1 DB $00
|
||||||
:BUFIDX2 DB $00
|
:BUFIDX2 DB $00
|
||||||
|
|
||||||
|
|
||||||
* ProDOS file handling for MOS OSFIND OPEN call
|
* ProDOS file handling for MOS OSFIND OPEN call
|
||||||
* Options in A: $40 'r', $80 'w', $C0 'rw'
|
* Options in A: $40 'r', $80 'w', $C0 'rw'
|
||||||
OFILE >>> ENTMAIN
|
OFILE >>> ENTMAIN
|
||||||
|
@ -356,7 +359,8 @@ BUFIDX DB $00
|
||||||
* ProDOS file handling for MOS OSFIND CLOSE call
|
* ProDOS file handling for MOS OSFIND CLOSE call
|
||||||
CFILE >>> ENTMAIN
|
CFILE >>> ENTMAIN
|
||||||
LDX #$00 ; Prepare for one file
|
LDX #$00 ; Prepare for one file
|
||||||
LDA MOSFILE ; File ref number
|
* LDA MOSFILE ; File ref number
|
||||||
|
TYA ; File ref number
|
||||||
BNE :CFILE1 ; Close one file
|
BNE :CFILE1 ; Close one file
|
||||||
LDX #$03 ; Loop through all files
|
LDX #$03 ; Loop through all files
|
||||||
:CFILE0 LDA FILEREFS,X
|
:CFILE0 LDA FILEREFS,X
|
||||||
|
@ -383,15 +387,15 @@ CFILE >>> ENTMAIN
|
||||||
* ProDOS file handling for MOS OSBGET call
|
* ProDOS file handling for MOS OSBGET call
|
||||||
* Returns with char read in A and error num in Y (or 0)
|
* Returns with char read in A and error num in Y (or 0)
|
||||||
FILEGET >>> ENTMAIN
|
FILEGET >>> ENTMAIN
|
||||||
LDA MOSFILE ; File ref number
|
* LDA MOSFILE ; File ref number
|
||||||
STA READPL2+1
|
* STA READPL2+1
|
||||||
|
STY READPL2+1 ; File ref number
|
||||||
JSR MLI
|
JSR MLI
|
||||||
DB READCMD
|
DB READCMD
|
||||||
DW READPL2
|
DW READPL2
|
||||||
BCC :NOERR
|
|
||||||
TAY ; Error number in Y
|
TAY ; Error number in Y
|
||||||
BRA :EXIT
|
BCS :EXIT
|
||||||
:NOERR LDY #$00
|
LDY #$00 ; 0=Ok
|
||||||
LDA BLKBUF
|
LDA BLKBUF
|
||||||
:EXIT >>> XF2AUX,OSBGETRET
|
:EXIT >>> XF2AUX,OSBGETRET
|
||||||
|
|
||||||
|
@ -399,87 +403,101 @@ FILEGET >>> ENTMAIN
|
||||||
* Enters with char to write in A
|
* Enters with char to write in A
|
||||||
FILEPUT >>> ENTMAIN
|
FILEPUT >>> ENTMAIN
|
||||||
STA BLKBUF ; Char to write
|
STA BLKBUF ; Char to write
|
||||||
|
* LDA MOSFILE ; File ref number
|
||||||
LDA MOSFILE ; File ref number
|
* STA WRITEPL+1
|
||||||
STA WRITEPL+1
|
STY WRITEPL+1 ; File ref number
|
||||||
LDA #$01 ; Bytes to write
|
LDA #$01 ; Bytes to write
|
||||||
STA WRITEPL+4
|
STA WRITEPL+4
|
||||||
LDA #$00
|
LDA #$00
|
||||||
STA WRITEPL+5
|
STA WRITEPL+5
|
||||||
JSR WRTFILE
|
JSR WRTFILE
|
||||||
>>> XF2AUX,OSBPUTRET
|
BCS :FILEPUT2
|
||||||
|
LDA #$00 ; 0=Ok
|
||||||
|
:FILEPUT2 >>> XF2AUX,OSBPUTRET
|
||||||
|
|
||||||
|
|
||||||
* ProDOS file handling for OSBYTE $7F EOF
|
* ProDOS file handling for OSBYTE $7F EOF
|
||||||
* Returns EOF status in A ($FF for EOF, $00 otherwise)
|
* Returns EOF status in A ($FF for EOF, $00 otherwise)
|
||||||
|
* A=channel to test
|
||||||
FILEEOF >>> ENTMAIN
|
FILEEOF >>> ENTMAIN
|
||||||
|
* LDA MOSFILE ; File ref number
|
||||||
LDA MOSFILE ; File ref number
|
|
||||||
STA GEOFPL+1
|
STA GEOFPL+1
|
||||||
STA GMARKPL+1
|
STA GMARKPL+1
|
||||||
JSR MLI
|
JSR MLI
|
||||||
DB GEOFCMD
|
DB GEOFCMD
|
||||||
DW GEOFPL
|
DW GEOFPL
|
||||||
BCS :ISEOF ; If error, just say EOF
|
TAY
|
||||||
|
BCS :EXIT ; Abort with any error
|
||||||
|
|
||||||
JSR MLI
|
JSR MLI
|
||||||
DB GMARKCMD
|
DB GMARKCMD
|
||||||
DW GMARKPL
|
DW GMARKPL
|
||||||
BCS :ISEOF ; If error, just say EOF
|
TAY
|
||||||
|
BCS :EXIT ; Abort with any error
|
||||||
|
|
||||||
LDA GEOFPL+2 ; Subtract Mark from EOF
|
|
||||||
SEC
|
SEC
|
||||||
|
LDA GEOFPL+2 ; Subtract Mark from EOF
|
||||||
SBC GMARKPL+2
|
SBC GMARKPL+2
|
||||||
STA :REMAIN
|
STA GEOFPL+2
|
||||||
LDA GEOFPL+3
|
LDA GEOFPL+3
|
||||||
SBC GMARKPL+3
|
SBC GMARKPL+3
|
||||||
STA :REMAIN+1
|
STA GEOFPL+3
|
||||||
LDA GEOFPL+4
|
LDA GEOFPL+4
|
||||||
SBC GMARKPL+4
|
SBC GMARKPL+4
|
||||||
STA :REMAIN+2
|
STA GEOFPL+4
|
||||||
|
|
||||||
LDA :REMAIN ; Check bytes remaining
|
LDA GEOFPL+2 ; Check bytes remaining
|
||||||
BNE :NOTEOF
|
ORA GEOFPL+3
|
||||||
LDA :REMAIN+1
|
ORA GEOFPL+4
|
||||||
BNE :NOTEOF
|
BEQ :ISEOF ; EOF -> $00
|
||||||
LDA :REMAIN+2
|
LDA #$FF ; Not EOF -> $FF
|
||||||
BNE :NOTEOF
|
:ISEOF EOR #$FF ; EOF -> $FF, Not EOF ->$00
|
||||||
:ISEOF LDA #$FF
|
LDY #$00 ; 0=No error
|
||||||
BRA :EXIT
|
|
||||||
:NOTEOF LDA #$00
|
|
||||||
:EXIT >>> XF2AUX,CHKEOFRET
|
:EXIT >>> XF2AUX,CHKEOFRET
|
||||||
:REMAIN DS 3 ; Remaining bytes
|
|
||||||
|
|
||||||
* ProDOS file handling for OSARGS flush commands
|
* ProDOS file handling for OSARGS flush commands
|
||||||
FLUSH >>> ENTMAIN
|
FLUSH >>> ENTMAIN
|
||||||
LDA MOSFILE ; File ref number
|
* LDA MOSFILE ; File ref number
|
||||||
STA FLSHPL+1
|
* STA FLSHPL+1
|
||||||
|
STY FLSHPL+1 ; File ref number
|
||||||
JSR MLI
|
JSR MLI
|
||||||
DB FLSHCMD
|
DB FLSHCMD
|
||||||
DW FLSHPL
|
DW FLSHPL
|
||||||
>>> XF2AUX,OSARGSRET
|
>>> XF2AUX,OSARGSRET
|
||||||
|
|
||||||
* ProDOS file handling for OSARGS set ptr command
|
* ProDOS file handling for OSARGS set ptr command
|
||||||
|
* GMARKPL+1=channel, GMARKPL+2,+3,+4=offset already set
|
||||||
SEEK >>> ENTMAIN
|
SEEK >>> ENTMAIN
|
||||||
LDA MOSFILE ; File ref number
|
* LDA MOSFILE ; File ref number
|
||||||
STA GMARKPL+1 ; GET_MARK has same params
|
* STA GMARKPL+1 ; GET_MARK has same params
|
||||||
LDA MOSFILE+2 ; Desired offset in MOSFILE[2..4]
|
* LDA MOSFILE+2 ; Desired offset in MOSFILE[2..4]
|
||||||
STA GMARKPL+2
|
* STA GMARKPL+2
|
||||||
LDA MOSFILE+3
|
* LDA MOSFILE+3
|
||||||
STA GMARKPL+3
|
* STA GMARKPL+3
|
||||||
LDA MOSFILE+4
|
* LDA MOSFILE+4
|
||||||
STA GMARKPL+4
|
* STA GMARKPL+4
|
||||||
JSR MLI
|
JSR MLI
|
||||||
DB SMARKCMD
|
DB SMARKCMD
|
||||||
DW GMARKPL
|
DW GMARKPL
|
||||||
>>> XF2AUX,OSARGSRET
|
JMP TELLEXIT
|
||||||
|
* >>> XF2AUX,OSARGSRET
|
||||||
|
|
||||||
* ProDOS file handling for OSARGS get ptr command
|
* ProDOS file handling for OSARGS get ptr command
|
||||||
* and for OSARGs get length command
|
* and for OSARGs get length command
|
||||||
TELL >>> ENTMAIN
|
* A=ZP, Y=channel
|
||||||
LDA MOSFILE ; File ref number
|
SIZE LDX #$02 ; $02=SIZE, Read EXT
|
||||||
STA GMARKPL+1
|
BNE TELL2
|
||||||
LDA MOSFILE+2 ; Mode (0=pos, otherwise len)
|
TELL LDX #$00 ; $00=TELL, Read PTR
|
||||||
CMP #$00
|
TELL2
|
||||||
|
* >>> ENTMAIN
|
||||||
|
* LDA MOSFILE ; File ref number
|
||||||
|
* STA GMARKPL+1
|
||||||
|
* LDA MOSFILE+2 ; Mode (0=pos, otherwise len)
|
||||||
|
* CMP #$00
|
||||||
|
STY GMARKPL+1 ; File ref number
|
||||||
|
PHA ; Pointer to zero page
|
||||||
|
CPX #$00 ; OSARGS parameter
|
||||||
BEQ :POS
|
BEQ :POS
|
||||||
JSR MLI
|
JSR MLI
|
||||||
DB GEOFCMD
|
DB GEOFCMD
|
||||||
|
@ -488,8 +506,9 @@ TELL >>> ENTMAIN
|
||||||
:POS JSR MLI
|
:POS JSR MLI
|
||||||
DB GMARKCMD
|
DB GMARKCMD
|
||||||
DW GMARKPL
|
DW GMARKPL
|
||||||
:S1 LDX MOSFILE+1 ; Pointer to ZP control block
|
:S1 PLX ; Pointer to ZP control block
|
||||||
BCS :ERR
|
BCS TELLEXIT ; Exit with error
|
||||||
|
* LDX MOSFILE+1 ; Pointer to ZP control block
|
||||||
>>> ALTZP ; Alt ZP & Alt LC on
|
>>> ALTZP ; Alt ZP & Alt LC on
|
||||||
LDA GMARKPL+2
|
LDA GMARKPL+2
|
||||||
STA $00,X
|
STA $00,X
|
||||||
|
@ -497,17 +516,18 @@ TELL >>> ENTMAIN
|
||||||
STA $01,X
|
STA $01,X
|
||||||
LDA GMARKPL+4
|
LDA GMARKPL+4
|
||||||
STA $02,X
|
STA $02,X
|
||||||
STZ $03,X
|
STZ $03,X ; Sizes are $00xxxxxx
|
||||||
>>> MAINZP ; Alt ZP off, ROM back in
|
>>> MAINZP ; Alt ZP off, ROM back in
|
||||||
:EXIT >>> XF2AUX,OSARGSRET
|
LDA #$00 ; 0=Ok
|
||||||
:ERR LDX MOSFILE+1 ; Address of ZP control block
|
TELLEXIT >>> XF2AUX,OSARGSRET
|
||||||
>>> ALTZP ; Alt ZP & Alt LC on
|
*:ERR LDX MOSFILE+1 ; Address of ZP control block
|
||||||
STZ $00,X
|
* >>> ALTZP ; Alt ZP & Alt LC on
|
||||||
STZ $01,X
|
* STZ $00,X
|
||||||
STZ $02,X
|
* STZ $01,X
|
||||||
STZ $03,X
|
* STZ $02,X
|
||||||
>>> MAINZP ; Alt ZP off, ROM back in
|
* STZ $03,X
|
||||||
BRA :EXIT
|
* >>> MAINZP ; Alt ZP off, ROM back in
|
||||||
|
* BRA :EXIT
|
||||||
|
|
||||||
|
|
||||||
* ProDOS file handling for MOS OSFILE LOAD call
|
* ProDOS file handling for MOS OSFILE LOAD call
|
||||||
|
|
Loading…
Reference in New Issue
Block a user