123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /*
- ;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
-
-
|