
; Listing5f.s	Smelteffect m.b.v. Modulo registers.

; OPMERKING: Het duurt heel even voordat u het effect ziet. Het is er dan
; al, maar omdat de bovenste aantal lijnen zwart zijn ziet u niets gebeuren.

	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	

;	POINTEN Naar onze BITPLANES
 
	MOVE.L	#PIC,d0		

	LEA	BPLPOINTERS,A1	
				
	MOVEQ	#2,D1		
				
POINTBP:
	move.w	d0,6(a1)	
	swap	d0		
	move.w	d0,2(a1)	
	swap	d0		
	ADD.L	#40*256,d0	
	addq.w	#8,a1		
				
	dbra	d1,POINTBP	

	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	Flood			; Smelteffect

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

	btst	#6,$bfe001	
	bne.s	mouse		

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


; Effect dat men als 'vloeibaar metaal' zou kunnen definieëren.
; Bereikt met modulo 40.

Flood:
	TST.B	OpNeer	; Moeten we omhoog of omlaag?
	beq.w	GaOmlaag
	cmp.b	#$30,FWAIT	; Zijn we boven?
	beq.s	ZetOmlaag	; Zo ja, dan naar beneden.
	subq.b	#1,FWAIT
	rts

ZetOmlaag:
	clr.b	OpNeer	
	rts

GaOmlaag:
	cmp.b	#$f0,FWAIT	; Zijn we beneden?
	beq.s	ZetOmhoog	; Zo ja, dan naar boven
	addq.b	#1,FWAIT	
	rts

ZetOmhoog:
	move.b	#$ff,OpNeer 
	rts			

;	Flag-Byte...

OpNeer:
	dc.b	0,0


	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,$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  ; BPLCON0:
	dc.w	$100,%0011001000000000  ; Bits 13 en 12 aan!! (3 = %011)
					; 3 Bitplanes Lowres,geen Lace
BPLPOINTERS:
	dc.w $e0,$0000,$e2,$0000	; 1e Bitplane - BPL0PT
	dc.w $e4,$0000,$e6,$0000	; 2e Bitplane - BPL1PT
	dc.w $e8,$0000,$ea,$0000	; 3e Bitplane - BPL2PT

	dc.w	$0180,$000	; Color0
	dc.w	$0182,$475	; Color1
	dc.w	$0184,$fff	; Color2
	dc.w	$0186,$ccc	; Color3
	dc.w	$0188,$999	; Color4
	dc.w	$018a,$232	; Color5
	dc.w	$018c,$777	; Color6
	dc.w	$018e,$444	; Color7
FWAIT:
	dc.w	$3007,$FFFE	; WAIT Dat de negatieve modulo voorgaat
	dc.w	$108,-40
	dc.w	$10a,-40
 	
	dc.w	$FFFF,$FFFE	; Einde van de Copperlist

;	Plaatje

PIC:	
	incbin	"amiga.320*256*3"	; hier laden we het plaatje in RAW
					; Formaat in

	end

Probeer eens de routine te stoppen met de rechter muisknop. U zult zien dat
de laatste lijn tot het einde van het scherm wordt herhaald. We hebben 
gezien dat de copper niet verder komt als we de modulo op -40 zetten, omdat 
hij eerst 40 bytes lees, en dan weer 40 bytes terugspringt. Maar wat gebeurt
er als we de modulo op -80 zetten? We lezen achteruit!! De copper leest
40 bytes, en gaat daarna 80 bytes terug! Hij springt dus elke keer 1 lijn
terug! Dit 'speigeleffect' is op de Amiga heel mooi en simpel te maken.
Deze twee copperbevelen zijn voldoende:

	dc.w	$108,-80
	dc.w	$10a,-80

Probeer maar eens de twee modulo's van -40 door -80 te vervangen, en de
spiegel verschijnt.

Als we de negatieve waarde verhogen, wordt de spiegel gehalveerd:

	dc.w	$108,-40*3
	dc.w	$10a,-40*3