
; Listing5g.s	OP EN NEER SCROLLEN VAN EEN PLAATJE DOOR HET VERANDEREN VAN
;		DE BITPLANEPOINTERS GECOMBINEERD MET HET SPIEGELEFFECT,
;		M.B.V. DE MODULO.

	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	BeweegCopper	; Scrollt beeld heen en weer

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 beweegt het beeld naar boven en beneden. Dit doen we door
; de bitplanepointer in de copperlist te veranderen met het label
; BPLPOINTERS).

BeweegCopper:
	LEA	BPLPOINTERS,A1	; Met deze vier bevelen halen we uit de
	move.w	2(a1),d0	; Copperlist het Adres, waarnaar $dff0e0
	swap	d0		; momenteel point en geven deze waarde
	move.w	6(a1),d0	; in d0

	TST.B	OpNeer	; Moeten we naar boven of beneden?

	beq.w	GaOmlaag
	cmp.l	#PIC-(40*18),d0 ; Zijn we boven?
	beq.s	ZetOmlaag	
	sub.l	#40,d0		
				
	bra.s	Einde


ZetOmlaag:
	clr.b	OpNeer	
	bra.s	Einde

GaOmlaag:

	cmpi.l	#PIC+(40*130),d0; Zijn we beneden?
	beq.s	ZetOmhoog	
				
	add.l	#40,d0		
				
	bra.s	Einde

ZetOmhoog:
	move.b	#$ff,OpNeer 
	rts			

Einde:				
	LEA	BPLPOINTERS,A1	
	MOVEQ	#2,D1		; Aantal Bitplanes -1 (hier: 3) 

POINTBP2:
	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,POINTBP2	
	rts


;	FLAG.

OpNeer:
	dc.b	0,0


	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   (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

		    ; 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

;	SPIEGELEFFECT 

	dc.w	$b007,$fffe
	dc.w	$180,$004	; Color0
	dc.w	$108,-40*7	; Bpl1Mod - Spiegel 5 Maal Gehalveerd
	dc.w	$10a,-40*7	; Bpl2Mod
	dc.w	$b307,$fffe
	dc.w	$180,$006	; Color0
	dc.w	$108,-40*6	; Bpl1Mod - Spiegel 4 Maal Gehalveerd
	dc.w	$10a,-40*6	; Bpl2Mod
	dc.w	$b607,$fffe
	dc.w	$180,$008	; Color0
	dc.w	$108,-40*5	; Bpl1Mod - Spiegel um  3 Maal Gehalveerd
	dc.w	$10a,-40*5	; Bpl2Mod
	dc.w	$bb07,$fffe
	dc.w	$180,$00a	; Color0
	dc.w	$108,-40*4	; Bpl1Mod - Spiegel 2 Maal Gehalveerd
	dc.w	$10a,-40*4	; Bpl2Mod
	dc.w	$c307,$fffe
	dc.w	$180,$00c	; Color0
	dc.w	$108,-40*3	; Bpl1Mod - Spiegel 
	dc.w	$10a,-40*3	; Bpl2Mod
	dc.w	$d007,$fffe
	dc.w	$180,$00e	; Color0
	dc.w	$108,-40*2	; Bpl1Mod - normale Spiegel
	dc.w	$10a,-40*2	; Bpl2Mod
	dc.w	$d607,$fffe
	dc.w	$180,$00f	; Color0
	dc.w	$108,-40	; Bpl1Mod - FLOOD 
	dc.w	$10a,-40	; Bpl2Mod - Vergrooteffect in het midden
	dc.w	$da07,$fffe
	dc.w	$180,$00e	; Color0
	dc.w	$108,-40*2	; Bpl1Mod - normale Spiegel
	dc.w	$10a,-40*2	; Bpl2Mod
	dc.w	$e007,$fffe
	dc.w	$180,$00c	; Color0
	dc.w	$108,-40*3	; Bpl1Mod - Spiegel
	dc.w	$10a,-40*3	; Bpl2Mod
	dc.w	$ed07,$fffe
	dc.w	$180,$00a	; Color0
	dc.w	$108,-40*4	; Bpl1Mod - Spiegel 2 Maal Gehalveerd
	dc.w	$10a,-40*4	; Bpl2Mod
	dc.w	$f507,$fffe
	dc.w	$180,$008	; Color0
	dc.w	$108,-40*5	; Bpl1Mod - Spiegel 3 Maal Gehalveerd
	dc.w	$10a,-40*5	; Bpl2Mod
	dc.w	$fa07,$fffe
	dc.w	$180,$006	; Color0
	dc.w	$108,-40*6	; Bpl1Mod - Spiegel 4 Maal Gehalveerd
	dc.w	$10a,-40*6	; Bpl2Mod
	dc.w	$fd07,$fffe
	dc.w	$180,$004	; Color0
	dc.w	$108,-40*7	; Bpl1Mod - Spiegel 5 Maal Gehalveerd
	dc.w	$10a,-40*7	; Bpl2Mod
	dc.w	$ff07,$fffe
	dc.w	$180,$002	; Color0
	dc.w	$108,-40	; Stopt het beeld, om niet de bytes van 
	dc.w	$10a,-40	; het RAW beeld aan te wijzen
 
	dc.w	$FFFF,$FFFE	; Einde van de Copperlist

;	Plaatje

	dcb.b	40*98,0	 ; Vullen met nullen
PIC:	
	incbin	"amiga.320*256*3"	
					
	dcb.b	40*30,0	; Vullen met nullen

	end

In dit voorbeeld wordt door het zetten van meerdere Modulo's een soort
spiegeling die een rond vlak simuleert verkregen. Als men de modulo's
goed zet, kan men effecten als vergroting (of ZOOM) krijgen. Verder ook nog
cylindrische verscheuringen, zoals in dit voorbeeld. Zeker als men ook nog
enkele kleuren voor het effect toevoegt.
De listing is hetzelfde als Listing5c.s, alleen is hier de Copperlist iets
veranderd. Door $dff102 (BPLCON1) konden we zoiets realistisch bereiken.
