
real	= 1

	include	work:sources/includes/hardware.inc

	dc.l	$58000
	IFEQ	real
	dc.l	$58000
	ELSEIF
	dc.l	0
	ENDC

	ORG	$58000

Start:
	IFNE	real
	bra	init
	bra	fadeout
	ENDC


init:
	lea	pic2(pc),a0	;Source start
	lea	pic1,a1	;Dest   start
	lea	pic2+7504,a2	;Source end
	bsr	repack

	lea	colorbuffer(pc),a0
	clr.l	(a0)+
	clr.l	(a0)+
	clr.l	(a0)+
	clr.l	(a0)+

	bsr	SetColors

	lea	custom,a5
	lea	Clist(pc),a0
	move.l	a0,cop1lch(a5)

	move.w	#$8380,dmacon(a5)

	move.l	#VBI,$6c
	move.w	#$c020,intena(a5)

	IFEQ	real

.waitmouse
	btst	#6,$bfe001
	bne	.waitmouse
	ELSEIF
	lea	Clist(pc),a0
	rts
	ENDC
fadeout:
	lea	pic2+7504-16(pc),a0
	clr.l	(a0)+
	clr.l	(a0)+
	clr.l	(a0)+
	clr.l	(a0)+

	move.w	#16,vbi_count

.wait_vbi:
	tst.w	vbi_count
	bne.s	.wait_vbi

	move.w	#$7fff,dmacon+custom
	move.w	#$7fff,dmacon+intena

	rts


VBI:	move.w	#$0020,intreq+custom
	movem.l	d0-d1/d7/a0-a1,-(sp)

	lea	colorbuffer(pc),a0
	lea	pic2+7504-16(pc),a1
	bsr	FadeColors
	bsr	SetColors

	tst.w	vbi_count
	beq.s	.dont_count
	subq.w	#1,vbi_count
.dont_count:
	movem.l	(sp)+,d0-d1/d7/a0-a1
	rte

vbi_count:	dc.w	0

SetColors:
	lea	colorbuffer(pc),a0
	lea	$dff180,a1
	moveq	#7,d7
.setcolors:
	move.w	(a0)+,(a1)+
	dbf	d7,.setcolors
	rts

FadeColors:
	moveq	#7,d7
.loop:
	move.w	(a0),d0		;Original-Wert
	move.w	(a1),d1
	and.w	#$f00,d0
	and.w	#$f00,d1
	cmp.w	d0,d1
	beq.s	.rok
	bgt.s	.radd
	sub	#$100,(a0)
	bra.s	.rok
.radd:
	add.w	#$100,(a0)
.rok:
	move.w	(a0),d0		;Original-Wert
	move.w	(a1),d1
	and.w	#$f0,d0
	and.w	#$f0,d1
	cmp.w	d0,d1
	beq.s	.gok
	bgt.s	.gadd
	sub	#$10,(a0)
	bra.s	.gok
.gadd:
	add.w	#$10,(a0)
.gok:
	move.w	(a0),d0		;Original-Wert
	move.w	(a1),d1
	and.w	#$f,d0
	and.w	#$f,d1
	cmp.w	d0,d1
	beq.s	.bok
	bgt.s	.badd
	sub	#$1,(a0)
	bra.s	.bok
.badd:
	add.w	#$1,(a0)
.bok:
	addq.l	#2,a0
	addq.l	#2,a1
	dbf	d7,.loop
	rts

colorbuffer:	ds.w	8

	;Speed_pack V1.0
	; 1990 by A.U.D.I.O.S Entertainment
	;benutzt den ByteRun1 Algorithmus zum Packen gleicher Bytes

	;18.12.1990 18:02

repack:
	moveq	#127,d7
.in:
	cmp.l	a0,a2
	ble.s	.out
	moveq	#0,d0
	move.b	(a1)+,d0
	bmi	.nofollow
	move.b	(a1)+,d1
.loop:
	move.b	d1,(a0)+
	dbf	d0,.loop
	bra.s	.in
.nofollow:
	and.b	d7,d0
.loop2:
	move.b	(a1)+,(a0)+
	dbf	d0,.loop2
	bra.s	.in
.out:
	rts

Clist:
	dc.w	$0100,$3000
	dc.w	$0092,$0050
	dc.w	$0094,$00b8
	dc.w	$008e,$7081
	dc.w	$0090,$d081
	dc.w	$0102,$0044
	dc.w	$0104,$0000

	dc.w	$00e0,pic2/$10000
	dc.w	$00e2,pic2&$ffff
	dc.w	$00e4,pic2/$10000
	dc.w	$00e6,(pic2+2496)&$ffff
	dc.w	$00e8,pic2/$10000
	dc.w	$00ea,(pic2+2496*2)&$ffff

	dc.w	$0108,-2
	dc.w	$010a,-2

	dc.w	$0180,$000
	dc.w	$ffff,$fffe


pic1:	incbin	"ram:rainbow.pack"

pic2:
