
; Listing5h.s	Horizontale golfbeweging door gebruik van $dff102

	Section	CIPenCOP,CODE
Begin:
	move.l	4.w,a6		; Execbase in a6
	jsr	-$78(a6)	; Disable - stop Multitasking
	lea	GfxName(PC),a1  
	jsr	-$198(a6)	
	move.l	d0,GfxBase	
	move.l	d0,a6
	move.l	$26(a6),OldCop	

;	POINTEN Naar onze BITPLANES
 
	MOVE.L	#PIC,d0		

	LEA	BPLPOINTERS,A1	
				
	MOVEQ	#2,D1		
				
POINTBP:
	move.w	d0,6(a1)	
	swap	d0		
	move.w	d0,2(a1)	
	swap	d0		
	ADD.L	#40*256,d0	
	addq.w	#8,a1		
				
	dbra	d1,POINTBP	

	move.l	#COPPERLIST,$dff080	; COP1LC - Pointer naar onze COP
	move.w	d0,$dff088		; COPJMP1 - Start 'm

	move.w	#0,$dff1fc		; FMODE - Deactiveert AGA
	move.w	#$c00,$dff106		; BPLCON3 - Deactiveert AGA

mouse:
	cmpi.b	#$ff,$dff006	
	bne.s	mouse		

	btst	#2,$dff016	
	beq.s	Wacht		
 
	bsr.w	Golven

Wacht:
	cmpi.b	#$ff,$dff006
	beq.s	Wacht	

	btst	#6,$bfe001	
	bne.s	mouse		

	move.l	OldCop(PC),$dff080	; COP1LC - Pointer naar Originele 
					; Copperlist
	move.w	d0,$dff088		; COPJMP1 - start 'm

	move.l	4.w,a6
	jsr	-$7e(a6)	; Enable - Multitasking aan
	move.l	GfxBase(PC),a1	
	jsr	-$19e(a6)	; Closelibrary 
	rts

; DATA



GfxName:
	dc.b	"graphics.library",0,0	
GfxBase:		
	dc.l	0	
OldCop:			
	dc.l	0	

; Deze routine is soortgelijk aan die van Listing3e.s. De waarden worden
; geroteerd. Het systeem was als volgt:
;
;	move.w	col2,col1	; col2 kommt in col1
;	move.w	col3,col2	; col3 kommt in col2
;	move.w	col4,col3	; col4 kommt in col3
;	move.w	col5,col4	; col5 kommt in col4
;
; In deze routine worden echter i.p.v. Kleuren, de waarden van $dff102
; geroteerd, maar de hoofdwerking is hetzelfde. Om Labels en tijd te 
; besparen werd deze routine uitgerust met een DBRA-cyclus, die bij het
; roteren zoveel words als we willen roteert. Omdat alle te-veranderen-words
; op eenzelfde afstand van elkaar zijn verwijderd (8 byte om precies te 
; zijn), hoeven we er maar 1 in a0 te laden, het anderen in a1 en dan met 
; een move.w (a0),(a1) te kopieëren. Dan gaan we verder naar het volgende
; paar, als we bij a0 en a1 8 optellen. Ze pointen dan op het volgende
; Word.
; LET OP: om een oneindige cyclus te maken, moet de laatste waarde altijd
; in de eerste geschreven worden:
;
;	>>>>>>>>>>>>>>>>>>>>>
;	^		    v
; In dit geval word aan het einde van de Cyclus de eerste waarde in de
; laatste geschreven, de circel is dus rond. De oude routine eindigde zo:
;
;	move.w	col1,col14	; col1 komt in col14

Golven:
	LEA	Con1Effect+8,A0 ; Adres 'Van'-word in a0
	LEA	Con1Effect,A1	; Adres 'Naar'-Word in a1
	MOVEQ	#44,D2		; 45 BPLCON1 moeten we in COPLIST veranderen
Verwissel:
	MOVE.W	(A0),(A1)	; kopieërt twee Words - scroll!
	ADDQ.W	#8,A0		; volgend Word-Paar
	ADDQ.W	#8,A1		; volgend Word-Paar
	DBRA	D2,Verwissel	; herhaal "Verwissel" het juiste aantal
				; malen.
	MOVE.W	Con1Effect,LaatsteWaarde	; Om de Cyclus oneindig te
	RTS				; maken, kopieëren we de vorige
					; waarde telkens in de laatste.


	SECTION GRAPHIC,DATA_C


COPPERLIST:
	; Sprites uit...
	dc.w	$120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 
	dc.w	$12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
	dc.w	$134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
	dc.w	$13e,$0000

	dc.w	$8e,$2c81	; DiwStrt  (Register met Standaardwaarden)
	dc.w	$90,$2cc1	; DiwStop
	dc.w	$92,$0038	; DdfStart
	dc.w	$94,$00d0	; DdfStop
	
	dc.w	$102		; BplCon1 - HET REGISTER
	dc.b	$00		; BplCon1 - Het niet gebruikte byte!
MIJNCON1:
	dc.b	$00		; BplCon1 - Het wel gebruikte byte!

	dc.w	$104,0		; BplCon2
	dc.w	$108,0		; Bpl1Mod
	dc.w	$10a,0		; Bpl2Mod

		    ; 5432109876543210  ; BPLCON0:
	dc.w	$100,%0011001000000000  ; Bits 13 en 12 an!! (3 = %011)
					; 3 Bitplanes Lowres, geen Lace
BPLPOINTERS:
	dc.w $e0,$0000,$e2,$0000	;1e Bitplane - BPL0PT
	dc.w $e4,$0000,$e6,$0000	;2e Bitplane - BPL1PT
	dc.w $e8,$0000,$ea,$0000	;3e Bitplane - BPL2PT

	dc.w	$0180,$000	; Color0
	dc.w	$0182,$475	; Color1
	dc.w	$0184,$fff	; Color2
	dc.w	$0186,$ccc	; Color3
	dc.w	$0188,$999	; Color4
	dc.w	$018a,$232	; Color5
	dc.w	$018c,$777	; Color6
	dc.w	$018e,$444	; Color7

; Het effect in de copperlist: het bestaat uit een wait en een BPLCON1
; De waits staan er elke 4 lijnen: $34, $38, $3c...
; In $dff102 staan al de 'golf'-waarden: 1,2,3,4,...3,2,1.

	DC.W	$3007,$FFFE,$102
Con1Effect:
	DC.W	$00
	DC.W	$3407,$FFFE,$102,$00
	DC.W	$3807,$FFFE,$102,$00
	DC.W	$3C07,$FFFE,$102,$11
	DC.W	$4007,$FFFE,$102,$11
	DC.W	$4407,$FFFE,$102,$11
	DC.W	$4807,$FFFE,$102,$11
	DC.W	$4C07,$FFFE,$102,$22
	DC.W	$5007,$FFFE,$102,$22
	DC.W	$5407,$FFFE,$102,$22
	DC.W	$5807,$FFFE,$102,$33
	DC.W	$5C07,$FFFE,$102,$33
	DC.W	$6007,$FFFE,$102,$44
	DC.W	$6407,$FFFE,$102,$44
	DC.W	$6807,$FFFE,$102,$55
	DC.W	$6C07,$FFFE,$102,$66
	DC.W	$7007,$FFFE,$102,$77
	DC.W	$7407,$FFFE,$102,$88
	DC.W	$7807,$FFFE,$102,$88
	DC.W	$7C07,$FFFE,$102,$99
	DC.W	$8007,$FFFE,$102,$99
	DC.W	$8407,$FFFE,$102,$aa
	DC.W	$8807,$FFFE,$102,$aa
	DC.W	$8C07,$FFFE,$102,$aa
	DC.W	$9007,$FFFE,$102,$99
	DC.W	$9407,$FFFE,$102,$99
	DC.W	$9807,$FFFE,$102,$88
	DC.W	$9C07,$FFFE,$102,$88
	DC.W	$A007,$FFFE,$102,$77
	DC.W	$A407,$FFFE,$102,$66
	DC.W	$A807,$FFFE,$102,$55
	DC.W	$AC07,$FFFE,$102,$44
	DC.W	$B007,$FFFE,$102,$44
	DC.W	$B407,$FFFE,$102,$33
	DC.W	$B807,$FFFE,$102,$33
	DC.W	$BC07,$FFFE,$102,$22
	DC.W	$C007,$FFFE,$102,$22
	DC.W	$C407,$FFFE,$102,$22
	DC.W	$C807,$FFFE,$102,$11
	DC.W	$CC07,$FFFE,$102,$11
	DC.W	$D007,$FFFE,$102,$11
	DC.W	$D407,$FFFE,$102,$11
	DC.W	$D807,$FFFE,$102,$00
	DC.W	$DC07,$FFFE,$102,$00
	DC.W	$E007,$FFFE,$102,$00
	DC.W	$E407,$FFFE,$102

LaatsteWaarde:
	DC.W	$00

	dc.w	$FFFF,$FFFE	; Einde van de Copperlist

;	Plaatje


PIC:
	incbin	"amiga.320*256*3"	; hier laden we het plaatje in RAW-
					; Formaat in.

	end

Dit golfeffect is een klassieker op de Amiga. Om te sparen wordt hier
echter iedere 4 lijnen een golf gemaakt i.p.v. elke lijn.

De routine in deze listing kan overal gebruikt worden waar WORD's 
'geroteerd' moeten worden. Men kan dit stuk dus ook bij kleureffecten en
dergelijke gebruiken.