	opt c+,d+
	
; *** example copper list ***

; customchip register

intena	= $9a	; int. enable register (write)
dmacon	= $96	; dma-control register
colour00	= $180	; colour palette 0 register

; copper register

cop1lc	= $80	; address of 1 copperlist
cop2lc	= $84	; address of 2 copperlist
copjmp1	= $88	; jump to copper list 1
copjmp2	= $8a	; jump to copper list 2

; cia-a port register a (mouse button)

ciaapra	= $bfe001

; exec library base offsets

openlib	= -30-522	; libname,version/a1,d0
forbid	= -30-102
permit	= -30-108
allocmem	= -30-168	; byte size,requirements/d0,d1
freemem	= -30-180	; memory block,byte size/a1,d0

; graphics base

startlist	= 38

; other labels

execbase	= 4
chip 	= 2	; request chip ram

; *** initialise program ***

; request memory for copperlist

start:
	move.l execbase,a6
	moveq #clsize,d0 ; set parameter for allocmem
	moveq #chip,d1	 ; ask for chip ram
	jsr allocmem(a6) ; request memory  
	move.l d0,cladr	 ; adress of the ram-area memory
	beq.s end	 ; error - end
	
; copy copperlist to cladr

	lea clstart,a0
	move.l cladr,a1
	moveq #clsize-1,d0 
clcopy:	move.b (a0)+,(a1)+
	dbf d0,clcopy
	
; *** main program ***

	jsr forbid(a6)	; task switching off
	lea $dff000,a5	; basic address of reg to a5
	move.w #$30a0,dmacon(a5) ; dma off
	move.l cladr,cop1lc(a5)  ; address of the copperlist
	clr.w copjmp1(a5)        ; load copperlist in prg counter
	
; switch copper dma

	move.w #$8280,dmacon(a5)

; wait for mouse button

wait:	btst #6,ciaapra
	bne.s wait
	
; *** end program ***

	move.l #gfxname,a1
	clr.l d0
	jsr openlib(a6)
	move.l d0,a4
	move.l startlist(a4),cop1lc(a5)
	clr.w copjmp1(a5)
	move.w #$83e0,dmacon(a5)
	jsr permit(a6)
	
; free memory of copperlist

	move.l cladr,a1
	moveq #clsize,d0
	jsr freemem(a6)
end:	clr.l d0
	rts

; variables

cladr:	dc.l 0

; constants

gfxname:	dc.b 'graphics.library',0
	even
	
; copperlist

clstart:	
	dc.w colour00,$0000
	dc.w $640f,$fffe
	dc.w colour00,$0f00
	dc.w $be0f,$fffe
	dc.w colour00,$0fb0
	dc.w $ffff,$fffe
clend:

clsize	= clend-clstart

