[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]

The Copper instruction list contains all the register resetting done
during the  vertical blanking  interval and the register modifications
necessary for making mid-screen alterations. As you are planning what will
happen during each display field, you may find it easier to think of each
aspect of the display as a separate subsystem, such as playfields,
sprites, audio, interrupts, and so on. Then you can build a separate list
of things that must be done for each subsystem individually at each video
beam position.

When you have created all these intermediate lists of things to be done,
you must merge them together into a single instruction list to be executed
by the Copper once for each display frame. The alternative is to create
this all-inclusive list directly, without the intermediate steps.

For example, the  bitplane pointers  used in playfield displays and the
 sprite pointers  must be rewritten during the vertical blanking  interval
so the data will be properly retrieved when the screen display starts
again. This can be done with a Copper instruction list that does the

    WAIT  until first line of the display
    MOVE  data to bitplane pointer 1
    MOVE  data to bitplane pointer 2
    MOVE  data to sprite pointer 1, and so on.

As another example, the  sprite DMA channels  that create movable objects
can be reused multiple times during the same display field. You can change
the size and shape of the reuses of a sprite; however, every multiple
reuse normally uses the same set of colors during a full display frame.
You can change sprite colors mid-screen with a Copper instruction list
that waits until the last line of the first use of the sprite processor
and changes the colors before the first line of the next use of the same
sprite processor:

    WAIT  for first line of display
    MOVE  firstcolor1 to COLOR17
    MOVE  firstcolor2 to COLOR18
    MOVE  firstcolor3 to COLOR19
    WAIT  for last line +1 of sprite's first use
    MOVE  secondcolor1 to COLOR17
    MOVE  secondcolor2 to COLOR18
    MOVE  secondcolor3 to COLOR19, and so on.

As you create Copper instruction lists, note that the final list must be
in the same order as that in which the video beam creates the display. The
video beam traverses the screen from position (0,0) in the upper left hand
corner of the screen to the end of the display (226,262) NTSC (or
(226,312) PAL) in the lower right hand corner. The first 0 in (0,0)
represents the x position. The second 0 represents the y position. For
example, an instruction that does something at position (0,100) should
come after an instruction that affects the display at position (0,60).

Note that given the form of the  WAIT  instruction, you can sometimes get
away with not sorting the list in strict video beam order.  The  WAIT 
instruction causes the Copper to wait until the value in the beam counter
is equal to or greater than the value in the instruction.

This means, for example, if you have instructions following each other
like this:

    WAIT  for position (64,64)
    MOVE  data

    WAIT  for position (60,60)
    MOVE  data

then the Copper will perform both moves, even though the instructions are
out of sequence.  The "greater than" specification prevents the Copper
from locking up if the beam has already passed the specified position.  A
side effect is that the second  MOVE  below will be performed:

    WAIT  for position (60,60)
    MOVE  data

    WAIT  for position (60,60)
    MOVE  data

At the time of the second  WAIT  in this sequence, the beam counters will
be greater than the position shown in the instructions. Therefore, the
second  MOVE  will also be performed.

Note also that the above sequence of instructions could just as easily be

    WAIT  for position (60,60)
    MOVE  data
    MOVE  data

because multiple  MOVE s can follow a single  WAIT .

 Complete Sample Copper List 

[Back to Amiga Developer Docs]