        INCDIR  INCLUDE:
	INCLUDE	"exec/types.i"
	INCLUDE	"intuition/screens.i"
	INCLUDE	"intuition/intuition.i"

	INCLUDE	"EE_view.i"

	XDEF	_C2P_FI
	XDEF	_ClearChunky320x200

	XDEF	_FadeInSupport1
	XDEF	_FadeInSupport2
	XDEF	_FadeOutSupport1
	XDEF	_FadeOutSupport2
	XDEF	_DissolveSupport1
	XDEF	_DissolveSupport2


WIDTH	EQU	320
HEIGHT	EQU	200
WIDTH_B	EQU	WIDTH>>3
PLANE_SIZE	EQU	(WIDTH>>3)*HEIGHT

WORD_MERGE	MACRO
	move.l	\2,\3
	move.w	\1,\2
	swap	\2
	move.w	\2,\1
	move.w	\3,\2
	ENDM
		
MERGE	MACRO
	move.l	\5,\3
	move.l	\5,\4
	and.l	\1,\3
	and.l	\2,\4
	eor.l	\3,\1
	eor.l	\4,\2
	IFEQ	\6-1
	add.l	\3,\3
	ELSE
	lsl.l	#\6,\3
	ENDC
	lsr.l	#\6,\2
	or.l	\2,\1
	or.l	\4,\3
	ENDM

C2P_LOOP1	MACRO
	movem.l	(a0),d0-d7

	WORD_MERGE	d0,d4,a6
	WORD_MERGE	d1,d5,a6
	WORD_MERGE	d2,d6,a6
	WORD_MERGE	d3,d7,a6

	move.l	d7,a6
	move.l	d6,a5

	MERGE	d0,d2,d6,d7,a3,8
	MERGE	d1,d3,d7,d2,a3,8

	MERGE	d0,d1,d2,d3,a4,4
	MERGE	d6,d7,d3,d1,a4,4

	move.l	d0,(a0)+
	move.l	d2,(a0)+
	move.l	d6,(a0)+
	move.l	d3,(a0)+

	move.l	a6,d7
	move.l	a5,d6

	MERGE	d4,d6,d0,d1,a3,8
	MERGE	d5,d7,d1,d6,a3,8

	MERGE	d4,d5,d6,d7,a4,4
	MERGE	d0,d1,d7,d5,a4,4

	move.l	d4,(a0)+
	move.l	d6,(a0)+
	move.l	d0,(a0)+
	move.l	d7,(a0)+

	ENDM

C2P_LOOP2	MACRO
	move.l	(a0),d0
	move.l	(a0,8.w),d1
	move.l	(a0,16.w),d2
	move.l	(a0,24.w),d3

	MERGE	d0,d2,d6,d7,a5,2
	MERGE	d1,d3,d7,d2,a5,2

	MERGE	d0,d1,d2,d3,a6,1
	MERGE	d6,d7,d3,d1,a6,1

	move.l	d0,(a1,WIDTH_B*7.w)
	move.l	d2,(a1,WIDTH_B*6.w)
	move.l	d6,(a1,WIDTH_B*5.w)
	move.l	d3,(a1,WIDTH_B*4.w)

	move.l	(a0,4.w),d0
	move.l	(a0,12.w),d1
	move.l	(a0,20.w),d2
	move.l	(a0,28.w),d3

	MERGE	d0,d2,d6,d7,a5,2
	MERGE	d1,d3,d7,d2,a5,2

	MERGE	d0,d1,d2,d3,a6,1
	MERGE	d6,d7,d3,d1,a6,1

	move.l	d0,(a1,WIDTH_B*3.w)
	move.l	d2,(a1,WIDTH_B*2.w)
	move.l	d6,(a1,WIDTH_B*1.w)
	move.l	d3,(a1)+

	lea	(a0,32.w),a0

	ENDM


	SECTION	EE_view,CODE

; a0.l	pointer to DView

_C2P_FI
	movem.l	d2-d7/a2-a6,-(sp)

	move.l	(a0,dv_RenderRP),a1
	move.l	(a1,rp_BitMap),a1
	move.l	(a1,bm_Planes),a1
	move.l	(a0,dv_Chunky),a0
	move.l	a0,a2
	add.l	#PLANE_SIZE*8,a2

	move.l	#$00ff00ff,a3
	move.l	#$0f0f0f0f,a4

C2P_FI_Loop1
	C2P_LOOP1
	cmp.l	a0,a2
	bne.w	C2P_FI_Loop1

	sub.l	#PLANE_SIZE*8,a0
	move.l	#$33333333,a5
	move.l	#$55555555,a6

	move.w	#HEIGHT-1,d5
C2P_FI_Loop3
	moveq	#WIDTH/32-1,d4
C2P_FI_Loop2
	C2P_LOOP2
	dbra	d4,C2P_FI_Loop2

	lea	(a1,WIDTH_B*7.w),a1

	dbra	d5,C2P_FI_Loop3

	movem.l	(sp)+,d2-d7/a2-a6
	rts



_ClearChunky320x200
	movem.l	d2-d7/a2-a6,-(sp)

	move.l	(a0,dv_Chunky),a6
	lea	(a6,320*200.l),a6

	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	moveq	#0,d3
	moveq	#0,d4
	moveq	#0,d5
	moveq	#0,d6
	suba.l	a0,a0
	suba.l	a1,a1
	suba.l	a2,a2
	suba.l	a3,a3
	suba.l	a4,a4
	suba.l	a5,a5

	move.w	#20-1,d7
CC320x200_Loop
	REPT	61
	movem.l	d0-d6/a0-a5,-(a6)
	ENDR

	dbra	d7,CC320x200_Loop

	REPT	10
	movem.l	d0-d6/a0-a5,-(a6)
	ENDR

	movem.l	d0-d6/a0-a2,-(a6)

	movem.l	(sp)+,d2-d7/a2-a6
	rts


_FadeInSupport1
		movem.l	d2-d7/a2-a6,-(sp)

		lsr.l	#1,d0
		lsr.l	#1,d1
		lsr.l	#1,d2

		move.l	(a1)+,d7
		swap	d7
		subq.w	#1,d7
FIS1_Loop
		move.l	(a1)+,d4
		lsr.l	#1,d4
		sub.l	d0,d4
		divs.l	d3,d4
		move.l	d4,(a0)+

		move.l	(a1)+,d4
		lsr.l	#1,d4
		sub.l	d1,d4
		divs.l	d3,d4
		move.l	d4,(a0)+

		move.l	(a1)+,d4
		lsr.l	#1,d4
		sub.l	d2,d4
		divs.l	d3,d4
		move.l	d4,(a0)+

		dbra	d7,FIS1_Loop

		movem.l	(sp)+,d2-d7/a2-a6
		rts


_FadeInSupport2
		movem.l	d2-d7/a2-a6,-(sp)

		lsr.l	#1,d0
		lsr.l	#1,d1
		lsr.l	#1,d2

		move.l	(a1)+,d7
		swap	d7
		subq.w	#1,d7
FIS2_Loop
		move.l	(a0)+,d4
		muls.l	d3,d4
		add.l	d0,d4
		add.l	d4,d4
		move.l	d4,(a1)+

		move.l	(a0)+,d4
		muls.l	d3,d4
		add.l	d1,d4
		add.l	d4,d4
		move.l	d4,(a1)+

		move.l	(a0)+,d4
		muls.l	d3,d4
		add.l	d2,d4
		add.l	d4,d4
		move.l	d4,(a1)+

		dbra	d7,FIS2_Loop

		movem.l	(sp)+,d2-d7/a2-a6
		rts


_FadeOutSupport1
		movem.l	d2-d7/a2-a6,-(sp)

		lsr.l	#1,d0
		lsr.l	#1,d1
		lsr.l	#1,d2

		move.l	(a1)+,d7
		swap	d7
		subq.w	#1,d7
FOS1_Loop
		move.l	(a1)+,d4
		lsr.l	#1,d4
		sub.l	d0,d4
		neg.l	d4
		divs.l	d3,d4
		move.l	d4,(a0)+

		move.l	(a1)+,d4
		lsr.l	#1,d4
		sub.l	d1,d4
		neg.l	d4
		divs.l	d3,d4
		move.l	d4,(a0)+

		move.l	(a1)+,d4
		lsr.l	#1,d4
		sub.l	d2,d4
		neg.l	d4
		divs.l	d3,d4
		move.l	d4,(a0)+

		dbra	d7,FOS1_Loop

		movem.l	(sp)+,d2-d7/a2-a6
		rts


_FadeOutSupport2
		movem.l	d2-d7/a2-a6,-(sp)

		addq.l	#4,a2

		move.l	(a1)+,d7
		swap	d7
		subq.w	#1,d7
FOS2_Loop
		move.l	(a2)+,d4
		lsr.l	#1,d4
		move.l	(a0)+,d5
		muls.l	d3,d5
		add.l	d5,d4
		add.l	d4,d4
		move.l	d4,(a1)+

		move.l	(a2)+,d4
		lsr.l	#1,d4
		move.l	(a0)+,d5
		muls.l	d3,d5
		add.l	d5,d4
		add.l	d4,d4
		move.l	d4,(a1)+

		move.l	(a2)+,d4
		lsr.l	#1,d4
		move.l	(a0)+,d5
		muls.l	d3,d5
		add.l	d5,d4
		add.l	d4,d4
		move.l	d4,(a1)+

		dbra	d7,FOS2_Loop

		movem.l	(sp)+,d2-d7/a2-a6
		rts


_DissolveSupport1
		movem.l	d2-d7/a2-a6,-(sp)

		addq.l	#4,a2

		move.l	(a1)+,d7
		swap	d7
		subq.w	#1,d7
DS1_Loop
		move.l	(a2)+,d0
		lsr.l	#1,d0
		move.l	(a1)+,d1
		lsr.l	#1,d1
		sub.l	d1,d0
		divs.l	d3,d0
		move.l	d0,(a0)+

		move.l	(a2)+,d0
		lsr.l	#1,d0
		move.l	(a1)+,d1
		lsr.l	#1,d1
		sub.l	d1,d0
		divs.l	d3,d0
		move.l	d0,(a0)+

		move.l	(a2)+,d0
		lsr.l	#1,d0
		move.l	(a1)+,d1
		lsr.l	#1,d1
		sub.l	d1,d0
		divs.l	d3,d0
		move.l	d0,(a0)+

		dbra	d7,DS1_Loop

		movem.l	(sp)+,d2-d7/a2-a6
		rts


_DissolveSupport2
		movem.l	d2-d7/a2-a6,-(sp)

		addq.l	#4,a2

		move.l	(a1)+,d7
		swap	d7
		subq.w	#1,d7
DS2_Loop
		move.l	(a2)+,d0
		lsr.l	#1,d0
		move.l	(a0)+,d1
		muls.l	d3,d1
		add.l	d1,d0
		add.l	d0,d0
		move.l	d0,(a1)+

		move.l	(a2)+,d0
		lsr.l	#1,d0
		move.l	(a0)+,d1
		muls.l	d3,d1
		add.l	d1,d0
		add.l	d0,d0
		move.l	d0,(a1)+

		move.l	(a2)+,d0
		lsr.l	#1,d0
		move.l	(a0)+,d1
		muls.l	d3,d1
		add.l	d1,d0
		add.l	d0,d0
		move.l	d0,(a1)+

		dbra	d7,DS2_Loop

		movem.l	(sp)+,d2-d7/a2-a6
		rts


	END
