mirror of
https://github.com/a2-4am/4cade.git
synced 2025-02-23 02:29:13 +00:00
move LoadFile internals to LC RAM 2
This commit is contained in:
parent
74b221e899
commit
93eeae13af
@ -108,8 +108,8 @@ LastMover
|
||||
!source "src/prodos.impl.a"
|
||||
!if * > $DFEF {
|
||||
!error "code is too large: ends at ", *
|
||||
; } else {
|
||||
; !warn "LCRAM2 ends at ", *
|
||||
} else {
|
||||
!warn "LCRAM2 ends at ", *
|
||||
}
|
||||
}
|
||||
EvenLasterMover
|
||||
|
@ -7,7 +7,6 @@
|
||||
; - LoadFile
|
||||
; - LoadDHRFile
|
||||
; - SaveSmallFile
|
||||
; - SaveOrRestoreScreenHoles
|
||||
;
|
||||
; A general note about paths:
|
||||
;
|
||||
@ -56,24 +55,8 @@ LoadFile
|
||||
jsr AddToPath
|
||||
+LDPARAM 5
|
||||
+STAY ldrlo ; set load address
|
||||
+LDADDR gPathname
|
||||
+STAY namlo ; set filename
|
||||
+READ_RAM2_WRITE_RAM2
|
||||
jsr traverse ; go to subdirectory, set up filename for read
|
||||
lda #cmdread ; read (instead of write)
|
||||
sta reqcmd
|
||||
lda #0 ; 0 = read into main memory
|
||||
sta auxreq
|
||||
lda ldrlo+1
|
||||
bne + ; if caller provided a load address, use it
|
||||
sta sizelo ; otherwise query the load address from file metadata
|
||||
sta sizehi ; 0 = query load address
|
||||
jsr hddopendir ; call ProRWTS2
|
||||
+LDAY ldrlo2
|
||||
+STAY ldrlo
|
||||
+ lda #$FF ; read entire file (ProRWTS2 will figure out exact size)
|
||||
sta sizehi
|
||||
jsr hddopendir ; exit via ProRWTS2
|
||||
jsr LoadFileInternal
|
||||
+READ_RAM1_WRITE_RAM1
|
||||
rts
|
||||
|
||||
@ -99,29 +82,8 @@ LoadDHRFile
|
||||
jsr SetPath
|
||||
+LDPARAM 3
|
||||
jsr AddToPath
|
||||
+LDADDR gPathname
|
||||
+STAY namlo ; set filename
|
||||
+READ_RAM2_WRITE_RAM2
|
||||
jsr traverse ; go to subdirectory, set up filename for read
|
||||
lda #$00 ; read first $2000 bytes
|
||||
sta sizelo
|
||||
sta ldrlo
|
||||
lda #$20
|
||||
sta sizehi
|
||||
asl
|
||||
sta ldrhi ; into $4000
|
||||
lda #1 ; 1 = read into aux memory
|
||||
sta auxreq
|
||||
lda #cmdread ; read (instead of write)
|
||||
sta reqcmd
|
||||
jsr hddopendir ; call ProRWTS2
|
||||
lda #$20 ; read next $2000 bytes
|
||||
sta sizehi
|
||||
asl
|
||||
sta ldrhi ; into $4000
|
||||
dec auxreq ; 0 = read into main memory
|
||||
clc ; not a subdirectory
|
||||
jsr hddrdwrpart ; call ProRWTS2
|
||||
jsr LoadDHRFileInternal
|
||||
+READ_RAM1_WRITE_RAM1
|
||||
rts
|
||||
|
||||
@ -143,24 +105,7 @@ SaveSmallFile
|
||||
+PARAMS_ON_STACK 2
|
||||
+LDPARAM 1
|
||||
+STAY ldrlo ; set data buffer address for ProRWTS2
|
||||
+LDADDR gPathname
|
||||
+STAY namlo ; set filename for ProRWTS2
|
||||
+READ_RAM2_WRITE_RAM2
|
||||
jsr traverse ; go to subdirectory, set up filename for read
|
||||
;;if the write address is always a fixed value then we can discard the query
|
||||
lda #cmdread ; read (instead of write)
|
||||
sta reqcmd
|
||||
lda #0 ; 0 = read into main memory
|
||||
sta sizelo
|
||||
sta sizehi ; 0 = query load address
|
||||
jsr hddopendir ; call ProRWTS2
|
||||
lda ldrlo2
|
||||
sta ldrlo
|
||||
lda ldrhi2
|
||||
sta ldrhi
|
||||
lda #cmdwrite ; write (instead of read)
|
||||
sta reqcmd
|
||||
sta sizelo ; non-zero
|
||||
jsr hddopendir ; exit via ProRWTS2 (must re-open the file after query)
|
||||
jsr SaveSmallFileInternal
|
||||
+READ_RAM1_WRITE_RAM1
|
||||
rts
|
||||
|
@ -584,3 +584,66 @@ holepatch ;sta->lda
|
||||
rts
|
||||
holey_stuff
|
||||
!fill 64
|
||||
|
||||
LoadFileInternal
|
||||
+LDADDR gPathname
|
||||
+STAY namlo ; set filename
|
||||
jsr traverse ; go to subdirectory, set up filename for read
|
||||
lda #cmdread ; read (instead of write)
|
||||
sta reqcmd
|
||||
lda #0 ; 0 = read into main memory
|
||||
sta auxreq
|
||||
lda ldrlo+1
|
||||
bne + ; if caller provided a load address, use it
|
||||
sta sizelo ; otherwise query the load address from file metadata
|
||||
sta sizehi ; 0 = query load address
|
||||
jsr hddopendir ; call ProRWTS2
|
||||
+LDAY ldrlo2
|
||||
+STAY ldrlo
|
||||
+ lda #$FF ; read entire file (ProRWTS2 will figure out exact size)
|
||||
sta sizehi
|
||||
jmp hddopendir ; exit via ProRWTS2
|
||||
|
||||
LoadDHRFileInternal
|
||||
+LDADDR gPathname
|
||||
+STAY namlo ; set filename
|
||||
jsr traverse ; go to subdirectory, set up filename for read
|
||||
lda #$00 ; read first $2000 bytes
|
||||
sta sizelo
|
||||
sta ldrlo
|
||||
lda #$20
|
||||
sta sizehi
|
||||
asl
|
||||
sta ldrhi ; into $4000
|
||||
lda #1 ; 1 = read into aux memory
|
||||
sta auxreq
|
||||
lda #cmdread ; read (instead of write)
|
||||
sta reqcmd
|
||||
jsr hddopendir ; call ProRWTS2
|
||||
lda #$20 ; read next $2000 bytes
|
||||
sta sizehi
|
||||
asl
|
||||
sta ldrhi ; into $4000
|
||||
dec auxreq ; 0 = read into main memory
|
||||
clc ; not a subdirectory
|
||||
jmp hddrdwrpart ; call ProRWTS2
|
||||
|
||||
SaveSmallFileInternal
|
||||
+LDADDR gPathname
|
||||
+STAY namlo ; set filename for ProRWTS2
|
||||
jsr traverse ; go to subdirectory, set up filename for read
|
||||
;;if the write address is always a fixed value then we can discard the query
|
||||
lda #cmdread ; read (instead of write)
|
||||
sta reqcmd
|
||||
lda #0 ; 0 = read into main memory
|
||||
sta sizelo
|
||||
sta sizehi ; 0 = query load address
|
||||
jsr hddopendir ; call ProRWTS2
|
||||
lda ldrlo2
|
||||
sta ldrlo
|
||||
lda ldrhi2
|
||||
sta ldrhi
|
||||
lda #cmdwrite ; write (instead of read)
|
||||
sta reqcmd
|
||||
sta sizelo ; non-zero
|
||||
jmp hddopendir ; exit via ProRWTS2 (must re-open the file after query)
|
||||
|
Loading…
x
Reference in New Issue
Block a user