160 lines
3.3 KiB
NASM
160 lines
3.3 KiB
NASM
/*
|
|
;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
|
|
|
|
|