*
*	'PRETTY' COPPER EFFECTS! (V2.0!)
*	
*	NEIL JOHNSTON. 01-03-91. 23:34
*
*	NOTE: JUST SPOTTED A LITTLE 'BUG'! LINE NEAR BOTTOM OF SCREEN
*	FLICKERS, THOUGH I'D SWEAR IT DIDN'T DO IT BEFORE. FIRST PERSON
*	TO DEBUG IT GETS A BOX OF CADBURY'S CREME EGGS! (MAYBE!)

	SECTION COPPER-FX(2),CODE_C	CODE 2 CHIPMEM
	OPT	C-			NO CASE SENSITIVITY

**********

	INCDIR	SYS:INCLUDE/
	INCLUDE	HARDWARE/CUSTOM.I
	INCLUDE	EXEC/EXEC_LIB.I

**********

START	MOVE.L	A7,STPOINT		SAVE STACK POINTER
	MOVEM.L	A0-A6/D0-D7,-(A7)	SAVE ALL REGISTERS
	MOVE.L	#$DFF000,A5		I USE A5 AS MY HARDWARE OFFSET REG.
	CALLEXEC FORBID			TURN OFF MULTITASKING
	LEA	GFXNAME(PC),A1
	
	CLR.L	D0
	CALLEXEC OPENLIBRARY		OPEN GFX LIBRARY
	MOVE.L	D0,GFXBASE
	MOVE.W	DMACONR(A5),DMASAVE	SAVE CLI DMA SETTINGS


WAIT1	BTST	#0,VPOSR(A5)		WAIT FOR VBL
	BNE.S	WAIT1			BEFORE TURNING
WAIT2	CMPI.B	#55,VHPOSR(A5)		SPRITE DMA OFF TO
	BNE.S	WAIT2			PREVENT CRAP APPEARING

SET_UP	MOVE.W	#$7FFF,DMACON(A5)	ALL DMA OFF
	MOVE.L	#NEWCOP,COP1LC(A5)	STICK MY NEW COPPER IN...
	MOVE.L	COPJMP1(A5),D0		...AND STROBE IT
	MOVE.W	#%1000001110000000,DMACON(A5)	BPL+COP DMA ONLY!!!!

**********

	MOVE.L	#SCREEN,D0		YOU DON`T RELLY NEED A SCREEN
	MOVE.W	D0,PL1L			FOR THIS, AND I'M NOT SURE
	SWAP	D0			WHY I PUT ONE IN AT ALL!!!
	MOVE.W	D0,PL1H
	MOVEQ.L	#0,D2			RESET COLOUR COUNTER

STRT	LEA	COPPER,A0		COPPER BARS START LOC.
	MOVE.L	#0,D1			WAIT POS --> D1
	MOVE.L	D2,STRTCOL		SAVE CRNT STARTING COLOUR
	
	MOVE.L	#255,D3			256 LINE (TOP PART)

LOOP	MOVE.B	D1,(A0)			WAIT COMMAND
	MOVE.B	D2,6(A0)		COLOUR COMMAND

	ADD.W	#$1,D1			ADD 1 TO WAIT...
	ADD.W	#$1,D2			...AND 1 TO COLOUR AS WELL!

	ADD.L	#8,A0			NEXT COPPER WAIT LINE

	DBRA	D3,LOOP			AND REPEAT LOTS OF TIMES!

	MOVE.L	#0,D1			RESET WAIT COUNTER

	
	LEA	COPPER2,A0			ADDRESS OF LOWER COPPER SECT.
	MOVE.L	#55,D3			DBRA LOOP COUNTER


LOOP2	MOVE.B	D1,(A0)			WAIT COMMAND
	MOVE.B	D2,6(A0)		COLOUR COMMAND

	ADDI.W	#$1,D1			WAIT+1 
	ADDI.W	#$1,D2			& COLOUR+1

	ADD.L	#8,A0			NEXT COPPER WAIT LINE

	DBRA	D3,LOOP2

MWAIT	BTST	#6,$BFE001		WANT TO QUIT YET?
	BEQ.S	QUIT
WAITVBL
	CMPI.B	#255,$DFF006		WAIT FOR 1 FRAME
	BNE.S	WAITVBL

	MOVE.L	STRTCOL,D2		RESTORE SAVED COLOUR
	ADDI.W	#$1,D2			AND ADD 1 TO INITIAL VALUE (SCROLL)
	BRA	STRT			KEEP ON GOING....

**********

QUIT	MOVE.W	DMASAVE,D7
	BSET	#$F,D7
	MOVE.W	D7,DMACON(A5)

	MOVE.L	GFXBASE,A0
	MOVE.L	$26(A0),COP1LC(A5)	FIND/REPLACE SYSTEM COPPER
	CLR.L	D0
	MOVE.L	GFXBASE,A1
	CALLEXEC CLOSELIBRARY		CLOSE GRAPHICS LIBRARY
	CALLEXEC PERMIT			TURN ON MULTITASKING
	MOVEM.L	(A7)+,A0-A6/D0-D7	RESTORE REGISTERS...
	MOVE.L	STPOINT,A7		...AND OLD STACK
	RTS				GOODBYE CRUEL WORLD (SOB!)

**********

NEWCOP	DC.W	BPLCON0,$0200		CHANGE 1ST DIGIT FOR 1-5 BPL
	DC.W	BPLCON1,$0000
	DC.W	DIWSTRT,$2281		THIS IS ALL
	DC.W	DIWSTOP,$22C1
	DC.W	DDFSTRT,$0038		STANDARD SCREEN CRAP.
	DC.W	DDFSTOP,$00D0
	DC.W	BPL1MOD,$0000		CHANGE IT TO
	DC.W	BPL2MOD,$0000
	DC.W	COLOR+$00,$0000		SUIT YOUR NEEDS
	DC.W	COLOR+$02,$0FFF

	DC.W	BPLPT+$00		SET UP COPPER BPLANE POINTERS
PL1H	DC.W	0,BPLPT+$02
PL1L	DC.W	0,BPLPT+$04
PL2H	DC.W	0,BPLPT+$06
PL2L	DC.W	0,BPLPT+$08
PL3H	DC.W	0,BPLPT+$0A
PL3L	DC.W	0,BPLPT+$0C
PL4H	DC.W	0,BPLPT+$0E
PL4L	DC.W	0,BPLPT+$10
PL5H	DC.W	0,BPLPT+$12
PL5L	DC.W	0

	INCLUDE	SOURCE:source/311_LINE_CLIST.S

	DC.W	$FFFF,$FFFE		AND WAIT FOR THE IMPOSSIBLE!

**********				LABELS CRAP FOLLOWS...

GFXNAME		DC.B	'graphics.library'
		EVEN

GFXBASE		DC.L	0
STPOINT		DC.L	0
DMASAVE		DC.W	0
STRTCOL		DC.L	0

	SECTION	SCREENSPACE,BSS_C	USE BSS TO SAVE DISK SPACE!

SCREEN		DCB.B	10240,0

