21968ae8ef
DMA write was always working, I just had the wrong tile data format Tile data is two bytes, not wrong Also keep around previously-working tile-load loop for prosterity
74 lines
1.1 KiB
NASM
74 lines
1.1 KiB
NASM
|
|
.MACRO Spin_Loop ARGS XCOUNT
|
|
|
|
ldx #XCOUNT
|
|
lvl3\@:
|
|
lda #$ff
|
|
lvl2\@:
|
|
xba
|
|
lda #$ff
|
|
lvl1\@:
|
|
dea
|
|
cmp #$00
|
|
bne lvl1\@
|
|
xba
|
|
dea
|
|
cmp #$00
|
|
bne lvl2\@
|
|
dex
|
|
txa
|
|
cmp #$00
|
|
bne lvl3\@
|
|
.ENDM
|
|
|
|
.MACRO Set_A_8_XY_16
|
|
; 16-bit xy, 8-bit a
|
|
rep #%00010000
|
|
sep #%00100000
|
|
.ENDM
|
|
|
|
.MACRO Reset_Palette_Offset
|
|
stz $2121
|
|
.ENDM
|
|
|
|
.MACRO Load_Palette_Color ARGS BYTE1 BYTE2
|
|
|
|
lda #BYTE1
|
|
sta $2122
|
|
;lda #BYTE2
|
|
;sta $2122
|
|
|
|
.ENDM
|
|
|
|
.MACRO Set_Screen_Brightness
|
|
lda #\1
|
|
sta $2100 ; $2100 is the screen brightness register
|
|
|
|
.ENDM
|
|
|
|
|
|
|
|
; loads, in a loop, an alternating grid of tiles
|
|
.MACRO Tile_Load_Loop
|
|
|
|
ldx #$0400 ; load $0400 (VRAM address of tile data)
|
|
TileLoadLoop:
|
|
|
|
stx $2116 ; store VRAM address of tile data to VRAM address word-sized register
|
|
|
|
lda #$01 ; smile tile
|
|
sta $2118 ;store tile map entry to the address specified in $2116 - this increments or not based on 2115
|
|
|
|
inx
|
|
stx $2116
|
|
|
|
lda #$00 ; blank tile
|
|
sta $2118
|
|
|
|
inx
|
|
|
|
cpx #$0780 ; $400 - $780 seems to be limit of snes screen tile memory
|
|
bne TileLoadLoop
|
|
|
|
.ENDM
|