dmacon=		$96
vposr=		$4
cop1lc=		$80
cop2lc=		$84
copjmp1=	$88
bplcon0=	$100
bplcon1=	$102
bplcon2=	$104
bpl1pth=	$0e0
bpl1ptl=	$0e2
bpl1mod=	$108
bpl2mod=	$10a
diwstrt=	$08e
diwstop=	$090
ddfstrt=	$092
ddfstop=	$094
openlibrary=	-30-522
forbid=		-30-102
permit=		-30-108
allocmem=	-30-168
freemem=	-30-180
startlist=	38
execbase=	4
numplanes=	3
planewith=	40
planehigh=	224
planesize=	planewith*planehigh
allocsize=	planesize*numplanes
CLsize=		7000			;(numpln*8)+4
chip=		2
clear=		chip+$10000

ccount:		dc.w	0,1
picplanes:	dc.w	3
picwith:	dc.w	36
pichigh:	dc.w	132
lineofset:	dc.w	0
picadr:		dc.l	0		;sourc. adress
showadr:	dc.l	0		;dest. adress
picsize:	dc.l	0
highofset:	dc.l	0
piccy:		blk.b	14272	;Størrelse på bildet.

;Bildet kan bli tegnet med hvilket som helst tegneprogram
;som lagrer bildene som IFF filer (DP II er fint).
;Bruk IFF CONVERTOR, og LOAD inn IFF filen,
;save den igjen som BITPLANES.
;PS...Paletten skal ligge til slutt i den nye fila.
;Legg størrelsen på BITPLANE fila inn under PICCY
;Assembler dette programmet, skriv så RI.
;FILENAME = navnet på tegningen.
;BEGIN    = piccy
;END      = [RETURN]
;Start programmet med J START

piccyend:
	even

start:
	jsr	initialize
	move.l	#piccy,picadr
	move.l	planeadr,showadr
	add.l	#402,showadr
	jsr	showpic
	jsr	setcolors
s1:	btst	#6,$bfe001
	beq	stop
	jsr	waitvblank	;vent til vblank interupt
	jsr	newcopper	;scroll fargene i copperlista
	jmp	s1
stop:	jsr	shut_down
	rts

setcolors:
	move.l	#piccyend,a0
	sub.l	#16,a0		;2^(ant.planes+1)
	move.l	#$dff180,a1
	move.l	#15,d0
sc1:	move	(a0)+,(a1)+
	dbf	d0,sc1
	rts	

newcopper:
	move.l	cladr,a0
	add.l	#30,a0
	move.l	a0,a1
	add.l	#8,a1
	move	(a0),d0
	move.l	#$cc,d1
nc1:	move	(a1),(a0)
	add.l	#8,a1
	add.l	#8,a0
	dbf	d1,nc1
	move	d0,(a0)
	rts
	
waitvblank:				;wait for vblank
	move.l	$dff004,d0
	and.l	#$0001ff00,d0
	cmp.l	#$00001000,d0
	bne.s	waitvblank
	rts

showpic:
	clr.l	d0
	move	#planewith,d0
	muls	pichigh,d0
	move.l	d0,picsize
	move.l	#planesize,highofset
	move.l	picsize,d0
	sub.l	d0,highofset
	sub	#1,picplanes
	sub	#1,picwith
	sub	#1,pichigh
	move	#planewith,lineofset
	move	picwith,d0
	add	#1,d0
	sub	d0,lineofset
	move.l	showadr,a0
	move.l	picadr,a1
	move	picwith,d0
	move	pichigh,d1
	move	picplanes,d2
sp1:	move.b	(a1)+,(a0)+
	dbf	d0,sp1	
	move	picwith,d0
	add	lineofset,a0
	dbf	d1,sp1
	move	pichigh,d1
	add.l	highofset,a0
	dbf	d2,sp1
	rts


initialize:
	move.l	execbase,a6
	move.l	#allocsize,d0
	move.l	#clear,d1
	jsr	allocmem(a6)		;alloc mem for bplane
	move.l	d0,planeadr
	move.l	#clsize,d0
	moveq	#chip,d1
	jsr	allocmem(a6)		;alloc mem for CL
	move.l	d0,CLadr
					;Make the CopperList
	move.l	#numplanes,d4		;no of bitplanes -1
	sub.l	#1,d4
	move.l	d0,a0
	move.l	planeadr,d1
	move.w	#bpl1pth,d3
mCL:	move.w	d3,(a0)+
	addq.w	#2,d3
	swap	d1
	move.w	d1,(a0)+
	move.w	d3,(a0)+
	addq.w	#2,d3
	swap 	d1
	move.w	d1,(a0)+
	add.l	#planesize,d1
	dbf	d4,mCL

	lea	ccount,a1
	move.l	#$30,d0			;start pos
loop:	move	2(a1),d1
	add	d1,(a1)
	cmp	#$000f,(a1)
	bne	nomax
	move	#-1,2(a1)
nomax:	cmp	#$0000,(a1)
	bne	nomin
	move	#1,2(a1)
nomin:	move.b	d0,(a0)+
	move.b	#$0f,(a0)+
	move	#$fffe,(a0)+
	move	#$0180,(a0)+
	move	(a1),(a0)+
	add.l	#1,d0
	cmp.l	#$ff,d0
	bne	loop

	move.l	#$fffffffe,(a0)

	jsr	forbid(a6)		;DMA&tasksw off
	lea	$dff000,a5
	move.w	#$01e0,dmacon(a5)
	move.l	CLadr,cop1lc(a5)	;init CL
	clr.w	copjmp1(a5)
	move.w	#$3081,diwstrt(a5)	;init PlayField
	move.w	#$10c1,diwstop(a5)
	move.w	#$0038,ddfstrt(a5)
	move.w	#$00d0,ddfstop(a5)
	move.w	#%0011000000000000,bplcon0(a5)	;12-14=bplanes
	clr.w	bplcon1(a5)
	clr.w	bplcon2(a5)
	move.w	#0,bpl1mod(a5)
	move.w	#0,bpl2mod(a5)
	move.w	#$8180,dmacon(a5)
	rts

shut_down:
	move.l	#grname,a1
	clr.l	d0
	jsr	openlibrary(a6)
	move.l	d0,a4
	move.l	startlist(a4),cop1lc(a5)
	clr	copjmp1(a5)
	move.w	#$83e0,dmacon(a5)
	jsr	permit(a6)
	move.l	CLadr,a1
	move.l	#CLsize,d0
	jsr	freemem(a6)
	move.l	planeadr,a1
	move.l	#allocsize,d0
	jsr	freemem(a6)
	rts

CLadr:		dc.l	0
planeadr:	dc.l	0
test:		dc.l	0
GRname:		dc.b	'graphics.library',0
