


;	A quick copper cycling routine 
;	brought to you by The Art/EX4



***************************************************
*** MACRO-Definition				***
***************************************************

WAITBLITT:	MACRO
		btst	#6,$02(a6)
.\@:		btst	#6,$02(a6)
		bne.s	.\@
		ENDM

***************************************************
*** ProgrammStart				***
***************************************************

Kill_OS:	move.l	(AbsExecBase).w,a6	; get execbase
		lea	Gfxlib(pc),a1		; point to graphics.library
		jsr	OldOpenLibrary(a6)	; open graphics library
		move.l 	d0,Gfxbase		; save gfxbase address
		jsr	Forbid(a6)		; () turn off multitasking
		lea	(_Custom).l,a6		; custom base address in a6
		move.w	dmaconr(a6),dmasav	; save dma
		move.w	intenar(a6),intsav	; save intena
		move.w	adkconr(a6),adksav	; save adkcon
		move.w	#$7fff,intena(a6)	; turn off intena

		move.l  #Copperlist,cop1lch(a6)	; install custom copperlist
		clr.w	copjmp1(a6)		; clear second copperlist
		move.w	#$c020,intena(a6)	; return INTENA:
		move.w  #$87c0,dmacon(a6)	; return DMA:Cop/Blit/Sprite


		bsr.w	get_planes
		bsr	Main


**********************************************************************
*	Restore OS
**********************************************************************



Help_OS:	lea	(_Custom).l,a6		; custom base address in a6
		move.l	GFXbase(pc),a1		; get gfxbase in a1
		move.l	SysCop1(a1),cop1lch(a6)	; restore old system copper
		move.w	dmasav,d0		; get saved dma value
		or.w	#$8000,d0
		move.w	d0,dmacon(a6)		; restore old dma
		move.w	adksav,d0		; get saved adkcon value
		or.w	#$8000,d0
		move.w	d0,adkcon(a6)		; restore old adkcon
		move.w	intsav,d0		; get saved intena value
		or.w	#$8000,d0
		move.w	d0,intena(a6)		; restore old interna
		move.l	(AbsExecBase).w,a6	; get execbase
		jsr	Permit(a6)		; permit multitasking
		move.l	GFXbase(pc),a1		; get gfxbase in a1
		jsr	CloseLibrary(a6)	; close gfx library
		moveq.l	#0,d0			; no cli return code
		rts

***************************************************
*** Main Loop					***
***************************************************

Main:
		cmp.b	#255,$dff006
		bne.s	main

		bsr.w	cyclecop

		btst	#6,$bfe001
		bne.s	Main
		WAITBLITT
		rts
***********************************************************************
*	Set Up the Planes..........
*********************************************************************

get_planes	lea	planeptrs,a0	;get address of copper planes ptrs
		lea	planes,a1	;address of planes
		move.l	#3-1,d2		;number of planes -1

.loop		move.l	a1,d0		;store it in d0
		move.w	d0,6(a0)	;get low word
		swap	d0		;swap it round
		move.w	d0,2(a0)	;get high word
		add.l	#10240,a1	;add single plane size
		add.l	#8,a0		;add next copper plane ptr
		dbra	d2,.loop	;do all planes
		rts			;done!!!
			
*************************************************************************
*	Cycle da copper!!!
***********************************************************************

cyclecop	lea	copst+6,a0	;addr of first colour
		lea	copst+14,a1	;addr of second colour
		move.l	#204-1,d0	;number of colours to cycle
		move.w	(a0),d1		;store first colour

do_cop		move.w	(a1),(a0)	;move second colour into first
		add.l	#8,a0		;add to next colour
		add.l	#8,a1		;ditto...
		dbra	d0,do_cop	;shift all colours
		move.w	d1,(a0)		;put first colour in last colour
		rts			;done!!!!
		



***************************************************
*** Datas					***
***************************************************

Copperlist:	dc.l	$01200000,$01220000,$01240000,$01260000
		dc.l	$01280000,$012a0000,$012c0000,$012e0000
		dc.l	$01300000,$01320000,$01340000,$01360000
		dc.l	$01380000,$013a0000,$013c0000,$013e0000

		dc.l	$008e2c81,$00902bc1,$00920038,$009400d0
		dc.l	$01020000,$01040000,$01080000,$010a0000
		dc.l	$01000200,$01060000,$01fc0000

PlanePtrs:	dc.l	$00e00000,$00e20000,$00e40000,$00e60000
		dc.l	$00e80000,$00ea0000
		dc.l	$01003200

		dc.l	$01800000,$01820333,$01840555,$01860777
		dc.l	$01880999,$018a0bbb,$018c0ddd,$018e0fff




copst		dc.w	$3001,$fffe,$180,$000
		dc.w	$3101,$fffe,$180,$001
		dc.w	$3201,$fffe,$180,$002
		dc.w	$3301,$fffe,$180,$003
		dc.w	$3401,$fffe,$180,$004
		dc.w	$3501,$fffe,$180,$005
		dc.w	$3601,$fffe,$180,$006
		dc.w	$3701,$fffe,$180,$007
		dc.w	$3801,$fffe,$180,$008
		dc.w	$3901,$fffe,$180,$009
		dc.w	$3a01,$fffe,$180,$00a
		dc.w	$3b01,$fffe,$180,$00b
		dc.w	$3c01,$fffe,$180,$00c
		dc.w	$3d01,$fffe,$180,$00d
		dc.w	$3e01,$fffe,$180,$00e
		dc.w	$3f01,$fffe,$180,$00f
		dc.w	$4001,$fffe,$180,$00e
		dc.w	$4101,$fffe,$180,$00d
		dc.w	$4201,$fffe,$180,$00c
		dc.w	$4301,$fffe,$180,$00b
		dc.w	$4401,$fffe,$180,$00a
		dc.w	$4501,$fffe,$180,$009
		dc.w	$4601,$fffe,$180,$008
		dc.w	$4701,$fffe,$180,$007
		dc.w	$4801,$fffe,$180,$006
		dc.w	$4901,$fffe,$180,$005
		dc.w	$4a01,$fffe,$180,$004
		dc.w	$4b01,$fffe,$180,$003
		dc.w	$4c01,$fffe,$180,$002
		dc.w	$4d01,$fffe,$180,$001
		dc.w	$4e01,$fffe,$180,$000
		dc.w	$4f01,$fffe,$180,$100
		dc.w	$5001,$fffe,$180,$200
		dc.w	$5101,$fffe,$180,$300
		dc.w	$5201,$fffe,$180,$400
		dc.w	$5301,$fffe,$180,$500
		dc.w	$5401,$fffe,$180,$600
		dc.w	$5501,$fffe,$180,$700
		dc.w	$5601,$fffe,$180,$800
		dc.w	$5701,$fffe,$180,$900
		dc.w	$5801,$fffe,$180,$a00
		dc.w	$5901,$fffe,$180,$b00
		dc.w	$5a01,$fffe,$180,$c00
		dc.w	$5b01,$fffe,$180,$d00
		dc.w	$5c01,$fffe,$180,$e00
		dc.w	$5d01,$fffe,$180,$f00
		dc.w	$5e01,$fffe,$180,$e00
		dc.w	$5f01,$fffe,$180,$d00
		dc.w	$6001,$fffe,$180,$c00
		dc.w	$6101,$fffe,$180,$b00
		dc.w	$6201,$fffe,$180,$a00
		dc.w	$6301,$fffe,$180,$900
		dc.w	$6401,$fffe,$180,$800
		dc.w	$6501,$fffe,$180,$700
		dc.w	$6601,$fffe,$180,$600
		dc.w	$6701,$fffe,$180,$500
		dc.w	$6801,$fffe,$180,$400
		dc.w	$6901,$fffe,$180,$300
		dc.w	$6a01,$fffe,$180,$200
		dc.w	$6b01,$fffe,$180,$100
		dc.w	$6c01,$fffe,$180,$000
		dc.w	$6d01,$fffe,$180,$010
		dc.w	$6e01,$fffe,$180,$020
		dc.w	$6f01,$fffe,$180,$030
		dc.w	$7001,$fffe,$180,$040
		dc.w	$7101,$fffe,$180,$050
		dc.w	$7201,$fffe,$180,$060
		dc.w	$7301,$fffe,$180,$070
		dc.w	$7401,$fffe,$180,$080
		dc.w	$7501,$fffe,$180,$090
		dc.w	$7601,$fffe,$180,$0a0
		dc.w	$7701,$fffe,$180,$0b0
		dc.w	$7801,$fffe,$180,$0c0
		dc.w	$7901,$fffe,$180,$0d0
		dc.w	$7a01,$fffe,$180,$0e0
		dc.w	$7b01,$fffe,$180,$0f0
		dc.w	$7c01,$fffe,$180,$0e0
		dc.w	$7d01,$fffe,$180,$0d0
		dc.w	$7e01,$fffe,$180,$0c0
		dc.w	$7f01,$fffe,$180,$0b0
		dc.w	$8001,$fffe,$180,$0a0
		dc.w	$8101,$fffe,$180,$090
		dc.w	$8201,$fffe,$180,$080
		dc.w	$8301,$fffe,$180,$070
		dc.w	$8401,$fffe,$180,$060
		dc.w	$8501,$fffe,$180,$050
		dc.w	$8601,$fffe,$180,$040
		dc.w	$8701,$fffe,$180,$030
		dc.w	$8801,$fffe,$180,$020
		dc.w	$8901,$fffe,$180,$010
		dc.w	$8a01,$fffe,$180,$000
		dc.w	$8b01,$fffe,$180,$011
		dc.w	$8c01,$fffe,$180,$022
		dc.w	$8d01,$fffe,$180,$033
		dc.w	$8e01,$fffe,$180,$044
		dc.w	$8f01,$fffe,$180,$055
		dc.w	$9001,$fffe,$180,$066
		dc.w	$9101,$fffe,$180,$077
		dc.w	$9201,$fffe,$180,$088
		dc.w	$9301,$fffe,$180,$099
		dc.w	$9401,$fffe,$180,$0aa
		dc.w	$9501,$fffe,$180,$0bb
		dc.w	$9601,$fffe,$180,$0cc
		dc.w	$9701,$fffe,$180,$0dd
		dc.w	$9801,$fffe,$180,$0ee
		dc.w	$9901,$fffe,$180,$0ff
		dc.w	$9a01,$fffe,$180,$0ee
		dc.w	$9b01,$fffe,$180,$0dd
		dc.w	$9c01,$fffe,$180,$0cc
		dc.w	$9d01,$fffe,$180,$0bb
		dc.w	$9e01,$fffe,$180,$0aa
		dc.w	$9f01,$fffe,$180,$099
		dc.w	$a001,$fffe,$180,$088
		dc.w	$a101,$fffe,$180,$077
		dc.w	$a201,$fffe,$180,$066
		dc.w	$a301,$fffe,$180,$055
		dc.w	$a401,$fffe,$180,$044
		dc.w	$a501,$fffe,$180,$033
		dc.w	$a601,$fffe,$180,$022
		dc.w	$a701,$fffe,$180,$011
		dc.w	$a801,$fffe,$180,$000
		dc.w	$a901,$fffe,$180,$110
		dc.w	$aa01,$fffe,$180,$220
		dc.w	$ab01,$fffe,$180,$330
		dc.w	$ac01,$fffe,$180,$440
		dc.w	$ad01,$fffe,$180,$550
		dc.w	$ae01,$fffe,$180,$660
		dc.w	$af01,$fffe,$180,$770
		dc.w	$b001,$fffe,$180,$880
		dc.w	$b101,$fffe,$180,$990
		dc.w	$b201,$fffe,$180,$aa0
		dc.w	$b301,$fffe,$180,$bb0
		dc.w	$b401,$fffe,$180,$cc0
		dc.w	$b501,$fffe,$180,$dd0
		dc.w	$b601,$fffe,$180,$ee0
		dc.w	$b701,$fffe,$180,$ff0
		dc.w	$b801,$fffe,$180,$ee0
		dc.w	$b901,$fffe,$180,$dd0
		dc.w	$ba01,$fffe,$180,$cc0
		dc.w	$bb01,$fffe,$180,$bb0
		dc.w	$bc01,$fffe,$180,$aa0
		dc.w	$bd01,$fffe,$180,$990
		dc.w	$be01,$fffe,$180,$880
		dc.w	$bf01,$fffe,$180,$770
		dc.w	$c001,$fffe,$180,$660
		dc.w	$c101,$fffe,$180,$550
		dc.w	$c201,$fffe,$180,$440
		dc.w	$c301,$fffe,$180,$330
		dc.w	$c401,$fffe,$180,$220
		dc.w	$c501,$fffe,$180,$110
		dc.w	$c601,$fffe,$180,$000
		dc.w	$c701,$fffe,$180,$111
		dc.w	$c801,$fffe,$180,$222
		dc.w	$c901,$fffe,$180,$333
		dc.w	$ca01,$fffe,$180,$444
		dc.w	$cb01,$fffe,$180,$555
		dc.w	$cc01,$fffe,$180,$666
		dc.w	$cd01,$fffe,$180,$777
		dc.w	$ce01,$fffe,$180,$888
		dc.w	$cf01,$fffe,$180,$999
		dc.w	$d001,$fffe,$180,$aaa
		dc.w	$d101,$fffe,$180,$bbb
		dc.w	$d201,$fffe,$180,$ccc
		dc.w	$d301,$fffe,$180,$ddd
		dc.w	$d401,$fffe,$180,$eee
		dc.w	$d501,$fffe,$180,$fff
		dc.w	$d601,$fffe,$180,$eee
		dc.w	$d701,$fffe,$180,$ddd
		dc.w	$d801,$fffe,$180,$ccc
		dc.w	$d901,$fffe,$180,$bbb
		dc.w	$da01,$fffe,$180,$aaa
		dc.w	$db01,$fffe,$180,$999
		dc.w	$dc01,$fffe,$180,$888
		dc.w	$dd01,$fffe,$180,$777
		dc.w	$de01,$fffe,$180,$666
		dc.w	$df01,$fffe,$180,$555
		dc.w	$e001,$fffe,$180,$444
		dc.w	$e101,$fffe,$180,$333
		dc.w	$e201,$fffe,$180,$222
		dc.w	$e301,$fffe,$180,$111
		dc.w	$e401,$fffe,$180,$000
		dc.w	$e501,$fffe,$180,$101
		dc.w	$e601,$fffe,$180,$202
		dc.w	$e701,$fffe,$180,$303
		dc.w	$e801,$fffe,$180,$404
		dc.w	$e901,$fffe,$180,$505
		dc.w	$ea01,$fffe,$180,$606
		dc.w	$eb01,$fffe,$180,$707
		dc.w	$ec01,$fffe,$180,$808
		dc.w	$ed01,$fffe,$180,$909
		dc.w	$ee01,$fffe,$180,$a0a
		dc.w	$ef01,$fffe,$180,$b0b
		dc.w	$f001,$fffe,$180,$c0c
		dc.w	$f101,$fffe,$180,$d0d
		dc.w	$f201,$fffe,$180,$d0d
		dc.w	$f301,$fffe,$180,$c0c
		dc.w	$f401,$fffe,$180,$b0b
		dc.w	$f501,$fffe,$180,$a0a
		dc.w	$f601,$fffe,$180,$909
		dc.w	$f701,$fffe,$180,$808
		dc.w	$f801,$fffe,$180,$707
		dc.w	$f901,$fffe,$180,$606
		dc.w	$fa01,$fffe,$180,$505
		dc.w	$fb01,$fffe,$180,$404
		dc.w	$fc01,$fffe,$180,$303
		dc.w	$fd01,$fffe,$180,$202
		dc.w	$fe01,$fffe,$180,$101
		dc.w	$ff01,$fffe,$180,$000
		







		dc.l	-2		;end copperlist


dmasav:		dc.w	0
adksav:		dc.w	0
intsav:		dc.w	0
GFXlib:		dc.b	"graphics.library"
		even
GFXBase:	ds.l	2
		even

		section	b,bss_c

planes		ds.b	40*256*3

Level3Vector	equ $6c
SysCop1		equ $26
_ciaa:		equ $bfe001
_ciab:		equ $bfd000
left		equ 6

_custom:	equ $dff000
bltddat:	equ $000
dmaconr:	equ $002
vposr:		equ $004
vhposr:		equ $006
dskdatr:	equ $008
joy0dat:	equ $00a
joy1dat:	equ $00c
clxdat:		equ $00e
adkconr:	equ $010
pot0dat:	equ $012
pot1dat:	equ $014
potgor:		equ $016
serdatr:	equ $018
dskbytr:	equ $01a
intenar:	equ $01c
intreqr:	equ $01e
dskpth:		equ $020
dskptl:		equ $022
dsklen:		equ $024
dskdat:		equ $026
refptr:		equ $028
vposw:		equ $02a
vhposw:		equ $02c
copcon:		equ $02e
serdat:		equ $030
serper:		equ $032
potgo:		equ $034
joytest:	equ $036
strequ:		equ $038
strvbl:		equ $03a
strhor:		equ $03c
strlong:	equ $03e
bltcon0:	equ $040
bltcon1:	equ $042
bltafwm:	equ $044
bltalwm:	equ $046
bltcpth:	equ $048
bltcptl:	equ $04a
bltbpth:	equ $04c
bltbptl:	equ $04e
bltapth:	equ $050
bltaptl:	equ $052
bltdpth:	equ $054
bltdptl:	equ $056
bltsize:	equ $058
bltcmod:	equ $060
bltbmod:	equ $062
bltamod:	equ $064
bltdmod:	equ $066
bltcdat:	equ $070
bltbdat:	equ $072
bltadat:	equ $074
dsksync:	equ $07e
cop1lch:	equ $080
cop1lcl:	equ $082
cop2lch:	equ $084
cop2lcl:	equ $086
copjmp1:	equ $088
copjmp2:	equ $08a
copins:		equ $08c
diwstrt:	equ $08e
diwstop:	equ $090
ddfstrt:	equ $092
ddfstop:	equ $094
dmacon:		equ $096
clxcon:		equ $098
intena:		equ $09a
intreq:		equ $09c
adkcon:		equ $09e
aud0pth:	equ $0a0
aud0ptl:	equ $0a2
aud0len:	equ $0a4
aud0per:	equ $0a6
aud0vol:	equ $0a8
aud0dat:	equ $0aa
aud1pth:	equ $0b0
aud1ptl:	equ $0b2
aud1len:	equ $0b4
aud1per:	equ $0b6
aud1vol:	equ $0b8
aud1dat:	equ $0ba
aud2pth:	equ $0c0
aud2ptl:	equ $0c2
aud2len:	equ $0c4
aud2per:	equ $0c6
aud2vol:	equ $0c8
aud2dat:	equ $0ca
aud3pth:	equ $0d0
aud3ptl:	equ $0d2
aud3len:	equ $0d4
aud3per:	equ $0d6
aud3vol:	equ $0d8
aud3dat:	equ $0da
bpl1pth:	equ $0e0
bpl1ptl:	equ $0e2
bpl2pth:	equ $0e4
bpl2ptl:	equ $0e6
bpl3pth:	equ $0e8
bpl3ptl:	equ $0ea
bpl4pth:	equ $0ec
bpl4ptl:	equ $0ee
bpl5pth:	equ $0f0
bpl5ptl:	equ $0f2
bpl6pth:	equ $0f4
bpl6ptl:	equ $0f6
bplcon0:	equ $100
bplcon1:	equ $102
bplcon2:	equ $104
bpl1mod:	equ $108
bpl2mod:	equ $10a
bpl1dat:	equ $110
bpl2dat:	equ $112
bpl3dat:	equ $114
bpl4dat:	equ $116
bpl5dat:	equ $118
bpl6dat:	equ $11a
spr0pth:	equ $120
spr0ptl:	equ $122
spr1pth:	equ $124
spr1ptl:	equ $126
spr2pth:	equ $128
spr2ptl:	equ $12a
spr3pth:	equ $12c
spr3ptl:	equ $12e
spr4pth:	equ $130
spr4ptl:	equ $132
spr5pth:	equ $134
spr5ptl:	equ $136
spr6pth:	equ $138
spr6ptl:	equ $13a
spr7pth:	equ $13c
spr7ptl:	equ $13e
spr0pos:	equ $140
spr0ctl:	equ $142
spr0data:	equ $144
spr0datb:	equ $146
spr1pos:	equ $148
spr1ctl:	equ $14a
spr1data:	equ $14c
spr1datb:	equ $14e
spr2pos:	equ $150
spr2ctl:	equ $152
spr2data:	equ $154
spr2datb:	equ $156
spr3pos:	equ $158
spr3ctl:	equ $15a
spr3data:	equ $15c
spr3datb:	equ $15e
spr4pos:	equ $160
spr4ctl:	equ $162
spr4data:	equ $164
spr4datb:	equ $166
spr5pos:	equ $168
spr5ctl:	equ $16a
spr5data:	equ $16c
spr5datb:	equ $16e
spr6pos:	equ $170
spr6ctl:	equ $172
spr6data:	equ $174
spr6datb:	equ $176
spr7pos:	equ $178
spr7ctl:	equ $17a
spr7data:	equ $17c
spr7datb:	equ $17e
color00:	equ $180
color01:	equ $182
color02:	equ $184
color03:	equ $186
color04:	equ $188
color05:	equ $18a
color06:	equ $18c
color07:	equ $18e
color08:	equ $190
color09:	equ $192
color10:	equ $194
color11:	equ $196
color12:	equ $198
color13:	equ $19a
color14:	equ $19c
color15:	equ $19e
color16:	equ $1a0
color17:	equ $1a2
color18:	equ $1a4
color19:	equ $1a6
color20:	equ $1a8
color21:	equ $1aa
color22:	equ $1ac
color23:	equ $1ae
color24:	equ $1b0
color25:	equ $1b2
color26:	equ $1b4
color27:	equ $1b6
color28:	equ $1b8
color29:	equ $1ba
color30:	equ $1bc
color31:	equ $1be
open:		equ -30
close:		equ -36
read:		equ -42
write:		equ -48
input:		equ -54
output:		equ -60
seek:		equ -66
deletefile:	equ -72
rename:		equ -78
lock:		equ -84
unlock:		equ -90
duplock:	equ -96
examine:	equ -102
exnext:		equ -108
info:		equ -114
createdir:	equ -120
currentdir:	equ -126
ioErr:		equ -132
CreateProc:	equ -138
exit:		equ -144
loadseg:	equ -150
unloadseg:	equ -156
getpacket:	equ -162
queupacket:	equ -168
deviceproc:	equ -174
setcomment:	equ -180
setprotection:	equ -186
datestamp:	equ -192
delay:		equ -198
waitforchar:	equ -204
parentdir:	equ -210
IsInteractive:	equ -216
Execute:	equ -222

AbsExecBase:	equ 4
forbid		equ -132
permit		equ -138
allocmem:	equ -198
freemem:	equ -210
getmsg:		equ -372
replymsg:	equ -378
waitport:	equ -384
closelibrary:	equ -414
opendevice:	equ -444
closedevice:	equ -450
doio:		equ -456
oldopenlibrary	equ -408
openlibrary:	equ -552

