
; Listing3h.s	; BALK, DIE LINKS-EN RECHTS GAAT, MET MOVE & WAIT

	SECTION CIPenCOP,CODE	;  Fast is OK

Begin:
	move.l	4.w,a6	    ; Execbase in a6
	jsr	-$78(a6)    ; Disable - stopt Multitasking
	lea	GfxName,a1  
	jsr	-$198(a6)   ; OpenLibrary
	move.l	d0,GfxBase	; Adres in GfxBase
	move.l	d0,a6
	move.l	$26(a6),OldCop	
	move.l	#COPPERLIST,$dff080  ; COP1LC 
	move.w	d0,$dff088	     ; COPJMP1 
mouse:
	cmpi.b	#$ff,$dff006	; VHPOSR - Lijn 255?
	bne.s	mouse		

	bsr.w	CopperLinkRech	; Routine voor Links/Rechts Scroll

Wacht:
	cmpi.b	#$ff,$dff006 ; VHPOSR:
			     ; zijn we nog op $FF? 
	beq.s	Wacht

	btst	#6,$bfe001	; linker Muisknop gedrukt?
	bne.s	mouse	

	move.l	OldCop(PC),$dff080	; COP1LC 
	move.w	d0,$dff088		; COPJMP1

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

; Deze routine is dezelfde als Listing3g.s, met als enig verschil dat er
; 1 wait i.p.v.29 Waits m.b.v een DBRA-loop veranderd worden. Deze routine
; verandert springt naar een wait, verandert die, springt naar een wait,
; verandert die ...enz. enz.
	
CopperLinkRech:
	CMPI.W	#85,FlagRechts		; GaRechts 85 maal uitgevoerd?
	BNE.S	GaRechts		; Zo niet,herhaal.
					; Zo ja, ga verder.

	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:			; Deze routine beweegt de balk naar rechts.
	lea	CopBar+1,A0	; We geven in A0 het eerste adress van de XX
				; waarde van de Wait, die zich precies
				; 1 byte na CopBar bevindt.

	move.w	#29-1,D2    	; We moeten 29 Wait's veranderen. (DBRA =
				; Decrement and Branch )
RechtsLoop:
	addq.b	#2,(a0)		; Tel 2 bij de X-wait op.
	ADD.W	#16,a0		; Ga naar de volgende wait diewe willen 
				; veranderen.
	dbra	D2,RechtsLoop   ; Cyclus wordt d2 maal doorlopen.
	addq.w	#1,FlagRechts   ; 'Opschrijven' dat we (weer) een keer
				; GaRechts uitgevoerd hebben.
	RTS			; Terus naar Mouse-Loop


GaLinks:			; Idem als GaRechts.
	lea	CopBar+1,A0
	move.w	#29-1,D2	; 29 Wait's veranderem...
LinksLoop:
	subq.b	#2,(a0)	   	; Trek 2 af...
	ADD.W	#16,a0	   	; Volgende wait..
	dbra	D2,LinksLoop 	; d2-Maal...
	addq.w	#1,FlagLinks 	; 'Opschrijven'....

	RTS		       	; Terug naar Mouse-Loop

; Let op! : We veranderen alleen alke 2e wait, niet alle wait's.
; We veranderen maar de helft in tegenstelling tot de balk die stijgt
; en daalt, en waar 1 Wait per lijn genoeg is.
;
;	dc.w	$YY07,$FFFE	; Wait Lijn YY, Begin van Lijn
;	dc.w	$180,$0RGB	; Kleur...
;	dc.w	$YY07,$FFFE	; Wait Lijn YY, Begin van lijn
;	...
;
; In dit geval moeten we 2 wait's per lijn schrijven, dus 1 voor het begin
; van de lijn, en 1 die in die lijn naar links en rechts loopt.
;
;	dc.w	$YY07,$FFFE	; Wait Lijn YY, Begin van Lijn (07)
;	dc.w	$180,$0RGB	; Kleur grijs...
;	dc.w	$YYXX,$FFFE	; Wait Lijn YY, Op horizontale positie,
;				; die we besluiten het grijs door rood
				; te laten vervangen.
;	dc.w	$180,$0RGB	; ROOD


FlagRechts:
	dc.w	0

FlagLinks:	
	dc.w	0

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

OldCop:		 
	dc.l	0	


	SECTION GRAPHIC,DATA_C 

COPPERLIST:
	dc.w	$100,$200	; BPLCON0
	dc.w	$180,$000	; COLOR0 - Begin de Cop met Zwart

	dc.w	$2c07,$FFFE	; WAIT - een kleine, groene balk
	dc.w	$180,$010	; COLOR0
	dc.w	$2d07,$FFFE	; WAIT
	dc.w	$180,$020	; COLOR0
	dc.w	$2e07,$FFFE	; WAIT
	dc.w	$180,$030	; COLOR0
	dc.w	$2f07,$FFFE	; WAIT
	dc.w	$180,$040	; COLOR0
	dc.w	$3007,$FFFE
	dc.w	$180,$030
	dc.w	$3107,$FFFE
	dc.w	$180,$020
	dc.w	$3207,$FFFE
	dc.w	$180,$010
	dc.w	$3307,$FFFE
	dc.w	$180,$000


	dc.w	$9007,$fffe	; Wacht op begin regel
	dc.w	$180,$000	; Grijs op minimun, dus zwart.
CopBar:
	dc.w	$9031,$fffe ; Wait die verandert wordt:($9033,$9035,$9037..)
	dc.w	$180,$100   ; Rood. Deze kleur gaat steeds meer naar Rechts
			    ; voorafgegaan van grijs.
	dc.w	$9107,$fffe ; Wait die we niet veranderen
	dc.w	$180,$111   ; Grijs.
	dc.w	$9131,$fffe ; 
	dc.w	$180,$200   ; Hier begint rood.

;	We gaan verder, maar plaatssparend. Kijk naar het schema:

; Opmerking: Met een dc.w $1234 geven we 1 word in het geheugen, met
; dw.w $1234,$1234 2 words achter elkaar, dus een Longword : dc.l $12341234.
; Dit is weer hetzelfde als : dc.b $12,$34,$12,$34.
;
;		FIX WAIT (Eerst Grijs)-VERANDERB. WAIT (gevolgd door Rood)

	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,$300
	dc.w	$ab07,$fffe,$180,$333,$ab31,$fffe,$180,$200
	dc.w	$ac07,$fffe,$180,$222,$ac31,$fffe,$180,$100
	dc.w	$ad07,$fffe,$180,$111,$ad31,$fffe,$180,$000
	dc.w	$ae07,$fffe,$180,$000

; Zoals u ziet hebben we voor elke lijn 2 wait's nodig, 1 die het begin
; van de lijn afwacht, en 1 die we constant veranderen om het punt waar
; grijs overgaat in rood te definieëren. Dus van grijs (dat op positie 07
; begint) en van rood (Dat na deze wait start).

	dc.w	$fd07,$FFFE	; waacht Lijn $FD af
	dc.w	$180,$00a	; BLAUW  10
	dc.w	$fe07,$FFFE	; Volgende Lijn
	dc.w	$180,$00f	; Blauw 15
	dc.w	$FFFF,$FFFE	; EINDE VAN DE COPPERLIST


	end


Laatste kleinigheid: als u het nog niet helemaal heeft begrepen met dat
dc.b, dc.w en dc.l gedoe, dan volgt hier nog een kort 'schemaatje'.


	dc.b 1,2	= dc.w	$0102   of   dc.w	$102

	dc.b 42,$2	= dc.w	$2a02   (42 decimaal = $2a Hex)

	dc.b 12,$2,$12,41 = dc.w $c02,$1229 = dc.l $c021229

	dc.b 12,$22,0	= dc.w	$000c,$2200 = dc.w $c,$2200 = dc.l $c2200

	dc.w 1,2,3,432	= dc.l	$00010002,$000301b0 = dc.l $10002,$301b0

	dc.l $1234567	= dc.b	1,$23,$45,$67

	dc.l $2342	= dc.b	0,0,$23,$42

	dc.l 4		= dc.b	0,0,0,4

	LET OP! LAATSTE VOORBEELD:

	Een dc.l 4 wordt in het geheugen opgeslagen als $00000004. Een dc.b
	4 wordt opgeslagen als $04. Als we dus een 04 in de dc.l geven, 
	word het van vier bytes 00 voorafgegaan. In het geval van 4 komt
	de 4 op de eerste plaats (helemaal rechts), wat in ASSEMBLER iets
	totaal anders is, terwijl men wel altijd van 4 spreekt...
