mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2024-11-18 23:10:05 +00:00
8f83ea188e
Fix a typo-ed reference to CLRALTCHAR to correct location.
192 lines
4.8 KiB
ArmAsm
192 lines
4.8 KiB
ArmAsm
* MAINMEM.MISC.S
|
|
* (c) Bobbi 2021 GPLv3
|
|
*
|
|
* Miscellaneous routines used by main memory code.
|
|
|
|
* Copy a block of main memory
|
|
* A1L/A1H: Start address
|
|
* A2L/A2H: End address
|
|
* A4L/A4H: Destination start address
|
|
MEMCPY LDA (A1L)
|
|
STA (A4L)
|
|
LDA A1H
|
|
CMP A2H
|
|
BNE :S1
|
|
LDA A1L
|
|
CMP A2L
|
|
BNE :S1
|
|
:DONE RTS
|
|
:S1 INC A1L
|
|
BNE :S2
|
|
INC A1H
|
|
:S2 INC A4L
|
|
BNE :S3
|
|
INC A4H
|
|
:S3 BRA MEMCPY
|
|
|
|
* Copy 512 bytes from BLKBUF to AUXBLK in aux LC
|
|
COPYAUXBLK >>> ALTZP ; Alt ZP & Alt LC on
|
|
LDY #$00
|
|
STA WRCARDRAM ; Write aux mem
|
|
:L1 LDA BLKBUF+$000,Y
|
|
STA AUXBLK+$000,Y
|
|
LDA BLKBUF+$100,Y
|
|
STA AUXBLK+$100,Y
|
|
INY
|
|
BNE :L1
|
|
STA WRMAINRAM ; Write main mem
|
|
:S2 >>> MAINZP ; Alt ZP off, ROM back in
|
|
RTSINSTR RTS
|
|
|
|
* Search FILEREFS for value in A
|
|
* On return, buffer number is in X (or $FF if no bufs)
|
|
FINDBUF LDX #$00
|
|
:L1 CMP FILEREFS,X
|
|
BEQ :END
|
|
INX
|
|
CPX #$04
|
|
BNE :L1
|
|
LDX #$FF ; $FF for not found
|
|
:END RTS
|
|
|
|
* Obtain I/O buffer address
|
|
* On entry: buffer number in X
|
|
* On exit: buffer address in AY
|
|
* Carry set if no bufs, clear otherwise
|
|
BUFADDR CPX #$00
|
|
BNE :S1
|
|
LDA #<IOBUF1
|
|
LDY #>IOBUF1
|
|
BRA :EXIT
|
|
:S1 CPX #$01
|
|
BNE :S2
|
|
LDA #<IOBUF2
|
|
LDY #>IOBUF2
|
|
BRA :EXIT
|
|
:S2 CPX #$02
|
|
BNE :S3
|
|
LDA #<IOBUF3
|
|
LDY #>IOBUF3
|
|
BRA :EXIT
|
|
:S3 CPX #$03
|
|
BNE :NOBUFS
|
|
LDA #<IOBUF4
|
|
LDY #>IOBUF4
|
|
:EXIT CLC
|
|
RTS
|
|
:NOBUFS SEC
|
|
RTS
|
|
|
|
|
|
* Check if file exists
|
|
* Returns A=0 if doesn't exist, A=1 file, A=2 dir
|
|
EXISTS LDA #<MOSFILE
|
|
STA GINFOPL+1
|
|
LDA #>MOSFILE
|
|
STA GINFOPL+2
|
|
JSR GETINFO ; GET_FILE_INFO
|
|
LDA #$00
|
|
BCS :EXIT ; Any error -> $00
|
|
LDA GINFOPL+7 ; Storage type
|
|
CMP #$0D
|
|
LDA #$01 ; File -> $01
|
|
ADC #$00 ; Dir. -> $02
|
|
:EXIT RTS
|
|
|
|
|
|
* Copy FILEBLK to OSFILECB in aux memory
|
|
* Preserves A
|
|
COPYFB PHA
|
|
LDX #$11 ; 18 bytes in FILEBLK
|
|
STA WRCARDRAM ; Write to aux mem
|
|
:L1 LDA FILEBLK,X
|
|
STA OSFILECB,X
|
|
DEX
|
|
BPL :L1
|
|
STA WRMAINRAM ; Write to main mem again
|
|
PLA
|
|
RTS
|
|
|
|
* Get file info
|
|
GETINFO JSR MLI
|
|
DB GINFOCMD
|
|
DW GINFOPL
|
|
RTS
|
|
|
|
* Set file info
|
|
SETINFO LDA #$07 ; SET_FILE_INFO 7 parms
|
|
STA GINFOPL
|
|
JSR MLI
|
|
DB SINFOCMD
|
|
DW GINFOPL ; Re-use PL from GFI
|
|
LDA #$0A ; GET_FILE_INFO 10 parms
|
|
STA GINFOPL
|
|
RTS
|
|
|
|
* Create disk file
|
|
* Uses filename in MOSFILE
|
|
CRTFILE JSR MLI ; GET_TIME
|
|
DB GTIMECMD
|
|
LDA #<MOSFILE
|
|
STA CREATEPL+1
|
|
LDA #>MOSFILE
|
|
STA CREATEPL+2
|
|
LDA #$C3 ; Open permissions
|
|
STA CREATEPL+3
|
|
LDA PRODOSDATE ; Current date
|
|
STA CREATEPL+8
|
|
LDA PRODOSDATE+1
|
|
STA CREATEPL+9
|
|
LDA PRODOSTIME ; Current time
|
|
STA CREATEPL+10
|
|
LDA PRODOSTIME+1
|
|
STA CREATEPL+11
|
|
JSR MLI
|
|
DB CREATCMD
|
|
DW CREATEPL
|
|
RTS
|
|
|
|
* Open disk file
|
|
OPENMOSFILE LDA #<MOSFILE ; Open filename in MOSFILE
|
|
STA OPENPL+1
|
|
LDA #>MOSFILE
|
|
STA OPENPL+2
|
|
OPENFILE JSR MLI
|
|
DB OPENCMD
|
|
DW OPENPL
|
|
RTS
|
|
|
|
* Close disk file
|
|
CLSFILE JSR MLI
|
|
DB CLSCMD
|
|
DW CLSPL
|
|
RTS
|
|
|
|
* Read 512 bytes into BLKBUF
|
|
RDFILE JSR MLI
|
|
DB READCMD
|
|
DW READPL
|
|
RTS
|
|
|
|
* Write data in BLKBUF to disk
|
|
WRTFILE JSR MLI
|
|
DB WRITECMD
|
|
DW WRITEPL
|
|
RTS
|
|
|
|
* Put ProDOS prefix in PREFIX
|
|
GETPREF JSR MLI
|
|
DB GPFXCMD
|
|
DW GPFXPL
|
|
RTS
|
|
|
|
* Map of file reference numbers to IOBUF1..4
|
|
FILEREFS DB $00,$00,$00,$00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|