Each of the eight sprite DMA channels can produce more than one independently controllable image. There may be times when you want more than eight objects, or you may be left with fewer than eight objects because you have attached some of the sprites to produce more colors or larger objects or overlapped some to produce more complex images. You can reuse each sprite DMA channel several times within the same display field, as shown in Figure 4-9. Part of a screen display ________________________ | | | _ | | _|_|_ | | \___/_ _ _ _|_ _ Each image of this sprite may | _ _ _ _ _ _ _ _ _ _|_ _ <-- be placed at any desired spot, | _/_\_ | horizontally or vertically. | |_____| | however, at least one video | \_/_ _ _ _ _ _ _ _ _|_ _ line must seperate the bottom | _ _ _ _ _ _|_ _ <-- of one usage of a sprite from | /\ | the starting point of the next | \/ | usage. | | | | | | | | | | |________________________| Figure 4-9: Typical Example of Sprite Reuse In single-sprite usage, two all-zero words are placed at the end of the data structure to stop the DMA channel from retrieving any more data for that particular sprite during that display field. To reuse a DMA channel, you replace this pair of zero words with another complete sprite data structure , which describes the reuse of the DMA channel at a position lower on the screen than the first use. You place the two all-zero words at the end of the data structure that contains the information for all usages of the DMA channel. For example, Figure 4-10 shows the data structure that describes the picture above. SPRITE DISPLAY LIST ___________________________ - - | | | | |___________________________| | | | | |___________________________| | | ___________________________ | | | | |___________________________| | | | | |___________________________| Data describing the | |- - - first vertical usage of ------ this sprite | ------ | ------ | ___________________________ | | | | |___________________________| | | | | |___________________________| | - - Increasing RAM memory addresses ___________________________ - - | | | | Data describing the |___________________________| second vertical usage of | | | |- - - this sprite. Contents of |___________________________| vertical start word must | | be at least one video ___________________________ line below actual end of | | | | preceding usage. |___________________________| | | | | |___________________________| | | ------ | ------ | ------ | ___________________________ | | | | |___________________________| |- - - End-of-data words ending | | the usage of this sprite \|/ |___________________________| | - - Figure 4-10: Typical Data Structure for Sprite Re-use The only restrictions on the reuse of sprites during a single display field is that the bottom line of one usage of a sprite must be separated from the top line of the next usage by at least one horizontal scan line. This restriction is necessary because only two DMA cycles per horizontal scan line are allotted to each of the eight channels. The sprite channel needs the time during the blank line to fetch the control word describing the next usage of the sprite. The following example displays the spaceship sprite and then redisplays it as a different object. Only the sprite data list is affected, so only the data list is shown here. However, the sprite looks best with the color registers set as shown in the example. LEA CUSTOM,a0 MOVE.W #$0F00,COLOR17(a0) ;Color 17 = red MOVE.W #$0FF0,COLOR18(a0) ;Color 18 = yellow MOVE.W #$0FFF,COLOR19(a0) ;Color 19 = white SPRITE: DC.W $6D60,$7200 DC.W $0990,$07E0 DC.W $13C8,$0FF0 DC.W $23C4,$1FF8 DC.W $13C8,$0FF0 DC.W $0990,$07E0 DC.W $8080,$8D00 ;VSTART, HSTART, VSTOP for new sprite DC.W $1818,$0000 DC.W $7E7E,$0000 DC.W $7FFE,$0000 DC.W $FFFF,$2000 DC.W $FFFF,$2000 DC.W $FFFF,$3000 DC.W $FFFF,$3000 DC.W $7FFE,$1800 DC.W $7FFE,$0C00 DC.W $3FFC,$0000 DC.W $0FF0,$0000 DC.W $03C0,$0000 DC.W $0180,$0000 DC.W $0000,$0000 ;End of sprite data