From: John Tsiombikas Date: Sun, 5 Jul 2020 09:38:32 +0000 (+0300) Subject: vertical wave X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=snes_test1;a=commitdiff_plain;h=097c3ec68b5ce13fffc3dbd09eb384716931fde1 vertical wave --- diff --git a/.gitignore b/.gitignore index c8f7c7a..6b22305 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ data.inc *.sfc img2snes/img2snes +sintab/sintab link.map diff --git a/Makefile b/Makefile index ebe9b8a..3474e41 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,23 @@ test.sfc: test.o ld65 -o $@ -m link.map -C snes.ld $< -test.o: test.asm hwregs.inc data.inc +test.o: test.asm hwregs.inc data.inc sintab.inc %.o: %.asm ca65 -o $@ --cpu 65816 $< data.inc: logo4bpp.png img2snes/img2snes - img2snes/img2snes -o data.inc logo4bpp.png + img2snes/img2snes -o $@ logo4bpp.png + +sintab.inc: sintab/sintab + sintab/sintab >$@ img2snes/img2snes: $(MAKE) -C img2snes +sintab/sintab: + $(MAKE) -C sintab + .PHONY: clean clean: rm -f test.sfc test.o diff --git a/hwregs.inc b/hwregs.inc index 672aedf..5fd9f2c 100644 --- a/hwregs.inc +++ b/hwregs.inc @@ -82,6 +82,8 @@ REG_MDMAEN = $420b REG_HDMAEN = $420c + REG_HVBJOY = $4212 + REG_DMAP_BASE = $4300 REG_BBAD_BASE = $4301 REG_A1TL_BASE = $4302 @@ -123,3 +125,11 @@ setreg REG_CGDATA, (g >> 3 | b << 2) .endmacro + .macro wait_vblank +@wait_vblank_loop: + lda REG_HVBJOY + and #$80 + beq @wait_vblank_loop + .endmacro + + ; vi:ft=asm_ca65: diff --git a/sintab.inc b/sintab.inc new file mode 100644 index 0000000..64f9d5c --- /dev/null +++ b/sintab.inc @@ -0,0 +1,257 @@ +sintab: + .byte 127 + .byte 130 + .byte 133 + .byte 136 + .byte 139 + .byte 143 + .byte 146 + .byte 149 + .byte 152 + .byte 155 + .byte 158 + .byte 161 + .byte 164 + .byte 167 + .byte 170 + .byte 173 + .byte 176 + .byte 179 + .byte 182 + .byte 184 + .byte 187 + .byte 190 + .byte 193 + .byte 195 + .byte 198 + .byte 200 + .byte 203 + .byte 205 + .byte 208 + .byte 210 + .byte 213 + .byte 215 + .byte 217 + .byte 219 + .byte 221 + .byte 224 + .byte 226 + .byte 228 + .byte 229 + .byte 231 + .byte 233 + .byte 235 + .byte 236 + .byte 238 + .byte 239 + .byte 241 + .byte 242 + .byte 244 + .byte 245 + .byte 246 + .byte 247 + .byte 248 + .byte 249 + .byte 250 + .byte 251 + .byte 251 + .byte 252 + .byte 253 + .byte 253 + .byte 254 + .byte 254 + .byte 254 + .byte 254 + .byte 254 + .byte 255 + .byte 254 + .byte 254 + .byte 254 + .byte 254 + .byte 254 + .byte 253 + .byte 253 + .byte 252 + .byte 251 + .byte 251 + .byte 250 + .byte 249 + .byte 248 + .byte 247 + .byte 246 + .byte 245 + .byte 244 + .byte 242 + .byte 241 + .byte 239 + .byte 238 + .byte 236 + .byte 235 + .byte 233 + .byte 231 + .byte 229 + .byte 228 + .byte 226 + .byte 224 + .byte 221 + .byte 219 + .byte 217 + .byte 215 + .byte 213 + .byte 210 + .byte 208 + .byte 205 + .byte 203 + .byte 200 + .byte 198 + .byte 195 + .byte 193 + .byte 190 + .byte 187 + .byte 184 + .byte 182 + .byte 179 + .byte 176 + .byte 173 + .byte 170 + .byte 167 + .byte 164 + .byte 161 + .byte 158 + .byte 155 + .byte 152 + .byte 149 + .byte 146 + .byte 143 + .byte 139 + .byte 136 + .byte 133 + .byte 130 + .byte 127 + .byte 124 + .byte 121 + .byte 118 + .byte 115 + .byte 111 + .byte 108 + .byte 105 + .byte 102 + .byte 99 + .byte 96 + .byte 93 + .byte 90 + .byte 87 + .byte 84 + .byte 81 + .byte 78 + .byte 75 + .byte 72 + .byte 70 + .byte 67 + .byte 64 + .byte 61 + .byte 59 + .byte 56 + .byte 54 + .byte 51 + .byte 49 + .byte 46 + .byte 44 + .byte 41 + .byte 39 + .byte 37 + .byte 35 + .byte 33 + .byte 30 + .byte 28 + .byte 26 + .byte 25 + .byte 23 + .byte 21 + .byte 19 + .byte 18 + .byte 16 + .byte 15 + .byte 13 + .byte 12 + .byte 10 + .byte 9 + .byte 8 + .byte 7 + .byte 6 + .byte 5 + .byte 4 + .byte 3 + .byte 3 + .byte 2 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 1 + .byte 1 + .byte 2 + .byte 3 + .byte 3 + .byte 4 + .byte 5 + .byte 6 + .byte 7 + .byte 8 + .byte 9 + .byte 10 + .byte 12 + .byte 13 + .byte 15 + .byte 16 + .byte 18 + .byte 19 + .byte 21 + .byte 23 + .byte 25 + .byte 26 + .byte 28 + .byte 30 + .byte 33 + .byte 35 + .byte 37 + .byte 39 + .byte 41 + .byte 44 + .byte 46 + .byte 49 + .byte 51 + .byte 54 + .byte 56 + .byte 59 + .byte 61 + .byte 64 + .byte 67 + .byte 70 + .byte 72 + .byte 75 + .byte 78 + .byte 81 + .byte 84 + .byte 87 + .byte 90 + .byte 93 + .byte 96 + .byte 99 + .byte 102 + .byte 105 + .byte 108 + .byte 111 + .byte 115 + .byte 118 + .byte 121 + .byte 124 diff --git a/sintab/Makefile b/sintab/Makefile new file mode 100644 index 0000000..f78c3c9 --- /dev/null +++ b/sintab/Makefile @@ -0,0 +1,4 @@ +LDFLAGS = -lm + +sintab: sintab.o + $(CC) -o $@ $< $(LDFLAGS) diff --git a/sintab/sintab.c b/sintab/sintab.c new file mode 100644 index 0000000..150a32d --- /dev/null +++ b/sintab/sintab.c @@ -0,0 +1,13 @@ +#include +#include + +int main(void) +{ + int i; + + printf("sintab:\n"); + for(i=0; i<256; i++) { + float s = sin(i * 2.0 * M_PI / 256.0) * 0.5 + 0.5; + printf("\t.byte %d\n", (int)(s * 255.0)); + } +} diff --git a/test.asm b/test.asm index e3a31e8..eff673c 100644 --- a/test.asm +++ b/test.asm @@ -3,16 +3,26 @@ .segment "rodata" .include "data.inc" + .include "sintab.inc" .segment "code" + .macro A16 + rep #$20 + .a16 + .endmacro + .macro A8 + sep #$20 + .a8 + .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 - hoffs_offs = 1024 ; 2k words + vmem_hoffs_offs = 1024 ; 2k words + vmem_voffs_offs = vmem_hoffs_offs + 32 sei clc @@ -26,9 +36,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 8kb setreg REG_TM, $1 ; main screen: BG1 + setreg REG_BG3SC, (vmem_hoffs_offs / 1024) << 2 ldx #0 cmap_loop: @@ -48,30 +60,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: