
; Listing5d2.s	SCROLLEN VAN EEN BEELD NAAR BOVEN EN BENEDEN DOOR VERANDEREN
;		VAN DE BITPLANEPOINTERS IN DE COPPERLIST

	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, als men
;	de bitplane-pointers in de copperlist verandert (met het Label
;	BPLPOINTERS)
;	De structuur is ongeveer hetzelfde als in Listing3d.s
;	Als eerste geven we het adres waar de BPLPOINTERS nu wijzen in d0,
;	dan trekken we 40 van d0 af of tellen 40 bij d0 op, en zetten de
;	nieuwe waarde terug in de copperlist. Daarvoor gebruiken we
;	weer dezelfde routine POINTBP.


BeweegCopper:
	LEA	BPLPOINTERS,A1	; Met deze 4 aanwijzingen halen we de 
	move.w	2(a1),d0	; uit de Copperlist de Adressen,waarheen
	swap	d0		; $dff0e0 nu wijst, en geven deze waarde in
				; d0.
	move.w	6(a1),d0	; Het tegenovergestelde van de routine die
				; de bitplanes aanwijst. Hier wordt het
				; adres 'gehaald' i.p.v. weggeschreven!!

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

	beq.w	GaBeneden
	cmp.l	#PIC-(40*30),d0 ; Zijn we boven?
	beq.s	zetBeneden	; Zo ja, dan naar beneden.
	sub.l	#40,d0		; Trek 40 af, dus 1 lijn. Het beeld gaat
				; naar Beneden.
	bra.s	Einde

zetBeneden:
	clr.b	OpNeer	; Clear OpNeer.
	bra.s	Einde		

GaBeneden:
	cmpi.l	#PIC+(40*30),d0 ; Zijn we beneden?
	beq.s	zetOmhoog	; Zo ja, dan naar boven.
	add.l	#40,d0		; Tel 40 op, dus het beeld gaat nar Bovem

	bra.s	Einde

zetOmhoog:
	move.b	#$ff,OpNeer ; Verander de FLAG.
	rts		

Einde:				; POINT DE BITPLANEPOINTER AAN
	LEA	BPLPOINTERS,A1	; POINTER in de COPPERLIST
	MOVEQ	#2,D1		; Aantal Bitplanes -1 (Hier 3!)
POINTBP2:
	move.w	d0,6(a1)	; Kopieërt het laagw. word van de Planes
	swap	d0		; Verwisselt de twee words in d0 (1234>3412)
	move.w	d0,2(a1)	; Kopieërt het hoogw. word van de Planes
	swap	d0		; Verwisselt de twee words in d0 (3412>1234)
	ADD.L	#40*256,d0	; + Lengte Bitplane -> Volgend Bitplane
	addq.w	#8,a1		; naar de volgende bplpointers in de Cop
	dbra	d1,POINTBP2	; Herhaal D1 Maal POINTBP (D1=n-1. bitplanes)
	rts


;	FLAG byte.

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	;eerste Bitplane - BPL0PT
	dc.w $e4,$0000,$e6,$0000	;tweede Bitplane - BPL1PT
	dc.w $e8,$0000,$ea,$0000	;derde  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 (Zou men als 'Texture-Map' effect kunnen verkopen...)

	dc.w	$7007,$fffe
	dc.w	$180,$004	; Color0
	dc.w	$102,$011	; bplcon1
	dc.w	$7307,$fffe
	dc.w	$180,$006	; Color0
	dc.w	$102,$022	; bplcon1
	dc.w	$7607,$fffe
	dc.w	$180,$008	; Color0
	dc.w	$102,$033	; bplcon1
	dc.w	$7b07,$fffe
	dc.w	$180,$00a	; Color0
	dc.w	$102,$044	; bplcon1
	dc.w	$8307,$fffe
	dc.w	$180,$00c	; Color0
	dc.w	$102,$055	; bplcon1
	dc.w	$9007,$fffe
	dc.w	$180,$00e	; Color0
	dc.w	$102,$066	; bplcon1
	dc.w	$9607,$fffe
	dc.w	$180,$00f	; Color0
	dc.w	$102,$077	; bplcon1
	dc.w	$9a07,$fffe
	dc.w	$180,$00e	; Color0
	dc.w	$a007,$fffe
	dc.w	$180,$00c	; Color0
	dc.w	$102,$066	; bplcon1
	dc.w	$ad07,$fffe
	dc.w	$180,$00a	; Color0
	dc.w	$102,$055	; bplcon1
	dc.w	$b507,$fffe
	dc.w	$180,$008	; Color0
	dc.w	$102,$044	; bplcon1
	dc.w	$ba07,$fffe
	dc.w	$180,$006	; Color0
	dc.w	$102,$033	; bplcon1
	dc.w	$bd07,$fffe
	dc.w	$180,$004	; Color0
	dc.w	$102,$022	; bplcon1
	dc.w	$bf07,$fffe
	dc.w	$180,$001	; Color0

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

;	Plaatje...

	dcb.b	40*30,0 ; Dit stuk Nullen is noodzakelijk, omdat we
			; bij het aanwijzen  verder over en onder PIC
			; zelf gaan, en dit stuk aanwijzen. Waren hier
			; geen nullen, dan werden de Bytes aangewezen die
			; zich momenteel in dit stuk geheugen bevinden. Het
			; resultaat zou dus een Chaos op het scherm zijn.
			; Maar door $0000 wordt altijd Color00 getoont, dus
			; de achtergrond.

PIC:
	incbin  "amiga.320*256*3"	; hier laden we het plaatje in RAW
					; Formaat in
	dcb.b	40*30,0 ; Zie boven.

	end

Alleen door het veranderen van de copperlist van Listing5c.s hebben we dit
effect bereikt, die een beetje aan 'het oprollen van een papiertje om een
cylinder' doet denken. (Na ja...). Het is makkelijk te maken, en ziet heel
netjes uit. Simpelweg $dff102 in stijgende volgorde in de copperlist zetten
gecombineerd met enkele wait's: 1,2,3,4 om de eerste 'verscheuring'
naar rechts te bereiken:

	+++++++++++++
	 +++++++++++++
	  +++++++++++++
	   +++++++++++++

In het midden aangekomen, omgekeerd terug naar nul.