

; Listing4c.s	Tonen van een beeld in 320*256 met 3 Planes (8 kleuren)



 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:
	cmpi.b	#$ff,$dff006	; Zijn we op lijn 255?
	bne.s	mouse		; Zo niet, ga niet verder.

	bsr.w	BeweegCopper	; Rode balk onder lijn $FF
	bsr.w	CopperLinkRech	; Routine voor Links/Rechts-Scroll
	BSR.w	scrollcolors	; Vloeien van de kleuren

Wacht:
	cmpi.b	#$ff,$dff006	; Zijn we nog op lijn 255?
	beq.s	Wacht		; Zo ja, herhaal

	btst	#6,$bfe001	; linker Muisknop gedrukt?
	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


; DATA



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

; **************************************************************************
; *		BALK MET HORIZONTALE SCROLL  (LISTING3h.s)		   *
; **************************************************************************


CopperLinkRech:
	CMPI.W	#85,FlagRechts		; GaRechts 85 Maal uitgevoerd?
	BNE.S	GaRechts		; Zo niet, herhaal

	CMPI.W	#85,FlagLinks	; GaLinks 85 Maal uitgevoerd?
	BNE.S	GaLinks	; Zo niet, Herhaal

	CLR.W	FlagRechts	
	CLR.W	FlagLinks	
				
	RTS			; Terug naar Mouse-Loop

GaRechts:			
	lea	CopBar+1,A0	

	move.w	#29-1,D2     
RechtsLoop:
	addq.b	#2,(a0)		
	ADD.W	#16,a0		
	dbra	D2,RechtsLoop	
	addq.w	#1,FlagRechts   

	RTS			; Terug naar Mouse-Loop

GaLinks:			
	lea	CopBar+1,A0
	move.w	#29-1,D2	
LinksLoop:
	subq.b	#2,(a0)	   
	ADD.W	#16,a0	   
	dbra	D2,LinksLoop 
	addq.w	#1,FlagLinks 
			
	RTS		

FlagRechts:		
	dc.w	0	

FlagLinks:		
	dc.w	0	


; **************************************************************************
; *		RODE Balk ONDER LIJN $FF  (Listing3f.s)		   	   *
; **************************************************************************

BeweegCopper:
	LEA	Balk,a0		; in a0 komt het Adres van Balk
	TST.B	OpNeer	; Boven aangekomen?
	beq.w	GaOmlaag

	cmpi.b	#$0a,(a0)	
	beq.s	ZetOmlaag	
	subq.b	#1,(a0)		
	subq.b	#1,8(a0)
	subq.b	#1,8*2(a0)    
	subq.b	#1,8*3(a0)    
	subq.b	#1,8*4(a0)    
	subq.b	#1,8*5(a0)
	subq.b	#1,8*6(a0)
	subq.b	#1,8*7(a0)    
	subq.b	#1,8*8(a0)    
	subq.b	#1,8*9(a0)    
	rts



ZetOmlaag:
	clr.b	OpNeer
	rts		
			


GaOmlaag:
	cmpi.b	#$2c,8*9(a0)
	beq.s	ZetOmhoog
	addq.b	#1,(a0)	
	addq.b	#1,8(a0)
	addq.b	#1,8*2(a0)    
	addq.b	#1,8*3(a0)    
	addq.b	#1,8*4(a0)    
	addq.b	#1,8*5(a0)
	addq.b	#1,8*6(a0)
	addq.b	#1,8*7(a0)    
	addq.b	#1,8*8(a0)    
	addq.b	#1,8*9(a0)    
	rts

ZetOmhoog:
	move.b	#$ff,OpNeer 
	rts			

OpNeer:
	dc.b	0,0

; **************************************************************************
; *		Roteren van de Kleuren (Listing3e.s)			   *
; **************************************************************************

Scrollcolors:
	move.w	col2,col1	; col2 komt in col1
	move.w	col3,col2	; col3 komt in col2
	move.w	col4,col3	; col4 komt in col3
	move.w	col5,col4	; col5 komt in col4
	move.w	col6,col5	; col6 komt in col5
	move.w	col7,col6	; col7 komt in col6
	move.w	col8,col7	; col8 komt in col7
	move.w	col9,col8	; col9 komt in col8
	move.w	col10,col9	; col10 komt in col9
	move.w	col11,col10	; col11 komt in col10
	move.w	col12,col11	; col12 komt in col11
	move.w	col13,col12	; col13 komt in col12
	move.w	col14,col13	; col14 komt in col13
	move.w	col1,col14	; col1 komt in col14
	rts


; **************************************************************************
; *				SUPER COPPERLIST			   *
; **************************************************************************

	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,0		; BplCon1
	dc.w	$104,0		; BplCon2
	dc.w	$108,0		; Bpl1Mod
	dc.w	$10a,0		; Bpl2Mod

; BPLCON0 instellen...

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

BPLPOINTERS:
	dc.w $e0,$0000,$e2,$0000	; bitplane 1 - BPL0PT
	dc.w $e4,$0000,$e6,$0000	; bitplane 2 - BPL1PT
	dc.w $e8,$0000,$ea,$0000	; bitplane 3 - BPL2PT

;	Het effect van Listing3e.s

	dc.w	$3a07,$fffe	; Wachten op lijn 154 ($9a in Hexadecimaal)
	dc.w	$180		; REGISTER COLOR0
col1:
	dc.w	$0f0		; Waarde van COLOR 0 (die veranderd wordt)
	dc.w	$3b07,$fffe	; Wachten op lijn 155 (wordt niet veranderd)
	dc.w	$180		; REGISTER COLOR0 (wordt niet veranderd)
col2:
	dc.w	$0d0	    
	dc.w	$3c07,$fffe 
	dc.w	$180	    
col3:
	dc.w	$0b0	
	dc.w	$3d07,$fffe
	dc.w	$180	
col4:
	dc.w	$090		
	dc.w	$3e07,$fffe	
	dc.w	$180		
col5:
	dc.w	$070		
	dc.w	$3f07,$fffe	
	dc.w	$180		
col6:
	dc.w	$050		
	dc.w	$4007,$fffe	
	dc.w	$180		
col7:
	dc.w	$030		
	dc.w	$4107,$fffe	
	dc.w	$180		
col8:				
	dc.w	$030
	dc.w	$4207,$fffe	
	dc.w	$180
col9:
	dc.w	$050
	dc.w	$4307,$fffe	
	dc.w	$180
col10:
	dc.w	$070
	dc.w	$4407,$fffe	
	dc.w	$180
col11:
	dc.w	$090
	dc.w	$4507,$fffe	
	dc.w	$180
col12:
	dc.w	$0b0
	dc.w	$4607,$fffe	
	dc.w	$180
col13:
	dc.w	$0d0
	dc.w	$4707,$fffe	
	dc.w	$180
col14:
	dc.w	$0f0
	dc.w	$4807,$fffe	


	dc.w	$180,$0000	; We eindigen het scherm met zwart...

	dc.w	$0180,$000	; color0
	dc.w	$0182,$550	; color1
	dc.w	$0184,$ff0	; color2	; 'AMIGA' Geel
	dc.w	$0186,$cc0	; color3
	dc.w	$0188,$990	; color4
	dc.w	$018a,$220	; color5
	dc.w	$018c,$770	; color6
	dc.w	$018e,$440	; color7

	dc.w	$7007,$fffe	
				

;	8 kleuren definieëren...

	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

;	Effect uit Listing3h.s

	dc.w	$9007,$fffe	
	dc.w	$180,$000	
CopBar:
	dc.w	$9031,$fffe 
	dc.w	$180,$100   
			    
			    
	dc.w	$9107,$fffe 
	dc.w	$180,$111   
	dc.w	$9131,$fffe 
	dc.w	$180,$200   

	dc.w	$9207,$fffe,$180,$222,$9231,$fffe,$180,$300 ; Lijn 3
	dc.w	$9307,$fffe,$180,$333,$9331,$fffe,$180,$400 ; Lijn 4
	dc.w	$9407,$fffe,$180,$444,$9431,$fffe,$180,$500 ; Lijn 5
	dc.w	$9507,$fffe,$180,$555,$9531,$fffe,$180,$600 ; ....
	dc.w	$9607,$fffe,$180,$666,$9631,$fffe,$180,$700
	dc.w	$9707,$fffe,$180,$777,$9731,$fffe,$180,$800
	dc.w	$9807,$fffe,$180,$888,$9831,$fffe,$180,$900
	dc.w	$9907,$fffe,$180,$999,$9931,$fffe,$180,$a00
	dc.w	$9a07,$fffe,$180,$aaa,$9a31,$fffe,$180,$b00
	dc.w	$9b07,$fffe,$180,$bbb,$9b31,$fffe,$180,$c00
	dc.w	$9c07,$fffe,$180,$ccc,$9c31,$fffe,$180,$d00
	dc.w	$9d07,$fffe,$180,$ddd,$9d31,$fffe,$180,$e00
	dc.w	$9e07,$fffe,$180,$eee,$9e31,$fffe,$180,$f00
	dc.w	$9f07,$fffe,$180,$fff,$9f31,$fffe,$180,$e00
	dc.w	$a007,$fffe,$180,$eee,$a031,$fffe,$180,$d00
	dc.w	$a107,$fffe,$180,$ddd,$a131,$fffe,$180,$c00
	dc.w	$a207,$fffe,$180,$ccc,$a231,$fffe,$180,$b00
	dc.w	$a307,$fffe,$180,$bbb,$a331,$fffe,$180,$a00
	dc.w	$a407,$fffe,$180,$aaa,$a431,$fffe,$180,$900
	dc.w	$a507,$fffe,$180,$999,$a531,$fffe,$180,$800
	dc.w	$a607,$fffe,$180,$888,$a631,$fffe,$180,$700
	dc.w	$a707,$fffe,$180,$777,$a731,$fffe,$180,$600
	dc.w	$a807,$fffe,$180,$666,$a831,$fffe,$180,$500
	dc.w	$a907,$fffe,$180,$555,$a931,$fffe,$180,$400
	dc.w	$aa07,$fffe,$180,$444,$aa31,$fffe,$180,$301
	dc.w	$ab07,$fffe,$180,$333,$ab31,$fffe,$180,$202
	dc.w	$ac07,$fffe,$180,$222,$ac31,$fffe,$180,$103
	dc.w	$ad07,$fffe,$180,$113,$ad31,$fffe,$180,$004

	dc.w	$ae07,$FFFE	
	dc.w	$180,$006	
	dc.w	$b007,$FFFE	
	dc.w	$180,$007	
	dc.w	$b207,$FFFE	
	dc.w	$180,$008	
	dc.w	$b507,$FFFE	
	dc.w	$180,$009	
	dc.w	$b807,$FFFE	
	dc.w	$180,$00a	
	dc.w	$bb07,$FFFE	
	dc.w	$180,$00b	
	dc.w	$be07,$FFFE	
	dc.w	$180,$00c	
	dc.w	$c207,$FFFE	
	dc.w	$180,$00d	
	dc.w	$c707,$FFFE	
	dc.w	$180,$00e	
	dc.w	$ce07,$FFFE	
	dc.w	$180,$00f	
	dc.w	$d807,$FFFE	
	dc.w	$180,$11F	
	dc.w	$e807,$FFFE	
	dc.w	$180,$22F	

;	Effect van Listing3f.s

	dc.w	$ffdf,$fffe	
				
				

	dc.w	$0107,$FFFE	
	dc.w	$180,$010
	dc.w	$0207,$FFFE
	dc.w	$180,$020
	dc.w	$0307,$FFFE
	dc.w	$180,$030
	dc.w	$0407,$FFFE
	dc.w	$180,$040
	dc.w	$0507,$FFFE
	dc.w	$180,$030
	dc.w	$0607,$FFFE
	dc.w	$180,$020
	dc.w	$0707,$FFFE
	dc.w	$180,$010
	dc.w	$0807,$FFFE
	dc.w	$180,$000

Balk:
	dc.w	$0907,$FFFE	
	dc.w	$180,$300	
	dc.w	$0a07,$FFFE	
	dc.w	$180,$600	
	dc.w	$0b07,$FFFE
	dc.w	$180,$900	
	dc.w	$0c07,$FFFE
	dc.w	$180,$c00	
	dc.w	$0d07,$FFFE
	dc.w	$180,$f00	
	dc.w	$0e07,$FFFE
	dc.w	$180,$c00	
	dc.w	$0f07,$FFFE
	dc.w	$180,$900	
	dc.w	$1007,$FFFE
	dc.w	$180,$600	
	dc.w	$1107,$FFFE
	dc.w	$180,$300	
	dc.w	$1207,$FFFE
	dc.w	$180,$000	

	dc.w	$FFFF,$FFFE	; EINDE VAN DE COPPERLIST


; **************************************************************************
; *			PLAATJE IN 8 KLEUREN  320x256			   *
; **************************************************************************

PIC:
	incbin	"amiga.320*256*3"	

	end


In dit voorbeeld staat niets nieuws, maar we hebben vele van de tot nu toe
geleerde effecten verenigd in 1 listing:  Listing3h.s, Listing3f.s
en Listing3e.s.
Ik heb het effect van Listing3f.s alleen een beetje moeten aanpassen, omdat
anders de rode balk niet zichtbaar zou worden. In de gesynchroniseerde loop
hoeven we alleen nog maar de routines achter elkaar op te roepen:

	bsr.w	BeweegCopper	; Rode Balk onder lijn $ff
	bsr.w	CopperLinkRech	; Routine voor Links/Rechts-Scroll
	BSR.w	scrollcolors	; 'Vloeien van de kleuren'

Het komt vaak voor dat routines apart worden geschreven en later worden
samengevoegd, zoals in dit voorbeeld.