
; Listing6l.s	Knipperende kleuren d.m.v. een Tabel, die aan het einde
;		achteruit gaat.

	SECTION	CIPenCOP,CODE

Begin:
	move.l	4.w,a6		; Execbase in a6
	jsr	-$78(a6)	; Disable - stopt Multitasking
	lea	GfxName(PC),a1	
	jsr	-$198(a6)	; OpenLibrary
	move.l	d0,GfxBase	
	move.l	d0,a6
	move.l	$26(a6),OldCop	

	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		

	btst	#2,$dff016	
	beq.s	Wacht		

	bsr.w	Knipper	 ; Ga Naar KNIPPER ieder FRAME.

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

	btst	#6,$bfe001	
	bne.s	mouse		

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

; Knipper-routine die een kant-en-klare tabel gebruikt. Als we bij het
; einde van de tabel zijn aangekomen, dan wisselt de richting.
; dit doen we met een BCHG.G  #1,DIRFLAG. Nu gaan we zolang terug totdat
; we bij het eerste word zijn aangekomen. We wisselen DIRFLAG weer, en
; gaan weer vooruit.
;
; Opmerking: Deze routine is handig als we waarden nodig hebben die zo
; moeten zijn dat ze een hoogtepunt bereiken, en dan weer naar beneden
; gaan. In dit geval hadden we de tabel zo moeten maken:
;
;	dc.w	0,1,2,3,4,5,6,7,8,9,10 ; Omhoog tot het 'maximum'
;	dc.w	10,9,8,7,6,5,4,3,2,1,0 ; en dan weer omlaag.
;
; Bij onze routine is dat niet nodig, omdat we zelf terug gaan. We sparen
; plaats en tijd. Als de tabel echter GEEN 'spiegelbeeld' heeft, dan hadden
; we de tabel zo moeten maken:
;
;	dc.b	0,2,3,5,6,7,8,9,10
;	dc.b	9,8,7,6,4,3,2,1,0
;
; Dan hadden we ook beter de vorige routine kunnen gebruiken, die tot het 
; einde leest, en dan weer opnieuw begint.


Knipper:
	BTST	#1,DIRFLAG	; Moeten we de tabel vooruit of achteruit
	BEQ.S	Omlaag2		; lezen?
Omhoog2:
	SUBQ.L	#2,COLTABPOINT		; Point naar het vorige Word
	MOVE.L	COLTABPOINT(PC),A0	; Adres, dat in COLTABPOINT staat,
					; komt in a0
	CMP.L	#COLORTAB,A0	; Zijn we bij de eerste waarde in de tabel
				; aangekomen?
	BNE.S	NOBSTART2
	BCHG.B	#1,DIRFLAG		; Verander richting! (Lees naar 
					; voren!)

NOBSTART2:
	MOVE.W	(A0),Kleur0	; kopieër het Word in de Tabel in de COP
	rts

Omlaag2:
	ADDQ.L	#2,COLTABPOINT		; Point naar het volgende Word
	MOVE.L	COLTABPOINT(PC),A0	; Adres uit COLTABPOINT komt in a0
	CMP.L	#EindeCOLORTAB-2,A0	; Zijn we bij het laatste word in
					; de tabel?
	BNE.S	GeenRichtingsWissel	; Zo niet, verander niets.
	BCHG.B	#1,DIRFLAG		; Wissel de richting! (Lees terug)
GeenRichtingsWissel:
	MOVE.W	(A0),Kleur0	; kopieër het Word uit de Tabel in 
	rts			; Kleur0 in de COP

DIRFLAG:			; Label FLAG, wordt gebruikt om de richting
	DC.W	0		; te bepalen.


COLTABPOINT:		   ; Dit Longword "POINT" naar COLORTAB.

; De Tabel met voorgedefinieërde waarden...

COLORTAB:
	dc.w	$000,$000,$001,$011,$011,$011,$012,$012 ; Begin Donker
	dc.w	$022,$022,$022,$023,$023
	dc.w	$033,$033,$034
	dc.w	$044,$044
	dc.w	$045,$055,$055
	dc.w	$056,$056,$066,$066,$066
	dc.w	$167,$167,$177,$177,$177,$177,$177
	dc.w	$278,$278,$278,$288,$288,$288,$288,$288
	dc.w	$389,$389,$399,$399,$399,$399
	dc.w	$39a,$39a,$3aa,$3aa,$3aa
	dc.w	$3ab,$3bb,$3bb,$3bb
	dc.w	$4bc,$4cc,$4cc,$4cc
	dc.w	$4cd,$4cd,$4dd,$4dd,$4dd
	dc.w	$5de,$5de,$5ee,$5ee,$5ee,$5ee
	dc.w	$6ef,$6ff,$6ff,$7ff,$7ff,$8ff,$8ff,$9ff ; Maximum 'Fel'
EindeCOLORTAB:



	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 (Registers met Normaalwaarden)
	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

		    ; 5432109876543210
	dc.w	$100,%0000001000000000  ; 0 BITPLANES LOWRES

	dc.w	$0180,$000	; Color0 - Achtergrond

	dc.w	$a007,$fffe	; Wait Lijn $a0
	dc.w	$180
Kleur0:
	dc.w	$000		; Kleur0

	dc.w	$c007,$fffe	; Wait Lijn $c0
	dc.w	$180,$000	; Color0

	dc.w	$FFFF,$FFFE	; Einde van de Copperlist

	end

Dit is een van de vele varianten op de routine die uit een tabel waarden
uitleest. Deze routine kan alleen bij 'spiegelbeeld'-tabellen gebruikt
worden.

Hier is nog een voorbeeldje:

COLORTAB:
	dc.w $000,$100,$200,$300,$400,$500,$600,$700
	dc.w $800,$900,$a00,$b00,$c00,$d00,$e00
	dc.w $f00,$f10,$f20,$f30,$f40,$f50,$f60,$f70
	dc.w $f80,$f90,$fa0,$fb0,$fc0,$fd0,$fe0
	dc.w $ff0,$ef0,$df0,$cf0,$bf0,$af0,$9f0,$8f0
	dc.w $7f0,$6f0,$5f0,$4f0,$3f0,$2f0,$1f0
	dc.w $0f0,$0f1,$0f2,$0f3,$0f4,$0f5,$0f6,$0f7
	dc.w $0f8,$0f9,$0fa,$0fb,$0fc,$0fd,$0fe
	dc.w $0ff,$0ef,$0df,$0cf,$0bf,$0af,$09f,$08f
	dc.w $07f,$06f,$05f,$04f,$03f,$02f,$01f
	dc.w $00f,$10f,$20f,$30f,$40f,$50f,$60f,$70f
	dc.w $80f,$90f,$a0f,$b0f,$c0f,$d0f,$e0f
	dc.w $f0f,$e0e,$d0d,$c0c,$b0b,$a0a,$909,$808
	dc.w $707,$606,$505,$404,$303,$202,$101,$000
EindeCOLORTAB:

Probeert u ook deze eens:

COLORTAB:
	dc.w 0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
	dc.w $10f,$20f,$30f,$40f,$50f,$60f,$70f,$80f
	dc.w $90f,$a0f,$b0f,$c0f,$d0f,$e0f,$f0f
	dc.w $f1e,$f2d,$f3c,$f4b,$f5a,$f69,$f78,$f87
	dc.w $f96,$fa5,$fb4,$fc3,$fd2,$fe1,$ff0
	dc.w $ff0,$ff0,$fe0,$fd0,$fc0,$fb0,$fa0,$f90
	dc.w $f80,$f70,$f60,$f50,$f40,$f30,$f20,$f10
	dc.w $f00,$f00,$e01,$d02,$c03,$b04,$a05,$906
	dc.w $807,$708,$609,$50a,$40b,$30c,$20d,$10e,15
	dc.w $0f,$1f,$2f,$3f,$4f,$5f,$6f,$7f,$8f,$9f,$af
	dc.w $bf,$cf,$df,$ef,$ff,$ff,$fe,$fd,$fc,$fb,$fa
	dc.w $f9,$f8,$f7,$f6,$f5,$f4,$f3,$f2,$f1,$f0
	dc.w $1f1,$2f2,$3f3,$4f4,$5f5,$6f6,$7f7,$8f8,$9f9
	dc.w $afa,$bfb,$cfc,$dfd,$efe,$fff,$ffe,$ffd,$ffc,$ffb
	dc.w $ffa,$ff9,$ff8,$ff7,$ff6,$ff5,$ff4,$ff3,$ff2,$ff1,$ff0
	dc.w $fe0,$fd0,$fc0,$fb0,$fa0,$f90,$f80,$f70,$f60,$f50,$f40
	dc.w $f30,$f20,$f10,$f00,$f00,$e00,$d00,$c00,$b00,$a00,$900
	dc.w $800,$700,$600,$500,$400,$300,$200,$100,$0,0
EindeCOLORTAB:


