
; Listing3f.s	; BALK, DIE OP EN NEER GAAT D.M.V MOVE & WAIT
		; ONDER DE $FF-LIJNEN!

; Deze listing is hetzelfde als Listing3d.s, met het verschil dat we nu
; ook de $FF grens hebben overschreden met de bewegende balk. (Iets dat 
; tot nu toe nog niet mogelijk was.

	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
	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 
	bne.s	mouse		

	bsr.s	BeweegCopper	

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

	btst	#6,$bfe001	
	bne.s	mouse		

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

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

; De BeweegCopper is hetzelfde gebleven, alleen de waarden voor de
; maximale en minimale hoogte zijn veranderd in $0a en $2c.

BeweegCopper:
	LEA	Balk,a0  
	TST.B	OpNeer 
	beq.w	GaOmlaag  
	cmpi.b	#$0a,(a0)	; Zijn we bij lijn $0a+$ff aangekomen?
	beq.s	ZetOmlaag	; zo ja,dan zijn we boven aangekomen,
	subq.b	#1,(a0)		; en moeten we omlaag.
	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)	; Zijn we op lijn $2c aangekomen?
	beq.s	ZetOmhoog	; Zo ja,dan zijn we beneden,en moeten we 
	addq.b	#1,(a0)		; stijgen
	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		
		


;	DATA...

OpNeer:
	dc.b	0,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 

	dc.w	$2c07,$FFFE	; WAIT 
	dc.w	$180,$010	; COLOR0
	dc.w	$2d07,$FFFE	; WAIT
	dc.w	$180,$020	; COLOR0
	dc.w	$2e07,$FFFE
	dc.w	$180,$030
	dc.w	$2f07,$FFFE
	dc.w	$180,$040
	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	$ffdf,$fffe	; LET OP! WAIT aan het einde van lijn $FF!
				; De volgende Wait's zijn onder lijn $FF,
				; en beginnen weer bij $00!

	dc.w	$0107,$FFFE	; Een groene balk,onder $FF!
	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


	end



EIN   WUNDER!   We hebben het voor elkaar gekregen om een kleurige balk
ONDER de beruchte lijn $FF te zetten! En alles door het bevel:

	dc.w	$ffdf,$fffe

en we tellen 'gewoon' weer verder bij $0107. Dit is echter wel het onderste
deel van het scherm! Dit is zo,omdat een byte maar 255 waarden kan bevatten
($0 t/m $FF). Bovenstaande regel betekent dat we een op lijn willen wachten
die onder $FF ligt. Daarna gaat de telling gewoon weer verder alsof we
bovenaan het scherm staan totdat we bij ongeveer $30 zijn. Dit hele gedoe
is er omdat de Amiga is ontworpen op de NTSC standaard voor Amerika,waar
het beeld maar $FF lijnen kent. Amerikanen zien dan ook het onderste 
gedeelte van het beeld niet als we ons programma op de PAL standaard 
schrijven.

Opmerking: Tot nu toe konden we met $Dff006 alleen maal lijnen tot en met
$FF uitlezen. Ik zal u later vertellen hoe we een lijn NA $FF met een
$Dffxxx kunnen uitlezen.


