From b9dda3dbce2ebdb77855d844051ebd0a6de7722c Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Mon, 21 Jan 2013 13:54:50 -0500 Subject: [PATCH] snes: sprite displaying properly! Looks nice --- tb_snes/Makefile | 10 ++++++-- tb_snes/checksum.inc | 4 +-- tb_snes/level_1.s | 58 +++++++++++++++++++++++++------------------- 3 files changed, 43 insertions(+), 29 deletions(-) diff --git a/tb_snes/Makefile b/tb_snes/Makefile index ec3689f..942231c 100644 --- a/tb_snes/Makefile +++ b/tb_snes/Makefile @@ -11,9 +11,15 @@ tb1_snes.sfc: tb1_snes.o snes-hirom.cfg tb1_snes.o: tb1_snes.s \ snes_init.s opening.s title_screen.s level_1.s \ svmwgraph.s \ - tb1_title.tiles tb1_opening.tiles tbfont.inc + tb1_title.tiles tb1_opening.tiles \ + level1_pal0.sprites \ + tbfont.inc $(AS) -t none -o tb1_snes.o -l tb1_snes.lst -c tb1_snes.s + +level1_pal0.sprites: graphics/level1_pal0.pcx tools/pcx_to_tiles_4bpp + ./tools/pcx_to_tiles_4bpp level1_pal0 < graphics/level1_pal0.pcx > level1_pal0.sprites + tb1_opening.tiles: graphics/vmw_logo.pcx ./tools/pcx_to_tiles_8bpp ./tools/pcx_to_tiles_8bpp vmw_logo < graphics/vmw_logo.pcx > tb1_opening.tiles @@ -33,5 +39,5 @@ tools/pcx_to_tiles_8bpp: cd tools && make clean: - rm -f *~ *.o *.lst *.sfc *.tiles tbfont.inc + rm -f *~ *.o *.lst *.sfc *.tiles *.sprites tbfont.inc cd tools && make clean diff --git a/tb_snes/checksum.inc b/tb_snes/checksum.inc index 63aa535..29b2fec 100644 --- a/tb_snes/checksum.inc +++ b/tb_snes/checksum.inc @@ -1,2 +1,2 @@ - .word $762f ; Complement of checksum - .word $89d0 ; Unsigned 16-bit sum of ROM + .word $d6a7 ; Complement of checksum + .word $2958 ; Unsigned 16-bit sum of ROM diff --git a/tb_snes/level_1.s b/tb_snes/level_1.s index 0394e34..fefb922 100644 --- a/tb_snes/level_1.s +++ b/tb_snes/level_1.s @@ -12,7 +12,9 @@ ball_x = $0000 level_1: rep #$20 ; mem/A = 16 bit + rep #$10 ; X/Y = 16 bit .a16 +.i16 ;========================== @@ -45,8 +47,8 @@ level_1: lda #128 sta $2121 ; Start at START color - lda #^sprite_palette ; Using ^ before the parameter gets its bank. - ldx #sprite_palette ; + lda #^level1_pal0_palette ; Using ^ before the parameter gets its bank. + ldx #.LOWORD(level1_pal0_palette) ldy #(16 * 2) ; 2 bytes for every color ; In: A:X -- points to the data @@ -58,7 +60,7 @@ level_1: php ; Preserve Registers sep #$20 - +.a8 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 @@ -75,13 +77,14 @@ level_1: pla ; Load sprite data to VRAM - lda #$80 + lda #$80 ; increment after writing $2119 sta $2115 ldx #$0000 ; DEST stx $2116 ; $2116: Word address for accessing VRAM. - lda #^sprite_data ; SRCBANK - ldx #sprite_data ; SRCOFFSET - ldy #$0100 ; SIZE + lda #^level1_pal0_data ; SRCBANK + ldx #.LOWORD(level1_pal0_data) ; SRCOFFSET + ldy #$0800 ; SIZE + ; 32 bytes * 64 tiles ; In: A:X -- points to the data ; Y -- Number of bytes to copy (0 to 65535) (assumes 16-bit index) @@ -90,7 +93,7 @@ level_1: php ; Preserve Registers sep #$20 - +.a8 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 @@ -100,7 +103,7 @@ level_1: lda #$18 ; Set the destination register (VRAM write register) sta $4301 lda #$01 ; Initiate DMA transfer (channel 1) - sta $420B + sta $420b plp ; restore registers plb @@ -115,28 +118,34 @@ level_1: sep #$20 ; mem/A = 8 bit .a8 - lda #($0) - sta $0000 + stz $0000 ; set sprite 0 X to 0 - lda #(224/2 - 16) + lda #100 ; set sprite 0 Y to 100 sta $0001 - stz $0002 - lda #%01110000 + ; Xxxxxxxxx yyyyyyy cccccccc vhoopppN + ; + + stz $0002 ; set sprite 0 + + ; 00000000 + ; no flip, priority 0, N=0 palette=0 (128) + + lda #$00 sta $0003 -; rep #$20 ; mem/A = 16 bit -;.a16 + ; X high bit = 0 for sprite 0 + ; sprite size = 0 (smaller) - lda #%01010100 + lda #%01010110 sta $0200 ; Enable sprite ; sssnnbbb - ; ss = size (8x8 in our case) + ; sss = size (16x16 and 32x32 in our case) ; nn = name - ; bb = base selection - lda #%00000000 + ; bbb = base selection + lda #%01100000 sta $2101 jsr svmw_transfer_sprite @@ -276,12 +285,11 @@ done_vblank: ; Sprite Data ;============================================================================ -; sprite data - .include "sphere.sprite" +.segment "HIGHROM" + +; sprite data + .include "level1_pal0.sprites" -; tile data -;tile_pal: -;.include "tb1.pal" .segment "BSS" x_direction: .word 0