; -----------------------------------------------------------------------------
; Procedure:	ChunkyToPlanar
; Function:	Convert chunky to planar
; In:
;	none
; Out:
;	none
; -----------------------------------------------------------------------------

CONVERT_8_PIXELS MACRO
		move.l	(a0)+,d0		; 12
		move.l	(a0)+,d1		; 12
		move.l	d0,d2			;  4
		and.l	d5,d2			;  8
		eor.l	d2,d0			;  8
		move.l	d1,d3			;  4
		and.l	d5,d3			;  8
		eor.l	d3,d1			;  8
		lsl.l	#4,d2			; 16
		or.l	d3,d2			;  8
		lsr.l	#4,d1			; 16
		or.l	d1,d0			;  8
		move.l	d2,d3			;  4
		and.l	d7,d3			;  8
		move.w	d3,d1			;  4
		clr.w	d3			;  4
		lsl.l	#2,d3			; 12
		lsr.w	#2,d1			; 10
		or.w	d1,d3			;  4
		swap	d2			;  4
		and.l	d7,d2			;  8
		or.l	d2,d3			;  8
		move.l	d0,d1			;  4
		and.l	d7,d1			;  8
		move.w	d1,d2			;  4
		clr.w	d1			;  4
		lsl.l	#2,d1			; 12
		lsr.w	#2,d2			; 10
		or.w	d2,d1			;  4
		swap	d0			;  4
		and.l	d7,d0			;  8
		or.l	d0,d1			;  8
		move.l	d1,d2			;  4
		lsr.l	#7,d2			; 22
		move.l	d1,d0			;  4
		and.l	d6,d0			;  8
		eor.l	d0,d1			;  8
		move.l	d2,d4			;  4
		and.l	d6,d4			;  8
		eor.l	d4,d2			;  8
		or.l	d4,d1			;  8
		lsr.l	#1,d1			; 10

		move.b	d1,3*PLANE_SIZE(a3)	; 12
		swap	d1			;  4
		move.b	d1,1*PLANE_SIZE(a3)	; 12

		or.l	d0,d2			;  8

		move.b	d2,2*PLANE_SIZE(a3)	; 12
		swap	d2			;  4
		move.b	d2,(a3)+		;  8

		move.l	d3,d2			;  4
		lsr.l	#7,d2			; 22
		move.l	d3,d0			;  4
		and.l	d6,d0			;  8
		eor.l	d0,d3			;  8
		move.l	d2,d4			;  4
		and.l	d6,d4			;  8
		eor.l	d4,d2			;  8
		or.l	d4,d3			;  8
		lsr.l	#1,d3			; 10

		move.b	d3,3*PLANE_SIZE(a1)	; 12
		swap	d3			;  4
		move.b	d3,1*PLANE_SIZE(a1)	; 12

		or.l	d0,d2			;  8

		move.b	d2,2*PLANE_SIZE(a1)	; 12
		swap	d2			;  4
		move.b	d2,(a1)+		;  8
						;=532/8=66.5 cycles per pixel
		ENDM


WAIT_BLITTER	MACRO
wb\@		btst.b	#6,(a6)
		bne.b	wb\@
		ENDM


COMPARE_16_PIXELS	MACRO

		move.w	a4,(a5)

		ENDM


ctp_Skip0	COMPARE_16_PIXELS

		lea	16(a0),a0
		addq.l	#2,a3
		addq.l	#2,a1

		cmpa.l	a2,a1
		bne.b	ctp_Loop1

		rts

ChunkyToPlanar	movea.l	ChunkyMap(pc),a0
		movea.l	VRAM_Render(pc),a1
		lea	PLANE_SIZE(a1),a2
		lea	4*PLANE_SIZE(a1),a3

		move.l	#$0f0f0f0f,d5
		move.l	#$55555555,d6
		move.l	#$3333cccc,d7

		lea	CUSTOM+2,a6
		lea	bltsize-2(a6),a5
		movea.w	#(1<<6)+8,a4

		WAIT_BLITTER
		move.l	a0,bltapt-2(a6)
		move.l	ChunkyTmp1(pc),bltcpt-2(a6)
		move.l	#$0a5a0000,bltcon0-2(a6)
		move.l	#$ffffffff,bltafwm-2(a6)
		move.w	#0,bltamod-2(a6)
		move.w	#0,bltcmod-2(a6)
		COMPARE_16_PIXELS

ctp_Loop1	WAIT_BLITTER

ctp_Loop0	btst.b	#5,(a6)
		bne.w	ctp_Skip0

		COMPARE_16_PIXELS

		CONVERT_8_PIXELS
		CONVERT_8_PIXELS

		cmpa.l	a2,a1
		bne	ctp_Loop0

		rts
