On Amiga, there is a special coprocessor which is called « Copper ». This processor allow commands to be executed with synchronisation of the video display. On older TV there was a electron beam browing screen from top to bottom, left to right. Copper can mainly WAIT a position (line Y, position X) and EXECUTE commands on DFFxxx registers. (Execution is called « MOVE »)
The easiest application is this one:
WAIT line y, pos 0 ( in real, this is not 0, but a small value that correspond to left of screen)
MOVE value1 to DFF180 (background color)
WAIT line y+1, pos 0
,MOVE value2 to DFF180
WAIT line y+1, pos 0
MOVE value3 to DFF180, ….
This will give this result:
We created a gradient, using only one color (here, background color), and that gradient will be created each frame by the copper. The CPU is not used while doing this.
The list of instruction we wrote is called a COPPERLIST.
The copper is located into chipset AGNUS.
MOVE take time
What you need to understand is that while a MOVE instruction is beeing executed in a copperlist, the electron beam continue to move right. The time taken by the MOVE instruction depends on what the amiga is doing (DMA), usually it take about 8 pixels in low resolution. That means one MOVE instruction « cost » 8 pixels on screen. For example if you put successive MOVE to color DFF180 (background color), you can have a horizontal gradient of 8 pixels wide colors. This have been explained in the article about the demo I’ve done for my friend Dino. Here is again the illustration of that.
This is heavily used in effects names « plasma », where lot of colors where displayed on screen only using few physical colors. You can do a full plasma effect using only the background color.
Some copper effects can be seen in the excellent ‘Copper Master’ demo by Angles (Corsair and Mr Video)
WAIT MOVE SKIP
In fact the copper have 3 instructions. The new one here is SKIP. Skip allow to skip the next copper instruction. You also need to know that WAIT can be used with masks (you can wait Y and X, or only Y or only X). And last, you can use a register to do some « copper jump » (using registers COPJMP1).
Using all of this, you can create some « loops » and repeat lines or do some complex copperlist chaining. This can lead to very powerful
Some info about copper here : http://coppershade.org/
You can also manupulate sprite using copper and you can do some very nice tricks, like covering the full screen like in « Risky wood ». Have a look at that site : http://codetapper.com