
*****	Title		Example
*****	Function	To test Copper List & subroutine generated by 
*****			CopBuilder. Garfield.bm is 320x256x4 CMAP BEHIND
*****			
*****	Size		41500 bytes
*****	Author		Mark Meany
*****	Date Started	Jan 92
*****	This Revision	Jan 92
*****	Notes		Thanks for piccy DAZ
*****			


		incdir		source:include/
		include		hardware.i

Start		bsr.s		SysOff		disable system, set a5
		tst.l		d0		error ?
		beq.s		.error		if so quit now !

.wait		btst		#6,CIAAPRA	LMB pressed ?
		bne.s		.wait		if not wait!
		
		bsr		SysOn		enable system
.error		rts

*****************************************************************************

;-------------- Disable the operating system.

; On exit d0=0 if no gfx library.

SysOff		lea		$DFF000,a5	a5->hardware

		move.w		DMACONR(a5),sysDMA	save DMA settings

		lea		grafname,a1	a1->lib name
		moveq.l		#0,d0		any version
		move.l		$4.w,a6		a6->SysBase
		jsr		-$0228(a6)	OpenLibrary
		move.l		d0,_GfxBase	open ok?
		beq		.error		quit if not
		move.l		d0,a6		a6->GfxBase
		move.l		38(a6),syscop	save addr of sys list

		jsr		-$01c8(a6)	OwnBlitter

		move.l		$4,a6		a6->sysbase
		jsr		-$0084(a6)	Forbid

; Wait for vertical blank and disable unwanted DMA ( eg. Sprites ).

.BeamWait	move.l		VPOSR(a5),d0	d0=VPOSR+VHPOSR
		and.l		#$1ff00,d0	mask off vert position
		cmp.w		#$1000,d0	is this line 16?
		bne.s		.BeamWait	if not loop back

		move.w		#$01e0,DMACON(a5) kill all dma
		move.w		#SETIT!COPEN!BPLEN!BLTEN,DMACON(a5) enable copper

; Write bitplane addresses into Copper List.

		lea		BitPlane,a0
		bsr		FillCopperList
		
; Strobe our list

		move.l		#Coplist,COP1LCH(a5)
		clr.w		COPJMP1(a5)

; Stop drives ( Thanks to Vandal of Killers for this hint )

		or.b		#$f8,CIABPRB
		and.b		#$87,CIABPRB
		or.b		#$f8,CIABPRB

		moveq.l		#1,d0
.error		rts

*****************************************************************************

;--------------	Bring back the operating system

SysOn		move.l		syscop,COP1LCH(a5)
		clr.w		COPJMP1		restart system list

		move.w		#$8000,d0	set bit 15 of d0
		or.w		sysDMA,d0	add DMA flags
		move.w		d0,DMACON(a5)	enable systems DMA

		move.l		$4.w,a6		a6->SysBase
		jsr		-$008A(a6)	Permit

		move.l		_GfxBase,a6
		jsr		-$01ce(a6)	DisownBlitter

		move.l		$4.w,a6		a6->SysBase
		move.l		_GfxBase,a1	a1->Graphics base
		jsr		-$019e(a6)	CloseLibrary

		rts

*****************************************************************************
*****************************************************************************
***************************** Data ******************************************
*****************************************************************************
*****************************************************************************


grafname	dc.b		'graphics.library',0
		even
_GfxBase	ds.l		1
sysDMA		ds.l		1
syscop		ds.l		1


*****************************************************************************
*****************************************************************************
********************** Source Generated By CoperBuilder *********************
*****************************************************************************
*****************************************************************************

pf_Width	equ	320/8
pf_Height	equ	256
pf_PlaneSize	equ	pf_Width*pf_Height
pf_Depth	equ	4
pf_Colours	equ	16

***************	Subroutine to fill Copper Lisdt with colour values and
*		Bitplane pointers. Generated by CopperBuilder, © M.Meany.

; Entry		a0->Raw Bitmap data, CMAP behind.

FillCopperList	move.l		#$00E0,d0	BPL1PTH
		move.l		a0,d1		data
		lea		CopPlanes,a1	a1->into copper list

		move.l		#pf_Depth,d2	get depth
		subq.l		#1,d2		adjust for dbra
.planeloop	move.w		d0,(a1)+	write high plane pointer
		addq.w		#2,d0		bump to low pointer
		swap		d1		get high part of addr
		move.w		d1,(a1)+	write high part of addr
		move.w		d0,(a1)+	write low plane pointer
		addq.w		#2,d0		bump to next plane pointer
		swap		d1		get low part of addr
		move.w		d1,(a1)+	write low part of addr
		add.l		#pf_PlaneSize,d1 bump to next bitplane
		dbra		d2,.planeloop	for all planes

		move.l		d1,a0		a0->CMAP
		move.l		#$0180,d0	COLOR00
		lea		CopColours,a1	a1->into copper list
		
		move.l		#pf_Colours,d2	get num of colours
		subq.l		#1,d2		adjust for dbra
.colourloop	move.w		d0,(a1)+	write colour register
		addq.w		#2,d0		bump to next register
		move.w		(a0)+,(a1)+	copy colour
		dbra		d2,.colourloop	for all colours
		
		rts				all done so return

		Section		Copper,Data_C

Coplist		dc.w		DIWSTRT,$2C81
		dc.w		DIWSTOP,$2CC1
		dc.w		DDFSTRT,$0038
		dc.w		DDFSTOP,$00D0
		dc.w		BPLCON0,$4200
		dc.w		BPLCON1,$0000
		dc.w		BPLCON2,$0000
		dc.w		BPL1MOD,$0000
		dc.w		BPL2MOD,$0000
CopColours	ds.w		$0020
CopPlanes	ds.w		$0010
		dc.w		$ffff,$fffe

; Created by CopperBuilder, © M.Meany 1992.

*****************************************************************************
*****************************************************************************
************************** Raw Data *****************************************
*****************************************************************************
*****************************************************************************

; Raw bitplane data with CMAP behind playfields. 320x256x4.

BitPlane	incbin		garfield.bm
