Displaying sprites

How to display a 64*80 (4*5 tiles) sprite block at x=88, y=36.

Loading palette
At least one palette needs to be loaded. Here SpritePalette is loaded as palette 0 and the backdrop color is set to black.

lea    SpritePalette,a0 lea    PALETTES,a1 moveq.l #16-1,d0 .ldpal move.w (a0)+,(a1)+ dbra   .ldpal

move.w #BLACK,BACKDROPCOLOR

Setting the map
The sprite's map is an array of tile numbers and attributes. Here the 4 sprites are made of tiles 0~4 with no special attributes.

move.w #64,d2          ;SCB1, sprite 1 move.w #1,VRAM_MOD moveq.l #4-1,d6 .sprites: move.w d2,VRAM_ADDR clr.w  d1              ;First tile is #0 moveq.l #5-1,d7 .tiles: move.w d1,VRAM_RW      ;Tile number move.w #0,VRAM_RW      ;No attributes addq.b #1,d1 dbra   d7,.tiles addi.w #64,d2          ;Next sprite dbra   d6,.sprites

Setting the shrinking
No shrinking at all (full size).

move.w #SCB2+1,VRAM_ADDR moveq.l #4-1,d7 .zset: move.w #$0FFF,VRAM_RW dbra   d7,.zset

Setting the size and vertical position
First sprite is the driving one, next are driven.

move.w #SCB3+1,VRAM_ADDR move.w #((496-36)<<7)+5,VRAM_RW ;Y position and size for the first sprite moveq.l #5-1-1,d7 .yset: move.w #64,VRAM_RW   ;Sticky bit only for the 3 others dbra   d7,.yset

Setting the horizontal position
move.w #SCB4+1,VRAM_ADDR move.w #88<<7,VRAM_RW