
; Listing5d.s	Scrollen van een beeld naar boven en beneden door veranderen
;		van de bitplanepointers, gocombineerd met een links- rechts-
;		scroll d.m.v. $dff102 (BPLCON0)

	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		

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

	bsr.w	BeweegCopper2	; Scrollt Beeld links en rechts met $dff102

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

	btst	#6,$bfe001	
	bne.s	mouse		

	move.l	OldCop(PC),$dff080	; COP1LC - Originele-COP
	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

;*************************************************************************

BeweegCopper2:
	TST.B	FLAG		; Moeten we terug? Als de FLAG 0 is, dan
				; Springen we naar 'Voren:'. Is de Flag $FF
				; dan gaan we verder met teruggaan.
	beq.w	Voren
	cmpi.b	#$00,MijnCon1	; Zijn we op de standaardpositie aangekomen,
				; dus helemaal Links?
	beq.s	GaNaarVoren	; Zo ja, dan moeten we naar voren.
	sub.b	#$11,MijnCon1	; We trekken 1 van de $dff102 af van de 
				; even EN oneven planes. ($ff,$ee,$dd,$cc,
	rts			; $bb,$aa,$99..). We gaan dus naar LINKS

GaNaarVoren:
	clr.b	FLAG		; Doordat we de FLAG op 0 zetten, wordt
				; bij TST.b FLAG de routine "Voren:" 
				; aangeroepen (naar rachts).
	rts			

Voren:
	cmpi.b	#$ff,MijnCon1	; Zijn we bij het maximum ($ff) aangekomen?
				; ($f voor even en $f voor oneven)
	beq.s	GaNaarAchteren	; Zo ja, dan terug
	add.b	#$11,MijnCon1	; Tel 1 bij even en oneven plane op, dus
				; ($11,$22,$33,$44 etc..)
	rts			; Ga naar Rechts

GaNaarAchteren:
	move.b	#$ff,FLAG	; Als het Label flag NIET 0 is, dan betekent
	rts			; dat dat we naar links teruggaan moeten.

;	Deze Byte is een Flag. Hieraan zien we of we terug moeten.

FLAG:
	dc.b	0,0


	Section	COpp,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		; BplCon1 - HET REGISTER
	dc.b	$00		; BplCon1 - Niet gebruikte byte
MijnCon1:
	dc.b	$00		; BplCon1 - 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 aan!! (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
	dc.w	$FFFF,$FFFE	; Einde van de Copperlist

;	Plaatje...

	dcb.b	40*30,0 ; Geheugen vullen met nullen.

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

	dcb.b	40*30,0 ; Zie boven.



	end


Niets nieuw, alleen een combinatie van vorige listings...