
; Listing3c2.s	; BALK, DIE ZAKT, GEDAAN MET EEN MOVE&WAIT VAN DE COPPER
		; (OM TE ZAKKEN,RECHTER MUISKNOP! Linker om te stoppen!).

		;Er is een controle toegevoegd om te stoppen op een bepaalde
		;lijn.

	SECTION	TWEEDECOP,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)   
	move.l	d0,GfxBase
	move.l	d0,a6
	move.l	$26(a6),OldCop
	move.l	#COPPERLIST,$dff080
	move.w	d0,$dff088	
mouse:	 
	cmpi.b	#$ff,$dff006	; VHPOSR - Zijn we bij lijn 255 aangekomen?
	bne.s	mouse		; Zo niet,ga niet verder

	btst	#2,$dff016	; POTINP - Rechter Muisknop gedrukt?
	bne.s	Wacht		; Zo niet,terug naar wacht

	bsr.s	BeweegCopper	; De eerste beweging op het scherm!
				; Deze subroutine laat de WAIT zakken!
				; Ze wordt 1 keer per Frame uitgevoerd,
				; want de bsr.s BeweegCopper wordt maar
				; 50 keer per seconde opgeroepen.

Wacht:			; Zitten we nog op lijn $FF? 

	cmpi.b	#$ff,$dff006 ; Zitten we nog op lijn $FF? Zo ja,wacht dan op
	beq.s	Wacht	     ; het volgende Frame (lijn 00). Anders wordt
			     ; BeweegCopper weer uitgevoerd. Dit probleem
			     ; bestaat alleen bij zeer korte & snelle
			     ; programma's.

	btst	#6,$bfe001	; linker Muisknop gedrukt?
	bne.s	mouse		; zo niet, terug naar mouse.

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

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

;
;	Deze kleine routine zorgt ervoor dat de Copper-wait steeds 1 wordt
;	opgehoogd, dus de balk zakt. (Logisch he? Dit komt omdat we van
;	boven beginnen te tellen.)
;
;	dc.w	$2007,$FFFE	; Wacht op lijn $20
;
;	Dit wordt dan veranderd in:
;
;	dc.w	$2107,$FFFE	; Wacht op lijn $21! (Dan $22,$23 etc.)
;
;	OPMERKING: Heeft men eenmaal de Maximale waarde van een Bytes 
; 	bereikt, dus $ff, dan zal bij een volgende ADDQ.B #1,BALK alles weer
;	bij 0 verder tellen...

BeweegCopper:
	cmpi.b	#$fc,BALK	;Zijn we bij lijn $Fc aangekomen?
	beq.s	Eind		;Zo ja,stoppen.
	addq.b	#1,BALK	 ; WAIT 1 verandert, Balk zinkt 1 lijn.
Eind:
	rts

;	Als de balk $fc heeft bereikt, wordt de addq instructie overgeslagen
;
;	P.S. Zoals het er nu voor staat kunnen we nog niet de bodem van het
;	beeld bereiken (na $ff). Ik verklaar later waarom.

;	DATA...


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

GfxBase:	   
	dc.l	0  

OldCop:		 
	dc.l	0	

	SECTION GRAPHIC,DATA_C	; COPPERLIST MOET IN CHIP RAM!

COPPERLIST:
	dc.w	$100,$200	; BPLCON0 
	dc.w	$180,$004	; COLOR0 

BALK:
	dc.w	$7907,$FFFE	; WAIT - Wacht op lijn $79
	dc.w	$180,$600	; COLOR0 - Hier begint de rode Zone:
				; ROOD auf 6
	dc.w	$FFFF,$FFFE	; EINDE VAN DE COPPERLIST

	end

Als verandering kunt u proberen $fc in de regel

	cmpi.b	#$fc,BALK
	
door een andere waarde te vervangen, en u zult merken dat de balk alleen 
maar zakt tot de gegeven waarde.