12 ; 0000: tilemap for BG1 (32x32 4bpp: 512b)
13 ; 2048: BG3-base (h/v offsets)
14 ; 8192: tile data (16k)
15 vmem_tiles_offs = 4096 ; 4k words
16 vmem_hoffs_offs = 1024 ; 2k words
17 vmem_voffs_offs = vmem_hoffs_offs + 32
29 setreg REG_SETINI, $4 ; 239 lines
30 setreg REG_BGMODE, $02 ; mode 2, 8x8 tiles
31 setreg REG_BG12NBA, $1 ; tiles at offs 8kb
32 setreg REG_TM, $1 ; main screen: BG1
33 setreg REG_BG3SC, (vmem_hoffs_offs / 1024) << 2
46 cpx #32 ; 16 entries 2 bytes each
49 pea logo4bpp_tiles_width * logo4bpp_tiles_height / 2
59 pea logo4bpp_tilemap_rows * logo4bpp_tilemap_cols * 2
104 ; global scroll for the first column
117 ;lda #$20 ; enable for BG1
129 ; wait for vblank, and DMA the table to vmem
135 lda #(vmem_voffs_offs & $ff)
137 lda #(vmem_voffs_offs >> 8)
140 setreg REG_DMAP(0), $01 ; A->B words at X,X+1, A inc
141 setreg REG_BBAD(0), REG_VMDATAL & $ff ; write to VMDATAL,VMDATAH
142 setreg REG_A1TL(0), shadow_voffs
143 setreg REG_A1TH(0), 0
145 setreg REG_DASL(0), 64
146 setreg REG_DASH(0), 0
147 setreg REG_DASB(0), 0
148 setreg REG_MDMAEN, 1 ; enable DMA channel 0
153 ; copy_vmem(vmem_offset, src, num_words)
155 rep #$30 ; 16bit accumulator and index registers
159 tsc ; and make it point to the stack
161 A8 ; restore 8bit accum
169 lda #$80 ; auto incerment after wiriting high byte
187 I8 ; back to 8bit index registers
222 setreg REG_VMAINC, $80
255 setreg REG_CGWSEL, $30
257 setreg REG_COLDATA, $e0
276 setreg REG_VMAINC, $80
278 @clear: stz REG_VMDATAL
288 .byte $20 ; fast ROM, LoROM mapping
290 .byte 1 ; ROM banks 1 = 32k
292 .byte 2 ; country europe/oceania/asia
293 .byte 0 ; developer id: none
294 .byte 0 ; ROM version
295 .word $ffff ; checksum complement
302 .word 0 ; NMI (vblank)
310 .word 0 ; NMI (vblank)