snes: sprite displaying properly!

Looks nice
This commit is contained in:
Vince Weaver 2013-01-21 13:54:50 -05:00
parent 5d8a70dc96
commit b9dda3dbce
3 changed files with 43 additions and 29 deletions

View File

@ -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

View File

@ -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

View File

@ -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