add loader
This commit is contained in:
160
snes/loader/routines/memoryclear.asm
Normal file
160
snes/loader/routines/memoryclear.asm
Normal file
@@ -0,0 +1,160 @@
|
||||
/*
|
||||
;partially clears wram to predefined value
|
||||
;in: a,8bit: number of word to clear memory with.
|
||||
; x,16bit: target word adress in wram bank $7e
|
||||
; y,16bit: transfer length
|
||||
;how to use:
|
||||
rep #$31
|
||||
sep #$20
|
||||
lda.b #0 ;clear word: $0000
|
||||
ldy.w #$200
|
||||
ldx.w #PaletteBuffer&$ffff
|
||||
jsr ClearWRAM
|
||||
*/
|
||||
|
||||
ClearWRAM:
|
||||
php
|
||||
phb
|
||||
sep #$20
|
||||
pha
|
||||
lda.b #$80
|
||||
pha
|
||||
plb
|
||||
pla
|
||||
REP #$31 ; mem/A = 8 bit, X/Y = 16 bit
|
||||
|
||||
and.w #$7 ;calculate adress of clear pattern word(8 entries max)
|
||||
asl a
|
||||
adc.w #ClearWramBytePatterns
|
||||
sta.w $4312 ;dma source
|
||||
|
||||
SEP #$20
|
||||
|
||||
lda.b #(:ClearWramBytePatterns+BaseAdress>>16)
|
||||
STA $4314 ;Set source bank to $00
|
||||
|
||||
stx.w $2181 ;store target wram adress in bank $7e
|
||||
stz.w $2183 ;bank $7e
|
||||
|
||||
LDX #$800a
|
||||
STX $4310 ;Set DMA mode to fixed source, WORD to $2180
|
||||
|
||||
sty.w $4315 ;Set transfer size
|
||||
LDA #$02
|
||||
STA $420B ;Initiate transfer
|
||||
plb
|
||||
plp
|
||||
RTS
|
||||
|
||||
;byte patterns to clear wram with.(8 entries max)
|
||||
ClearWramBytePatterns:
|
||||
.dw 0 ;zeros
|
||||
.dw $eaea ;nops
|
||||
.dw $2480 ;bg3 tilemap clear word
|
||||
.dw $00c9 ;oam buffer
|
||||
.dw $2907 ;bg1 tilemap clear
|
||||
|
||||
;clears whole vram
|
||||
ClearVRAM:
|
||||
pha
|
||||
phx
|
||||
php
|
||||
REP #$30 ; mem/A = 8 bit, X/Y = 16 bit
|
||||
SEP #$20
|
||||
|
||||
LDA #$80
|
||||
sta.w $2100 ;set blanking active
|
||||
stz.w $4200 ;disable irqs
|
||||
STA $2115 ;Set VRAM port to word access
|
||||
LDX #$1809
|
||||
STX $4310 ;Set DMA mode to fixed source, WORD to $2118/9
|
||||
LDX #$0000
|
||||
STX $2116 ;Set VRAM port address to $0000
|
||||
STX $0000 ;Set $00:0000 to $0000 (assumes scratchpad ram)
|
||||
STX $4312 ;Set source address to $xx:0000
|
||||
LDA #$00
|
||||
STA $4314 ;Set source bank to $00
|
||||
LDX #$FFFF
|
||||
STX $4315 ;Set transfer size to 64k-1 bytes
|
||||
LDA #$02
|
||||
STA $420B ;Initiate transfer
|
||||
STZ $2119 ;clear the last byte of the VRAM
|
||||
lda.b ScreenBrightness
|
||||
sta.w $2100 ;reenable screen and irqs
|
||||
lda.b InterruptEnableFlags
|
||||
sta.w $4200
|
||||
plp
|
||||
plx
|
||||
pla
|
||||
RTS
|
||||
|
||||
;copy random data to wram
|
||||
;in: TempBuffer0-2 - source pointer
|
||||
; x - wram bank $7e target
|
||||
; y - transfer length
|
||||
DmaToWRAM:
|
||||
php
|
||||
phb
|
||||
sep #$20
|
||||
pha
|
||||
lda.b #$80
|
||||
pha
|
||||
plb
|
||||
pla
|
||||
REP #$31 ; mem/A = 8 bit, X/Y = 16 bit
|
||||
|
||||
lda.b TempBuffer
|
||||
sta.w $4312 ;dma source
|
||||
|
||||
SEP #$20
|
||||
|
||||
lda.b TempBuffer+2
|
||||
STA $4314 ;Set source bank to $00
|
||||
|
||||
stx.w $2181 ;store target wram adress in bank $7e
|
||||
stz.w $2183 ;bank $7e
|
||||
|
||||
LDX #$8002
|
||||
STX $4310 ;Set DMA mode to inc source, WORD to $2180
|
||||
|
||||
sty.w $4315 ;Set transfer size
|
||||
LDA #$02
|
||||
STA $420B ;Initiate transfer
|
||||
plb
|
||||
plp
|
||||
RTS
|
||||
|
||||
;uploads 1 hirom bank to ram bank $7f
|
||||
ROMToWRAM:
|
||||
php
|
||||
phb
|
||||
sep #$20
|
||||
pha
|
||||
lda.b #$80
|
||||
pha
|
||||
plb
|
||||
pla
|
||||
REP #$31 ; mem/A = 8 bit, X/Y = 16 bit
|
||||
|
||||
stz.w $4315 ;Set transfer size
|
||||
stz.w $4312 ;dma source
|
||||
stz.w $2181 ;$7f0000
|
||||
SEP #$20
|
||||
|
||||
lda.b #$c0
|
||||
STA $4314 ;Set source bank to $00
|
||||
|
||||
lda.b #1
|
||||
sta.w $2183 ;bank $7e
|
||||
|
||||
LDX #$8002
|
||||
STX $4310 ;Set DMA mode to inc source, WORD to $2180
|
||||
|
||||
|
||||
LDA #$02
|
||||
STA $420B ;Initiate transfer
|
||||
plb
|
||||
plp
|
||||
RTS
|
||||
|
||||
|
||||
Reference in New Issue
Block a user