X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=test.asm;h=4c51874f0642156d0f756809b7c5a97d62463c97;hb=d056c4cbe305565a50a4ee9d60906d78fb119b4d;hp=991930826efb80d86cc555f01016c2df2e1a1871;hpb=4b093322cbd6142997aa4f5c34b63f4c68a4cfdb;p=snes_test1 diff --git a/test.asm b/test.asm index 9919308..4c51874 100644 --- a/test.asm +++ b/test.asm @@ -3,10 +3,34 @@ .segment "rodata" .include "data.inc" + .include "sintab.inc" .segment "code" - vmem_tiles_offs = 4096 + .macro A16 + rep #$20 + .a16 + .endmacro + .macro A8 + sep #$20 + .a8 + .endmacro + .macro I16 + rep #$10 + .i16 + .endmacro + .macro I8 + sep #$10 + .i8 + .endmacro + + ; VMEM map + ; 0000: tilemap for BG1 (32x32 4bpp: 512b) + ; 2048: BG3-base (h/v offsets) + ; 8192: tile data (16k) + vmem_tiles_offs = 4096 ; 4k words + vmem_hoffs_offs = 1024 ; 2k words + vmem_voffs_offs = vmem_hoffs_offs + 32 sei clc @@ -20,9 +44,11 @@ .i8 jsr snes_init + setreg REG_SETINI, $4 ; 239 lines setreg REG_BGMODE, $02 ; mode 2, 8x8 tiles - setreg REG_BG12NBA, $1 ; tiles at offs 4kb + setreg REG_BG12NBA, $1 ; tiles at offs 8kb setreg REG_TM, $1 ; main screen: BG1 + setreg REG_BG3SC, (vmem_hoffs_offs / 1024) << 2 ldx #0 cmap_loop: @@ -42,30 +68,79 @@ cmap_loop: pea logo4bpp_tiles pea vmem_tiles_offs jsr copy_vmem - rep #$20 - .a16 + A16 pla pla pla - sep #$20 - .a8 + A8 pea logo4bpp_tilemap_rows * logo4bpp_tilemap_cols * 2 pea logo4bpp_tilemap pea 0 jsr copy_vmem - rep #$20 - .a16 + A16 pla pla pla - sep #$20 - .a8 + A8 fblank 0 -halt: - jmp halt + ; main loop + nframe = 0 + ncol = 2 + anim = 4 + + A16 + stz nframe + A8 +mainloop: + wait_vblank + + A16 + lda nframe + lsr + lsr + sta anim + inc nframe + A8 + + lda #(vmem_voffs_offs & $ff) + sta REG_VMADDL + lda #(vmem_voffs_offs >> 8) + sta REG_VMADDH + + stz ncol +@cloop: + lda anim + clc + adc ncol + asl + tax + lda sintab,x + lsr + lsr + lsr + + ldx ncol + bne @per_tile_offs + ; global scroll for the first column + sta REG_BG1VOFFS + stz REG_BG1VOFFS + bra @end + +@per_tile_offs: + sta REG_VMDATAL + lda #$20 ; enable for BG1 + sta REG_VMDATAH +@end: + + inc ncol + lda ncol + and #$1f + bne @cloop + + bra mainloop ; copy_vmem(vmem_offset, src, num_words) copy_vmem: @@ -189,6 +264,16 @@ snes_init: stz REG_MDMAEN stz REG_HDMAEN stz REG_MEMSEL + + ; clear vmem + I16 + setreg REG_VMAINC, $80 + ldx $4000 +@clear: stz REG_VMDATAL + stz REG_VMDATAH + dex + bne @clear + I8 rts ; cartridge header