*
* Eine einfache Copperlist, erstellt über die Hardware
*
* written on 30/10/89  14:17:40  by Holger Gzella
*

                incdir "asm:"
                include "exec/exec_lib.i"

StartIt:        move.l  #Length,d0              * Länge der List
                moveq.l #$2,d1                  * CHIP-Memory
                CALLEXEC AllocMem               * allokieren
                tst.l   d0                      * alles klar?
                beq     Fault                   * nein - beenden!
                move.l  d0,CopperList           * Zeiger sichern

*
* Jetzt wird die List im Programm ins CHIP-Memory kopiert.
*

                lea     List,a0                 * Quelladresse laden
                move.l  d0,a1                   * Zieladresse laden
                move.l  #Length-1,d0            * Länge laden (-1 wegen DBRA)

CopyList:       move.b  (a0)+,(a1)+             * kopieren
                dbra    d0,CopyList             * bis zum Ende

*
* Jetzt wird die Maschine übernommen.
*

                CALLEXEC Forbid                 * kein Multitasking
                move.w   #$3a0,$DFF096          * Copper-, Sprite- und
                                                * Bitplane-DMA sowie DMAEN
                                                * löschen

                move.l   CopperList,$DFF080     * List manipulieren
                move.l   #0,$DFF088             * COPJMP1 löschen

                move.w   #$8280,$DFF096         * Copper-DMA und DMAEN
                                                * aktivieren

*
* Hier könnte jetzt ein wahnsinnig gutes Hauptprogramm stehen.
*

MouseLoop:      btst.b   #6,$bfe001             * Maustaste abfragen
                bne.s    MouseLoop              * nicht gedrückt

*
* Nun wird der ursprüngliche Zustand wieder hergestellt.
*

                lea      GfxName,a1             * Graphics öffnen
                moveq.l  #0,d0
                CALLEXEC OpenLibrary
                move.l   d0,a1

                move.l   38(a1),$DFF080         * System-List wieder
                                                * aktivieren

                CALLEXEC CloseLibrary           * Graphics schließen

                move.l   #0,$DFF088             * COPJMP1 löschen
                move.w   #$83e0,$DFF096         * Copper-, Blitter-, Sprite-
                                                * und Bitplane-DMA sowie
                                                * DMAEN aktivieren

                CALLEXEC Permit                 * Multitasking erlauben

                move.l   CopperList,a1          * Copperlist im
                move.l   #Length,d0             * CHIP-RAM wieder
                CALLEXEC FreeMem                * deallokieren

Fault:          moveq    #0,d0                  * Ende!
                rts

*
* Auch hier wieder ein Datenteil ...
*

GfxName:        dc.b     "graphics.library",0
 even

CopperList:     dc.l     0

*
* Hier steht die Copperlist ...
*

List:           dc.w     $180,$000              * Schwarz als Hintergrund
                dc.w     $3e01,$fffe            * auf Zeile 62 warten
                dc.w     $180,$00f              * dann Blau als Hintergrund
                dc.w     $7c01,$fffe            * auf Zeile 124 warten
                dc.w     $180,$fb0              * Gold als Hintergrund
                dc.w     $ba01,$fffe            * bei Zeile 186
                dc.w     $180,$ddd              * Silber und bei
                dc.w     $f801,$fffe            * Zeile 248
                dc.w     $180,$000              * wieder Schwarz
                dc.w     $ffff,$fffe            * das war's!

Length          EQU      *-List

                END

