o add snes test sample
This commit is contained in:
143
snes/simpletest/LoadGraphics.asm
Normal file
143
snes/simpletest/LoadGraphics.asm
Normal file
@@ -0,0 +1,143 @@
|
||||
;============================================================================
|
||||
; Macros
|
||||
;============================================================================
|
||||
|
||||
;============================================================================
|
||||
;LoadPalette - Macro that loads palette information into CGRAM
|
||||
;----------------------------------------------------------------------------
|
||||
; In: SRC_ADDR -- 24 bit address of source data,
|
||||
; START -- Color # to start on,
|
||||
; SIZE -- # of COLORS to copy
|
||||
;----------------------------------------------------------------------------
|
||||
; Out: None
|
||||
;----------------------------------------------------------------------------
|
||||
; Modifies: A,X
|
||||
; Requires: mem/A = 8 bit, X/Y = 16 bit
|
||||
;----------------------------------------------------------------------------
|
||||
.MACRO LoadPalette
|
||||
lda #\2
|
||||
sta $2121 ; Start at START color
|
||||
lda #:\1 ; Using : before the parameter gets its bank.
|
||||
ldx #\1 ; Not using : gets the offset address.
|
||||
ldy #(\3 * 2) ; 2 bytes for every color
|
||||
jsr DMAPalette
|
||||
.ENDM
|
||||
|
||||
;============================================================================
|
||||
; LoadBlockToVRAM -- Macro that simplifies calling LoadVRAM to copy data to VRAM
|
||||
;----------------------------------------------------------------------------
|
||||
; In: SRC_ADDR -- 24 bit address of source data
|
||||
; DEST -- VRAM address to write to (WORD address!!)
|
||||
; SIZE -- number of BYTEs to copy
|
||||
;----------------------------------------------------------------------------
|
||||
; Out: None
|
||||
;----------------------------------------------------------------------------
|
||||
; Modifies: A, X, Y
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
;LoadBlockToVRAM SRC_ADDRESS, DEST, SIZE
|
||||
; requires: mem/A = 8 bit, X/Y = 16 bit
|
||||
.MACRO LoadBlockToVRAM
|
||||
lda #$80
|
||||
sta $2115
|
||||
ldx #\2 ; DEST
|
||||
stx $2116 ; $2116: Word address for accessing VRAM.
|
||||
lda #:\1 ; SRCBANK
|
||||
ldx #\1 ; SRCOFFSET
|
||||
ldy #\3 ; SIZE
|
||||
jsr LoadVRAM
|
||||
.ENDM
|
||||
|
||||
|
||||
|
||||
|
||||
;============================================================================
|
||||
; Routines
|
||||
;============================================================================
|
||||
|
||||
.BANK 0
|
||||
.ORG 0
|
||||
.SECTION "LoadVRAMCode" SEMIFREE
|
||||
|
||||
;============================================================================
|
||||
; LoadVRAM -- Load data into VRAM
|
||||
;----------------------------------------------------------------------------
|
||||
; In: A:X -- points to the data
|
||||
; Y -- Number of bytes to copy (0 to 65535) (assumes 16-bit index)
|
||||
;----------------------------------------------------------------------------
|
||||
; Out: None
|
||||
;----------------------------------------------------------------------------
|
||||
; Modifies: none
|
||||
;----------------------------------------------------------------------------
|
||||
; Notes: Assumes VRAM address has been previously set!!
|
||||
;----------------------------------------------------------------------------
|
||||
LoadVRAM:
|
||||
pha
|
||||
phx
|
||||
phy
|
||||
phb
|
||||
php ; Preserve Registers
|
||||
|
||||
sep #$20
|
||||
|
||||
stx $4302 ; Store Data offset into DMA source offset
|
||||
sta $4304 ; Store data Bank into DMA source bank
|
||||
sty $4305 ; Store size of data block
|
||||
|
||||
lda #$01
|
||||
sta $4300 ; Set DMA mode (word, normal increment)
|
||||
lda #$18 ; Set the destination register (VRAM write register)
|
||||
sta $4301
|
||||
lda #$01 ; Initiate DMA transfer (channel 1)
|
||||
sta $420B
|
||||
|
||||
plp ; restore registers
|
||||
plb
|
||||
ply
|
||||
plx
|
||||
pla
|
||||
rts ; return
|
||||
;============================================================================
|
||||
|
||||
.ENDS
|
||||
|
||||
.BANK 0
|
||||
.ORG 0
|
||||
.SECTION "DMAPaletteCode" SEMIFREE
|
||||
|
||||
;============================================================================
|
||||
; DMAPalette -- Load entire palette using DMA
|
||||
;----------------------------------------------------------------------------
|
||||
; In: A:X -- points to the data
|
||||
; Y -- Size of data
|
||||
;----------------------------------------------------------------------------
|
||||
; Out: None
|
||||
;----------------------------------------------------------------------------
|
||||
; Modifies: none
|
||||
;----------------------------------------------------------------------------
|
||||
DMAPalette:
|
||||
pha
|
||||
phx
|
||||
phb
|
||||
php ; Preserve Registers
|
||||
|
||||
sep #$20
|
||||
|
||||
stx $4302 ; Store data offset into DMA source offset
|
||||
sta $4304 ; Store data bank into DMA source bank
|
||||
sty $4305 ; Store size of data block
|
||||
|
||||
stz $4300 ; Set DMA Mode (byte, normal increment)
|
||||
lda #$22 ; Set destination register ($2122 - CGRAM Write)
|
||||
sta $4301
|
||||
lda #$01 ; Initiate DMA transfer
|
||||
sta $420B
|
||||
|
||||
plp ; Restore registers
|
||||
plb
|
||||
plx
|
||||
pla
|
||||
rts ; return from subroutine
|
||||
;============================================================================
|
||||
|
||||
.ENDS
|
||||
Reference in New Issue
Block a user