
; Listing5i.s	Doorlopen van het ChipRam door het veranderen van 
;		BPLPOINTERS in de Copperlist.
;		Linker Muisknop om voorwaarts te bewegen, rechter om terug
;		te gaan. Beide om te stoppen.

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

;	OPMERKING: Hier laten we alle Bitplane-pointers op $000000 pointen,
;	dus het begin van het CHIP RAM.

	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	; Zijn we al op lijn 255?
	bne.s	mouse		; Zo niet, ga niet verder.

Wacht:
	cmpi.b	#$ff,$dff006	; Zijn we op lijn 255?
	beq.s	Wacht		; Zo ja, ga niet verder.

	btst	#2,$dff016	; Als de rechter muisknop is gedrukt
	bne.s	NietOmlaag	; Zo niet,ga naar NietOmlaag

	bsr.s	GaOmlaag	; Anders ga naar GaOmlaag

NietOmlaag:
	btst	#6,$bfe001	; Linker muisknop gedrukt?
	beq.s	ScrollOmhoog	; Zo ja, Scroll omhoog.
	bra.s	mouse		; Niet? Dan herhaal de cyclus nog een
				; FRAME lang

ScrollOmhoog:
	bsr.w	GaOmhoog		; Laat het beeld naar boven scrollen

	btst	#2,$dff016	 
	bne.s	mouse

	move.l	OldCop(PC),$dff080	; COP1LC - pointer naar Orginale-COP
	move.w	d0,$dff088		; COPJMP1 - en start 'm!

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

; DATEN

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


; Deze routine beweegt het beeld naar boven en beneden, als men de Bitplane-
; pointers verandert. 

GaOmlaag:
	LEA	BPLPOINTERS,A1	; Met deze 4 aanwijzingen halen we uit
	move.w	2(a1),d0	; de Copperlist het adres waarheen $dff0e0
	swap	d0		; Momenteel wijst, en geven deze waarde in
	move.w	6(a1),d0	; d0 terug.
	
	sub.l	#80*3,d0	; Scroll beeld 3 lijnen naar beneden.
				; 80*3= Hires * 3 Lijnen
	bra.s	Einde


GaOmhoog:
	LEA	BPLPOINTERS,A1	; Met deze 4 aanwijzingen halen we uit
	move.w	2(a1),d0	; de Copperlist het adres waarheen $dff0e0
	swap	d0		; Momenteel wijst, en geven deze waarde in
	move.w	6(a1),d0	; d0 terug.
	
	add.l	#80*3,d0	; Tel 80*3 erbij op, dus 3 lijnen.
				; (Scrollt dus naar boven)
	bra.w	Einde

Einde:				; We pointen op onze bitplanes.
	move.w	d0,6(a1)	; Doe het verwisselgedoe weer...
	swap	d0		
	move.w	d0,2(a1)	
	rts


	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 Standaardwaarden)
	dc.w	$90,$2cc1	; DiwStop
	dc.w	$92,$003c	; DdfStart HIRES Normaal
	dc.w	$94,$00d5	; DdfStop HIRES Normaal
	dc.w	$102,0		; BplCon1
	dc.w	$104,0		; BplCon2
	dc.w	$108,0		; Bpl1Mod
	dc.w	$10a,0		; Bpl2Mod

		    ; 5432109876543210  ; BPLCON0:
	dc.w	$100,%1001001000000000  ; Bits 12 en 15 aan!! 1 Bitplane
					; Hires 640x256, geen Interlace
BPLPOINTERS:
	dc.w $e0,$0000,$e2,$0000	;1e  Bitplane - BPL0PT

	dc.w	$0180,$000	; color0
	dc.w	$0182,$2ae	; color1

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

	end

Met dit simpele programma kunt u de inhoud van uw Chip-Ram zien. Als u
met de linker muisknop begint, zult u al spoedig uw eigen workbench tegen
komen, en waarschijnlijk ook nog de editor van u assembler o.i.d. We 
gebruiken hier maar 1 bitplane in Hires, dat begint bij $00000, dus het
begin van het chip ram bij de Amiga. Probeer eens een spelletje te spelen
en daarna dit programma te draaien. Wat blijkt? 9 van de 10 keren staan
de plaatjes nog in uw geheugen, zelfs NA een reset. Vreemd? Nee. Uw geheugen
wordt namelijk niet schoongemaakt na een reset, wel Vrijgegeven. Dat wil
zeggen dat de Amiga de blokken geheugen als 'Leeg' markeert, en er gewoon
in kan schrijven. Het geheugen is alleen schoon nadat er een tijd geen
spanning op de computer heeft gestaan (de computer een tijdje heeft 
uitgestaan dus).
Als u het scrollen wilt versnellen, dan moet u de waarde veranderen die
bij het bitplane wordt op geteld/afgetrokken. Zorg ervoor dat dit een
veelvoud van 80 is (we gebruiken Hires!).
Zoals de listing nu is doen we 3 lijnen per keer:

	sub.l	#80*3,d0	; 80*3, dus 3 lijnen.

Om de scroll TURBO te maken, probeert u eens een 80*10 of meer.
Als u goed kijkt en geluk heeft ziet u dat er een paar pixels bewegen. Dit
komt doordat de waarde in de BitPlanePointers steeds verandert, en aangezien
deze in het geheugen staan, verandert het geheugen steeds. Dus ziet u ook
een paar pixels bewegen.