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

		INCLUDE	"SH_view.i"

		XDEF	_C2P_FI
		XDEF	_ClearChunky320x200

		XDEF	_FadeInSupport1
		XDEF	_FadeInSupport2
		XDEF	_FadeOutSupport1
		XDEF	_FadeOutSupport2

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	SH_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
                lea     WIDTH*28(a1),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/a0-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/a0-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

		END
