*******************************************************************************
* p0i 3.3.1
*******************************************************************************
* OUT	ccr	eq=ERROR, ne=OK
*******************************************************************************

p0i	movem.l	d0-d7/a0-a6,-(sp)
	lea.l	p0_PixFlNmsAdrs,a2
	lea.l	p0_IIs,a3
	bsr	LdPix
	beq.s	.exit

	lea.l	DsplDef,a0
	move.l	#p0_VDOMODE,(TCS_DD_VdoMode,a0)
	clr.l	(TCS_DD_UsrLst0,a0)
	clr.l	(TCS_DD_UsrLst1,a0)
	move.w	#p0_DSPLX0,(TCS_DD_DsplX0,a0)
	move.w	#p0_DSPLY0,(TCS_DD_DsplY0,a0)
	move.w	#p0_DSPLX1,(TCS_DD_DsplX1,a0)
	move.w	#p0_DSPLY1,(TCS_DD_DsplY1,a0)
	move.w	#p0_SCRWD,(TCS_DD_ScrWd,a0)
	move.w	#p0_SCRHT,(TCS_DD_ScrHt,a0)
	move.w	#p0_DSPLBRTNS,(TCS_DD_brtns,a0)
	move.w	#p0_GFXCTXT,(TCS_DD_GfxCtxt+TCS_GC_flgs,a0)
	CALLTCS	InitDspl
	move.l	d0,DI0Adr
	beq.s	.exit
	movea.l	d0,a0
	CALLTCS	ShwDspl	;ATN(retcode, too)
.exit	movem.l	(sp)+,d0-d7/a0-a6
	rts



*******************************************************************************
* p0m_MvPxl 8.2.8
*******************************************************************************
* INFO	mvs the big RGBx pxl brsh from rt to lf
* OUT	ccr	ne=cont
*******************************************************************************

p0m_MvPxl	movem.l	d0-d3/a0-a1/a6,-(sp)
	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	CALLTCS	ClrScr0

	movea.l	DI0Adr,a0
	movea.l	([p0_II_pxl.l],TCS_II_GfxAdr.w),a1
	move.w	PartCtr+2,d0
	subi.w	#p0_SCRWD-p0_PXLWD,d0
	neg.w	d0
	bmi.s	.SetZm	;if lf side reached...
	moveq.l	#0,d1
	move.w	#p0_PXLWD,d2
	move.w	#p0_PXLHT,d3
	CALLTCS	FastWrtBrsh0	;mv pxl

	movea.l	DI0Adr,a0
	CALLTCS	CPUFRPass0
	WTRSTLN	137
	bra.s	.exit

.SetZm	WTLMB	.exit
	move.l	#p0m_ZmPxl,(4,a5)	;chg part body
.exit	move.w	#0,ccr
	movem.l	(sp)+,d0-d3/a0-a1/a6
	rts



*******************************************************************************
* p0m_ZmPxl 7.1.8
*******************************************************************************
* IN	zms out the big RGBx pxl to a nrml one
* OUT	ccr	ne=cont
*******************************************************************************

p0m_ZmPxl	movem.l	d0-d2/a0-a2/a6,-(sp)
	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	CALLTCS	ClrScr0

	movea.l	DI0Adr,a0
	movea.l	([p0_II_pxl.l],TCS_II_GfxAdr.w),a1
	move.w	#p0_PXLWD,d0
	move.w	#p0_PXLHT,d1
	lea.l	p0_ZmVtxs,a2
	subq.w	#1,(4,a2)
	subq.w	#1,(6,a2)
	CALLTCS	FitBrsh0	;zm pxl

	movea.l	DI0Adr,a0
	CALLTCS	CPUFRPass0
	WTRSTLN	137

	cmpi.w	#1,p0_ZmVtxs+4	;retcode
	bhi.s	.exit	;if lf side not reached...

	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	CALLTCS	ClrScr0
	movea.l	DI0Adr,a0
	move.b	#-1,([TCS_DI_CSAdr,a0])	;drw sngl pxl
	CALLTCS	CPUFRPass0
	WTLMB	.exit
	move.l	#p0m_ClrScr,(4,a5)	;chg part body
.exit	move.w	#0,ccr
	movem.l	(sp)+,d0-d2/a0-a2/a6
	rts



*******************************************************************************
* p0m_ClrScr 4.0.5
*******************************************************************************
* IN	wps the whole scr with white & wts for LMB
* OUT	ccr	ne=cont
*******************************************************************************

p0m_ClrScr	movem.l	d0-d1/a0-a1/a6,-(sp)
	movea.l	DI0Adr,a0
	moveq.l	#-1,d0
	CALLTCS	ClrScr0
	movea.l	DI0Adr,a0
	CALLTCS	CPUFRPass0

	WTLMB	.exit
	move.l	#-1,PartCtr
	move.l	#p0m_ShwRGBxModes,(4,a5) ;chg part body	;chg part body; ATN(retcode, too)
.exit	movem.l	(sp)+,d0-d1/a0-a1/a6
	rts




*******************************************************************************
* p0m_ShwRGBxModes 4.0.5
*******************************************************************************
* INFO	shws all the RGBx modes
* OUT	ccr	ne=cont
*******************************************************************************

p0m_ShwRGBxModes	movem.l	d0-d3/a0-a2/a6,-(sp)
	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	CALLTCS	ClrScr0

	move.l	PartCtr,d4	;RGBx mode

	movea.l	DI0Adr,a0
	move.b	d4,d0
	move.w	#256,d1
	CALLTCS	SetRGBxMode

	lsl.l	#4,d4	;RGBx mode *16
	lea.l	(p0_xNs.l,d4.l),a2	;ptr to xNs
	lsr.l	#4,d4	;rest RGBx mode

	move.l	#255,d5
	move.w	#0,d6
	move.l	(a2)+,d7
	bsr	p0_DrwBigPxl

	move.l	#170,d5
	move.w	#p0_PXLHT,d6
	move.l	(a2)+,d7
	bsr	p0_DrwBigPxl

	move.l	#85,d5
	move.w	#p0_PXLHT+p0_SHRESPXLHT,d6
	move.l	(a2)+,d7
	bsr	p0_DrwBigPxl

	movea.l	DI0Adr,a0
	CALLTCS	CPUFRPass0

	WTLMB	.exit
	cmpi.l	#TCS_VM_last,d4
	blo.s	.exit
	movea.l	DI0Adr,a0
	movea.l	([p0_II_Alph.l],TCS_II_GfxAdr.w),a1
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.w	#p0_ALPHWD,d2
	move.w	#p0_ALPHHT,d3
	CALLTCS	FastWrtBrsh0	;wrt brsh to scr
	movea.l	DI0Adr,a0
	CALLTCS	CPUFRPass0	;mk it visible
	move.l	#-1,PartCtr
	move.l	#p0m_RmpPic,(4,a5)	;chg part body
.exit	move.w	#0,ccr
	movem.l	(sp)+,d0-d3/a0-a2/a6
	rts



*******************************************************************************
* p0m_RmpPic 5.0.5
*******************************************************************************
* INFO	rmps a pic to all RGBx modes
* OUT	ccr	eq=end
*******************************************************************************

p0m_RmpPic	movem.l	d0-d4/a0-a3/a6,-(sp)
	move.l	PartCtr,d4	;RGBx mode

	movea.l	DI0Adr,a0
	move.b	d4,d0
	move.w	#256,d1
	CALLTCS	SetRGBxMode	;chg RGBx mode
	WTLMB	.exit

	movea.l	p0_II_Alph,a3
	movea.l	(TCS_II_GfxAdr,a3),a0
	movea.l	([DI0Adr.l],TCS_DI_CSAdr.w),a1
	movea.l	(TCS_II_PalAdr,a3),a2
	move.b	d4,d0
	move.w	#p0_ALPHWD,d1
	move.w	#p0_ALPHHT,d2
	CALLTCS	CLUTPicToRGBx	;rmp pic to new mode
	movea.l	DI0Adr,a0
	CALLTCS	CPUFRPass0	;mk it visible
	WTLMB	.exit

	cmpi.b	#TCS_VM_last,d4	;retcode
.exit	movem.l	(sp)+,d0-d4/a0-a3/a6
	rts



*******************************************************************************
* p0c 2.2.0
*******************************************************************************

p0c	movem.l	d0-d1/a0-a2/a6,-(sp)
	movea.l	DI0Adr,a0
	suba.l	a1,a1
	CALLTCS	HideDspl
	movea.l	DI0Adr,a0
	CALLTCS	FreeDspl

	lea.l	p0_IIs,a2
	bsr	UnLdPix
	movem.l	(sp)+,d0-d1/a0-a2/a6
	rts



*******************************************************************************
* p0_DrwBigPxl 1.1.1
*******************************************************************************
* INFO	drws a big RGBW pxl
* IN	d4.b	RGBx mode
*	d5.l	i = component intensity
*	d6.w	y0
*	d7.l	RGB val of xN
*******************************************************************************

p0_DrwBigPxl	movem.l	d0-d4/d7/a0-a1/a6,-(sp)
	exg.l	d7,d4	;d4: xN's x; d7: RGBx mode
	move.l	d4,d0
	move.b	d7,d1
	CALLTCS	RGBToRGBx	;xN's x in RGBH
	move.b	d0,d4
	movea.l	DI0Adr,a0
	moveq.l	#p0_SHRESPXLWD*3,d0	;x0
	move.w	d6,d1	;y0
	move.w	#p0_SHRESPXLWD*4-1,d2	;x1
	move.w	d6,d3
	addi.w	#p0_SHRESPXLHT-1,d3	;y1
	CALLTCS	DrwFrm2

	move.l	d5,d0
	swap.w	d0
	move.b	d7,d1
	CALLTCS	RGBToRGBx	;<i,0,0> in RGBH
	move.b	d0,d4
	movea.l	DI0Adr,a0
	moveq.l	#0,d0	;x0
	move.w	d6,d1	;y0
	move.w	#p0_SHRESPXLWD-1,d2	;x1
	move.w	d6,d3
	addi.w	#p0_SHRESPXLHT-1,d3	;y1
	CALLTCS	DrwFrm2

	move.l	d5,d0
	lsl.l	#8,d0
	move.b	d7,d1
	CALLTCS	RGBToRGBx	;<0,i,0> in RGBH
	move.b	d0,d4
	movea.l	DI0Adr,a0
	moveq.l	#p0_SHRESPXLWD,d0	;x0
	move.w	d6,d1	;y0
	move.w	#p0_SHRESPXLWD*2-1,d2	;x1
	move.w	d6,d3
	addi.w	#p0_SHRESPXLHT-1,d3	;y1
	CALLTCS	DrwFrm2

	move.l	d5,d0
	move.b	d7,d1
	CALLTCS	RGBToRGBx	;<0,0,i> in RGBH
	move.b	d0,d4
	movea.l	DI0Adr,a0
	moveq.l	#p0_SHRESPXLWD*2,d0	;x0
	move.w	d6,d1	;y0
	move.w	#p0_SHRESPXLWD*3-1,d2	;x1
	move.w	d6,d3
	addi.w	#p0_SHRESPXLHT-1,d3	;y1
	CALLTCS	DrwFrm2

	movem.l	(sp)+,d0-d4/d7/a0-a1/a6
	rts
