
; Listing3b.s	; DE EERSTE COPPERLIST


	SECTION EERSTECOP,CODE	; Dit bevel dwingt het systeem de volgende code
							; in Fast-Ram te laden, als dat vrij is,anders
							; in Chip-Ram

Begin:
	move.l	4.w,a6	   	; Execbase in a6
	jsr	-$78(a6)   		; Disable - stopt Multitasking
	lea	GfxName,a1 		; Adres van de  Naam van de te openen Library in a1
	jsr	-$198(a6)  		; OpenLibrary, Routine van EXEC, die Library's
			   			; opent, en het Resultaat in d0 ( Basisadres )
						; van diezelfde Bibliotheek levert, van welke we
						; de Offsets we moeten gebruiken.
	move.l	d0,GfxBase	; Sla dit adres op in GfxBase
	move.l	d0,a6
	move.l	$26(a6),OldCop	; Hier slaan we de originele Copperlist op.
	move.l	#COPPERLIST,$dff080	; COP1LC - "Pointer" naar ons COP's adres,
	move.w	d0,$dff088		; COPJMP1 - Starten onze COP
mouse:
	btst	#6,$bfe001	; linker Muisknop gedrukt?
	bne.s	mouse		; zo niet, terug naar waitmouse

	move.l	OldCop(PC),$dff080	; COP1LC - "Pointer" naar de Originele-COP
	move.w	d0,$dff088			; COPJMP1 - en start 'm

	move.l	4.w,a6
	jsr	-$7e(a6)	; Enable - Multitasking weer aan
	move.l	GfxBase(PC),a1	; Basis van de Library, die we willen sluiten
							; (Libraries worden geopend EN gesloten!!)
	jsr	-$19e(a6)			; Closelibrary - sluit Graphics lib
	rts

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

GfxBase:	   
	dc.l	0 

OldCop:			
	dc.l	0	


	SECTION GRAPHIC,DATA_C	; Dit bevel dwingt het systeem het volgende
							; Datasegment in CHIP-RAM te laden. 
							; COPPERLIJSTEN MOETEN IN CHIP RAM!

COPPERLIST:
	dc.w	$100,$200	; BPLCON0 - Geen schermen,alleen achtergrond
	dc.w	$180,$000	; COLOR0 zwart
	dc.w	$7f07,$FFFE	; WAIT - Wacht op lijn $7f (127)
	dc.w	$180,$00F	; COLOR0 blauw
	dc.w	$FFFF,$FFFE	; EINDE Van onze list.

	end

Dit programma laat ons onze eigen Copperlist aanwijzen, en leent zich 
uitstekend voor het experimenteren met Copperlijsten. Laat u zich niet
ontmoedigen als u hier ziet dat er Library's geopend en gesloten worden e.d.
want voorlopig gebruiken we alleen Graphics.lib.

OPMERKING1: Zoals u wel zult zien, staat in dit programma het bevel SECTION,
dat de functie heeft de 'HUNKS' van een executable (uitvoerbare) file te
plaatsen in een voorgedefinieërd geheugengebied. Hier kan ik uren over 
doorgaan maar neem voorlopig maar aan dat het erbij hoort.

OPMERKING2: U zult ook wel het gebruik van (PC) opgemerkt hebben:

	move.l	OldCop(PC),$dff080	; COP1LC - "Pointer" naar originele COP

Dit 'aangeplakte' (PC) na de naam van het LABEL verandert niets aan de 
FUNCTIE van het programma, want als u (PC) weglaat gebeurt hetzelfde. Wel
verandert de VORM van de 'verwijzing' naar een label. Na assembleren
ziet het er dan zo uit:


	...			BTST	#$06,$00BFE001
	...			BNE.B	$xxxxxxxx
	23FA003400DFF080	MOVE.L	$xxxxxx(PC),$00DFF080
	...			MOVE.W	D0,$00DFF088
	
Ziet u dat de move.l OldCop(PC),$dff080 geassembleert is als $23fa ...?
Verwijder nu de (PC) en kijk opnieuw:

	23F900xxxxxx00DFF080	MOVE.L	$xxxxxx,$00DFF080

Deze keer wordt het bevel in 10 bytes i.p.v. 8 geassembleerd, en de $23F9 is
duidelijk. Het betekent Move.l het adres van OldCop,terwijl in het geval
van de move.l MET PC het bevel met $23fa begon, en men $34 op de plaats van
OldCop ziet. Het verschil is dat in het tweede geval een ABSOLUUT adres 
wordt geplaats i.p.v. het label, en in het eerste geval een Relatief adres.
Een relatief adres is de afstand tussen het bevel dat PC gebruikt, en de 
plaats waar we naar toe willen. Deze methode is sneller en spaart een paar
bytes. Deze manier kan men enkel alleen voor Labels gebruiken die BINNEN
een gebied liggen van 32K (zoals bij BSR), en kan niet worden gebruikt 
tussen twee SECTION's. Ik raad u aan altijd (PC) te gebruiken als dat
moegelijk is:


	LEA		LABEL(PC),a0
	MOVE.L	LABEL(PC),d0
	MOVE.L	LABEL1(PC),LABEL2 ; Alleen bij het eerste label kan (PC) staan,
							  ; Bij het tweede nooit!
	MOVE.L	#LABEL1,LABEL2	  ; Hier kan men geen (PC) gebruiken,omdat het
							  ; bij de eerste operand geen zin heeft, en
							  ; bij de tweede mag het niet!

Hier een paar aanpassingen: U kunt nu uw eigen copperlist maken! Begin ermee
eerst alleen de eerste twee kleuren te veranderen. (Denk aan het formaat
$0RGB !). Wilt u kleurverlopen maken, dan moet u enige WAIT's toevoegen.
Probeer deze maar eens:

COPPERLIST:
	dc.w	$100,$200	; BPLCON0 - Alleen achtergrond
	dc.w	$180,$000	; COLOR0 - Begin met zwart
	dc.w	$4907,$FFFE	; WAIT - Wacht op lijn $49 (73)
	dc.w	$180,$001	; COLOR0 - Donker blauw
	dc.w	$4a07,$FFFE	; WAIT - Lijn 74 ($4a)
	dc.w	$180,$002	; COLOR0 - Beetje lichter blauw
	dc.w	$4b07,$FFFE	; WAIT - Lijn 75 ($4b)
	dc.w	$180,$003	; COLOR0 - Nòg iets lichter blauw
	dc.w	$4c07,$FFFE	; WAIT - Volgende lijn
	dc.w	$180,$004	; COLOR0 - Nòg lichter blauw
	dc.w	$4d07,$FFFE	; WAIT - Volgende lijn
	dc.w	$180,$005	; COLOR0 - Nòglichter blauw
	dc.w	$4e07,$FFFE	; WAIT - Volgende lijn
	dc.w	$180,$006	; COLOR0 - Blauw op 6
	dc.w	$5007,$FFFE	; WAIT - Sla 2 regels over:
						; van $4e tot $50, dus van 78 tot 80
	dc.w	$180,$007	; COLOR0 - Blauw op 7
	dc.w	$5207,$FFFE	; WAIT - sla 2 regels over
	dc.w	$180,$008	; COLOR0 - Blauw op 8
	dc.w	$5507,$FFFE	; WAIT - Sla 3 regels over
	dc.w	$180,$009	; COLOR0 - Blauw op 9
	dc.w	$5807,$FFFE	; WAIT - Sla 3 regels over
	dc.w	$180,$00a	; COLOR0 - Blauw op 10
	dc.w	$5b07,$FFFE	; WAIT - Sla 3 regels over
	dc.w	$180,$00b	; COLOR0 - Blauw op 11
	dc.w	$5e07,$FFFE	; WAIT - Sla 3 regels over
	dc.w	$180,$00c	; COLOR0 - Blauw op 12
	dc.w	$6207,$FFFE	; WAIT - Sla 4 regels over
	dc.w	$180,$00d	; COLOR0 - Blauw op 13
	dc.w	$6707,$FFFE	; WAIT - Sla 5 regels over
	dc.w	$180,$00e	; COLOR0 - Blauw op 14
	dc.w	$6d07,$FFFE	; WAIT - Sla 6 regels over
	dc.w	$180,$00f	; COLOR0 - Blauw op 15
	dc.w	$7907,$FFFE	; WAIT - Wacht lijn $79 af
	dc.w	$180,$300	; COLOR0 - Begin rode Balk: Rood op 3
	dc.w	$7a07,$FFFE	; WAIT - Volgende regel
	dc.w	$180,$600	; COLOR0 - Rood op 6
	dc.w	$7b07,$FFFE	; WAIT - 
	dc.w	$180,$900	; COLOR0 - Rood op 9
	dc.w	$7c07,$FFFE	; WAIT - 
	dc.w	$180,$c00	; COLOR0 - Rood op 12
	dc.w	$7d07,$FFFE
	dc.w	$180,$f00	; Rood op 15 (Maximum)
	dc.w	$7e07,$FFFE
	dc.w	$180,$c00	; Rood op 12
	dc.w	$7f07,$FFFE
	dc.w	$180,$900	; Rood op 9
	dc.w	$8007,$FFFE
	dc.w	$180,$600	; Rood op 6
	dc.w	$8107,$FFFE
	dc.w	$180,$300	; Rood op 3
	dc.w	$8207,$FFFE
	dc.w	$180,$000	; Kleur Zwart
	dc.w	$fd07,$FFFE	; Wacht op lijn $FD
	dc.w	$180,$00a	; Blauw 10
	dc.w	$fe07,$FFFE	; Volgende lijn
	dc.w	$180,$00f	; Blauw maximale Intensiteit (15)
	dc.w	$FFFF,$FFFE	; EINDE VAN DE COPPERLIST

Samenvattend: als ik op lijn $50 Color00 op groen zet,dan wrodt alles vanaf
lijn $50 groen,totdat ik de kleur weer verander.

  


