
; Listing5l.s	VERLENGINGSEFFECT m.b.v. de MODULO.



 SECTION CIPenCOP,CODE	; Fast is OK

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

;******************************************************************************
;Hier laten we onze BPLPOINTERS in de copperlist onze Bitplanes aanwijzen
;******************************************************************************

	MOVE.L	#PIC,d0		; In d0 komt het adres van onze PIC.
				; d.w.z. waar het eerste bitplane staat.

	LEA	BPLPOINTERS,A1	; in a1 komt het adres van de Bitplane
				; pointer van de Copperlist
	MOVEQ	#2,D1		; Aantal Bitplanes -1 (hier zij het er 3)
				; voor de DBRA - Cyclus
POINTBP:
	move.w	d0,6(a1)   ; kopieërt het Laagwaardige Word van het Adres
			   ; van de Plane in het correcte Word van de
			   ; Copperlist
	swap	d0	   ; Verwisselt het 2e Word van d0 (B.v.:1234 >3412)
			   ; Het hoogwaardige Word komt op de plaats van het 
			   ; Laagwaardige Word, daardoor kunnen we Move.W
			   ; gebruiken!
	move.w  d0,2(a1)   ; kopieërt het hoogwaardige Word van het Adres
			   ; van de Plane in het correcte Word van de
			   ; Copperlist
	swap	d0	   ; verwisselt het 2e Word van d0 (B.v.:3412 >1234)
			   ; Dit herstelt dus het adres.
	ADD.L	#40*256,d0 ; We tellen 10240 bij D0 op, zodat we het tweede
			   ; Bitplane 'aan wijzen' (Dit bevindt zich na het
			   ; eerste). We tellen dus de lengte van 1 Bitplane
			   ; erbij op. In de volgende doorgangen wijzen we 
			   ; naar het derde, vierde enz..

	addq.w  #8,a1		; a1 bevat nu het adres van de volgende
				; Bplpointers in de Copperlist, die we
				; moeten hebben.
	dbra	d1,POINTBP	; Herhaal D1 Maal POINTBP
				; (D1=Num. of Bitplanes)

	move.l	#COPPERLIST,$dff080	; COP1LC - Pointer naar onze COP
	move.w	d0,$dff088		; COPJMP1 - Starten van onze COP

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

mouse:	
	btst	#6,$bfe001	; linker Muisknop gedruckt?
	bne.s	mouse		; Zo niet,terug naar Mouse:

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

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

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

	SECTION GRAPHIC,DATA_C

COPPERLIST:

	; De Sprites laten we op 0 zetten, om ze te elimineren. Anders
	; vliegen ze ons om de oren...

	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  (Registers met Standaardwaarden)
	dc.w	$90,$2cc1	; DiwStop
	dc.w	$92,$0038	; DdfStart
	dc.w	$94,$00d0	; DdfStop
	dc.w	$102,0		; BplCon1
	dc.w	$104,0		; BplCon2
	dc.w	$108,0		; Bpl1Mod
	dc.w	$10a,0		; Bpl2Mod

; BPLCON0 ($dff100) voor een beeld met 3 Planes (8 kleuren) instellen:

		    ; 5432109876543210
	dc.w	$100,%0011001000000000	; bits 13 en 12 aan!! (3 = %011)

;	We laten de Bitplanes direct aanwijzen, als we de registers $dff0e0
;	en volgenden hier in de copperlist zetten. De adressen van de 
;	bitplanes worden dan door de routine POINTBP hierin gezet.

BPLPOINTERS:
	dc.w $e0,$0000,$e2,$0000	;eerste Bitplane - BPL0PT
	dc.w $e4,$0000,$e6,$0000	;tweede Bitplane - BPL1PT
	dc.w $e8,$0000,$ea,$0000	;derde  Bitplane - BPL2PT

;	Hier definieëren we de 8 kleuren van het plaatje...

	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

; COPPERLIST, DIE "VERLENGT"

	dc.l	$8907fffe	  ; Wait Lijn $89
	dc.w	$108,-40,$10a,-40 ; Modulo -40, Herhaling laatste lijn
	dc.l	$9007fffe	  ; Wacht 7 Lijnen 
	dc.w	$108,0,$10a,0	  ; Dan laten we 1 lijn verdergaan
	dc.l	$9107fffe	  ; en op de volgende lijn
	dc.w	$108,-40,$10a,-40 ; Zetten we modulo op FLOOD
	dc.l	$9807fffe	  ; Wacht 7 Lijnen
	dc.w	$108,0,$10a,0	  ; ...
	dc.l	$9907fffe	  ; dan...
	dc.w	$108,-40,$10a,-40 ; ...
	dc.l	$a007fffe	  ; etc..
	dc.w	$108,0,$10a,0	  ; etc..
	dc.l	$a107fffe
	dc.w	$108,-40,$10a,-40
	dc.l	$a807fffe
	dc.w	$108,0,$10a,0
	dc.l	$a907fffe
	dc.w	$108,-40,$10a,-40
	dc.l	$b007fffe
	dc.w	$108,0,$10a,0
	dc.l	$b107fffe
	dc.w	$108,-40,$10a,-40
	dc.l	$b807fffe
	dc.w	$108,0,$10a,0
	dc.l	$b907fffe
	dc.w	$108,-40,$10a,-40
	dc.l	$c007fffe
	dc.w	$108,0,$10a,0
	dc.l	$c107fffe
	dc.w	$108,-40,$10a,-40
	dc.l	$c807fffe
	dc.w	$108,0,$10a,0
	dc.l	$c907fffe
	dc.w	$108,-40,$10a,-40
	dc.l	$d007fffe
	dc.w	$108,0,$10a,0
	dc.l	$d107fffe
	dc.w	$108,-40,$10a,-40
	dc.l	$d807fffe
	dc.w	$108,0,$10a,0
	dc.l	$d907fffe
	dc.w	$108,-40,$10a,-40
	dc.l	$e007fffe
	dc.w	$108,0,$10a,0
	dc.l	$e107fffe
	dc.w	$108,-40,$10a,-40
	dc.l	$e807fffe
	dc.w	$108,0,$10a,0
	dc.l	$e907fffe
	dc.w	$108,-40,$10a,-40
	dc.l	$f007fffe
	dc.w	$108,0,$10a,0	; Terug in normale stand.

	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 is een ander gebruik van het FLOOD effect, bereikt met de modulo. Het
is relatief makkelijk een beeld uit te rekken, zonder pixels groter
te maken dan ze in werkelijkheid zijn. Gewoon de modulo veranderen, een maal
-40 voor het verlengen (FLOOD), dan op 0 zetten, het beeld normaal verder
tekenen laten. Heeft men enkele lijnen getekent, komt meteen wee de
FLOOD eraan te pas; de volgende 7 lijnen zijn weer identiek. Dit herhaalt
zich zo lang men wil.
