[Contents] [index] [Help] [Retrace] [browse <] [Browse >]

Sprites are produced by the circuitry shown in Figure 4-13. This figure
shows in block form how a pair of  data words  becomes a set of pixels
displayed on the screen.

     figure 4-13: sprite control circuitry 

The circuitry elements for sprite display are explained below.

*  Sprite data registers.
   ----------------------
   The registers  sprxdata and sprxdatb  hold the bit patterns that
   describe one horizontal line of a sprite for each of the eight
   sprites. A line is 16 pixels wide, and each line is defined by two
   words to provide selection of three colors and transparent.

*  Parallel-to-serial converters.
   ------------------------------
   Each of the 16 bits of the sprite data bit pattern is individually
   sent to the color select circuitry at the time that the pixel
   associated with that bit is being displayed on-screen.

   Immediately after the data is transferred from the sprite data
   registers, each parallel-to-serial converter begins shifting the bits
   out of the converter, most significant (leftmost) bit first. The
   shift occurs once during each low resolution pixel time and continues
   until all 16 bits have been transferred to the display circuitry. The
   shifting and data output does not begin again until the next time
   this converter is loaded from the data registers.

   Because the video image is produced by an electron beam that is being
   swept from left to right on the screen, the bit image of the data
   corresponds exactly to the image that actually appears on the screen
   (most significant data on the left).

*  Sprite serial video data.
   -------------------------
   Sprite data goes to the  priority circuit to establish the priority
   between sprites and playfields.

*  Sprite position registers.
   --------------------------
   These registers, called  sprxpos , contain the horizontal position
   value (X value) and vertical position value (Y value) for each of the
   eight sprites.

*  Sprite control registers.
   -------------------------
   These registers, called  sprxctl , contain the stopping position for
   each of the eight sprites and whether or not a sprite is  attached.

*  Beam counter.
   -------------
   The  beam counter  tells the system the current location of the video
   beam that is producing the picture.

*  Comparator.
   -----------
   This device compares the value of the beam counter to the Y value in
   the position register  sprxpos . if the beam has reached the position
   at which the leftmost upper pixel of the sprite is to appear, the
   comparator issues a load signal to the serial-to-parallel converter
   and the sprite display begins.

Figure 4-13 shows the following:

*  Writing to the sprite control registers disables the horizontal
   comparator circuitry. This prevents the system from sending any
   output from the data registers to the serial converter or to the
   screen.

*  Writing to the sprite A data register enables the horizontal
   comparator. This enables output to the screen when the horizontal
   position of the video beam equals the horizontal value in the
   position register.

*  If the comparator is enabled, the sprite data will be sent to the
   display, with the leftmost pixel of the sprite data placed at the
   position defined in the horizontal part of  sprxpos .

*  As long as the comparator remains enabled, the current contents of
   the sprite data register will be output at the selected horizontal
   position on a video line.

*  The data in the sprite data registers does not change. It is either
   rewritten by the user or modified under DMA control.

The components described above produce the automatic DMA display as
follows: When the sprites are in DMA mode, the 18-bit sprite pointer
register (composed of  sprxpth and sprxptl ) is used to read the first two
words from the sprite  data structure . these words contain the starting
and stopping position of the sprite. Next, the pointers write these words
into  sprxpos  and  sprxctl . after this write, the value in the pointers
points to the address of the first  data word  (low word of data for line
1 of the sprite.)

Writing into the  sprxctl  register disabled the sprite. now the sprite
DMA channel will wait until the vertical beam counter value is the same as
the data in the VSTART (Y value) part of  sprxpos . when these values
match, the system enables the sprite data access.

The sprite DMA channel examines the contents of VSTOP (from  sprxctl ,
which is the location of the line after the last line of the sprite) and
VSTART (from  sprxpos ) to see how many lines of sprite data are to be
fetched. Two words are fetched per line of sprite height, and these words
are written into the sprite data registers. The first word is stored in
 sprxdata  and the second word in  sprxdatb .

The fetch and store for each horizontal scan line occurs during a
horizontal blanking interval, far to the left of the start of the screen
display. This arms the sprite horizontal comparators and allows them to
start the output of the sprite data to the screen when the horizontal beam
count value matches the value stored in the HSTART (X value) part of
 sprxpos .

If the count of VSTOP - VSTART equals zero, no sprite output occurs. The
next data word pair will be fetched, but it will not be stored into the
sprite data registers. It will instead become the next pair of data words
for  sprxpos  and  sprxctl .

When a sprite is used only once within a single display field, the final
pair of data words, which follow the sprite  color descriptor words , is
loaded automatically as the next contents of the  sprxpos  and  sprxctl 
registers. To stop the sprite after that first data set, the pair of words
should contain all zeros.

Thus, if you have formed a sprite pattern in memory, this same pattern
will be produced as pixels automatically under DMA control one line at a
time.