********************************************
***            Scroll Routine            ***
***   Copyright 1989 by Joakim Hallberg  ***
***         MASTERMIND OF SIGMA          ***
********************************************

   ExecBase:   equ      4

   move.l      ExecBase,A6       ;This will open the
   lea.l       GfxName,A1        ;graphics library
   moveq       #0,D0
   jsr         -552(a6)
   move.l      D0,GfxBase
   beq         OpenErr           ;There was an error, quit!

   move.l      GfxBase,A0        ;Shift to the new
   add.l       #$32,A0           ;copper
   move.w      #$0080,$DFF096
   move.l      (A0),OldCopper    ;Save this so we can get it back
   move.l      #Copper,(A0)      ;when finished
   move.w      #$8080,$DFF096

* Scroll Routine *

scroll:
   move.b      $dff006,d0
   cmp.b       #$ff,d0
   bne         scroll
   move.w      poke+2,d0         ;Move screen
   swap        d0                ;1 pixel up
   move.w      poke+6,d0         ;
   add.l       #40,d0            ;
   move.w      d0,poke+6         ;
   swap        d0                ;
   move.w      d0,poke+2         ;

   andi.b      #64,$bfe001       ;Check mousebutton 
   beq         CloseAll          ;Pressed, free up everything we've used  
   bra         scroll

CloseAll:

   move.l      GfxBase,A0        ;Shift back to the old
   add.l       #$32,A0           ;copper
   move.w      #$0080,$DFF096
   move.l      OldCopper,(A0)
   move.w      #$8080,$DFF096

CloseGrap:
   move.l      execbase,A6       ;Close the graphics library
   move.l      GfxBase,A1
   jsr         -414(a6)

OpenErr:
   moveq       #0,d0
   rts

* Copperlist *

copper:
   dc.w        $0100,$1200       ;Number of bitplanes
   dc.w        $008e,$1f81       ;Size of screen
   dc.w        $0090,$2ec1       ;
   dc.w        $0092,$38         ;
   dc.w        $0094,$d0         ;
   dc.w        $0108,$0000       ;Moduls
   dc.w        $010a,$0000       ;
poke:
   dc.w        $00e0,$0000       ;Here's the screen
   dc.w        $00e2,$0000       ;That we are changing at
   dc.w        $0182,$0000       ;Set writecolour to black
   dc.w        $0180,$0000       ;Set background colour to black

   dc.w        $7501,$ff00       ;
   dc.w        $0182,$0001       ;
   dc.w        $7601,$ff00       ;
   dc.w        $0182,$0002       ;
   dc.w        $7701,$ff00       ;
   dc.w        $0182,$0003       ;
   dc.w        $7801,$ff00       ;
   dc.w        $0182,$0004       ;
   dc.w        $7901,$ff00       ;
   dc.w        $0182,$0005       ;
   dc.w        $7a01,$ff00       ;
   dc.w        $0182,$0006       ;
   dc.w        $7b01,$ff00       ;
   dc.w        $0182,$0007       ;
   dc.w        $7c01,$ff00       ;
   dc.w        $0182,$0008       ;
   dc.w        $7d01,$ff00       ;
   dc.w        $0182,$0009       ;
   dc.w        $7e01,$ff00       ;
   dc.w        $0182,$000a       ;
   dc.w        $7f01,$ff00       ;
   dc.w        $0182,$000b       ;
   dc.w        $8001,$ff00       ;
   dc.w        $0182,$000c       ;
   dc.w        $8101,$ff00       ;
   dc.w        $0182,$000d       ;
   dc.w        $8201,$ff00       ;
   dc.w        $0182,$000e       ;
   dc.w        $8301,$ff00       ;
   dc.w        $0182,$000f       ;

   dc.w        $a801,$ff00       ;Wait for line 168
   dc.w        $0180,$0f00       ;Change BG to red 
   dc.w        $a901,$ff00       ;Wait for line 169
   dc.w        $0180,$0000       ;Change BG to black

   dc.w        $cd01,$ff00       ;
   dc.w        $0182,$000e       ;
   dc.w        $ce01,$ff00       ;
   dc.w        $0182,$000d       ;
   dc.w        $cf01,$ff00       ;
   dc.w        $0182,$000c       ;
   dc.w        $d001,$ff00       ;
   dc.w        $0182,$000b       ;
   dc.w        $d101,$ff00       ;
   dc.w        $0182,$000a       ;
   dc.w        $d201,$ff00       ;
   dc.w        $0182,$0009       ;
   dc.w        $d301,$ff00       ;
   dc.w        $0182,$0008       ;
   dc.w        $d401,$ff00       ;
   dc.w        $0182,$0007       ;
   dc.w        $d501,$ff00       ;
   dc.w        $0182,$0006       ;
   dc.w        $d601,$ff00       ;
   dc.w        $0182,$0005       ;
   dc.w        $d701,$ff00       ;
   dc.w        $0182,$0004       ;
   dc.w        $d801,$ff00       ;
   dc.w        $0182,$0003       ;
   dc.w        $d901,$ff00       ;
   dc.w        $0182,$0002       ;
   dc.w        $da01,$ff00       ;
   dc.w        $0182,$0001       ;
   dc.w        $db01,$ff00       ;
   dc.w        $0182,$0000       ;

   dc.w        $ffff,$fffe       ;Copperend 

GfxName:       DC.B 'graphics.library',0
even

OldCopper:     DC.L  1
GfxBase:       DC.L  1
