*******************************************************************************
* p3i 1.0.1
*******************************************************************************
* OUT	ccr	eq=ERROR, ne=OK
*******************************************************************************

p3i	movem.l	d0-d7/a0-a6,-(sp)
	lea.l	p3_PixFlNmsAdrs,a2
	lea.l	p3_IIs,a3
	bsr	LdPix
	beq.s	.exit

	movea.l	([p3_II_stop.l],TCS_II_GfxAdr.w),a0
	suba.l	a1,a1
	move.b	#$ff,d0
	move.b	#32,d1
	move.w	#p3_STOPSZ,d2
	move.w	#p3_STOPSZ,d3
	CALLTCS	MkBrshMsk
	move.l	d0,p3_StopMsk
	beq.s	.exit

	lea.l	DsplDef,a0
	move.l	#p3_VDOMODE_FR,(TCS_DD_VdoMode,a0)
	clr.l	(TCS_DD_UsrLst0,a0)
	clr.l	(TCS_DD_UsrLst1,a0)
	move.w	#p3_DSPLX0,(TCS_DD_DsplX0,a0)
	move.w	#p3_DSPLY0,(TCS_DD_DsplY0,a0)
	move.w	#p3_DSPLX1,(TCS_DD_DsplX1,a0)
	move.w	#p3_DSPLY1,(TCS_DD_DsplY1,a0)
	move.w	#p3_SCRWD,(TCS_DD_ScrWd,a0)
	move.w	#p3_SCRHT,(TCS_DD_ScrHt,a0)
	move.w	#p3_DSPLBRTNS,(TCS_DD_brtns,a0)
	move.w	#p3_GFXCTXT,(TCS_DD_GfxCtxt+TCS_GC_flgs,a0)
	CALLTCS	InitDspl
	move.l	d0,DI0Adr
	beq.s	.exit

	lea.l	DsplDef,a0
	move.l	#p3_VDOMODE_HR,(TCS_DD_VdoMode,a0)
	move.w	#p3_SCRWD,(TCS_DD_ScrWd,a0)
	move.w	#p3_SCRHT*2,(TCS_DD_ScrHt,a0)
	CALLTCS	InitDspl
	move.l	d0,DI1Adr
	beq.s	.exit

	movea.l	DI0Adr,a0
	CALLTCS	ShwDspl
	move.w	#0,ccr	;ATN(retcode, too)
.exit	movem.l	(sp)+,d0-d7/a0-a6
	rts



*******************************************************************************
* p3m_PrepRndr1 2.0.2
*******************************************************************************
* INFO	preps the scr for 1st rndr xmpl
* OUT	ccr	ne=cont
*******************************************************************************

p3m_PrepRndr1	movem.l	d0-d3/a0-a1/a6,-(sp)
	movea.l	DI0Adr,a0
	movea.l	([p3_II_1940.l],TCS_II_GfxAdr.w),a1
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.w	#p3_1940WD,d2
	move.w	#p3_1940HT,d3
	CALLTCS	WrtBrsh0	;drw 1940

	movea.l	DI0Adr,a0
	move.w	#p3_SCRFRM0X-1,d0
	move.w	#p3_SCRFRMY-1,d1
	move.w	#p3_SCRFRM0X+p3_SCRFRMWD,d2
	move.w	#p3_SCRFRMY+p3_SCRFRMHT,d3
	move.b	#255,d4
	CALLTCS	DrwFrm0	;drw buf0 frm

	movea.l	DI0Adr,a0
	move.w	#p3_SCRFRM1X-1,d0
	move.w	#p3_SCRFRMY-1,d1
	move.w	#p3_SCRFRM1X+p3_SCRFRMWD,d2
	move.w	#p3_SCRFRMY+p3_SCRFRMHT,d3
	move.b	#255,d4
	CALLTCS	DrwFrm0	;drw buf1 frm

	movea.l	DI0Adr,a0
	movea.l	([p3_II_030.l],TCS_II_GfxAdr.w),a1
	move.w	#p3_SCRFRM1X+(p3_SCRFRMWD-p3_030WD)/2,d0
	move.w	#p3_SCRFRMY+p3_SCRFRMHT+1,d1
	move.w	#p3_030WD,d2
	move.w	#p3_030HT,d3
	CALLTCS	FastWrtBrsh0	;drw 030

	movea.l	DI0Adr,a0
	movea.l	([p3_II_pic0.l],TCS_II_GfxAdr.w),a1
	move.w	#p3_SCRFRM0X,d0
	move.w	#p3_SCRFRMY,d1
	move.w	#p3_SCRFRMWD,d2
	move.w	#p3_SCRFRMHT,d3
	CALLTCS	WrtBrsh0	;buf0 pic

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



*******************************************************************************
* p3m_rndr1 3.1.2
*******************************************************************************
* INFO	rndrs the buf1 and shws buf0
* OUT	ccr	ne=cont
*******************************************************************************

p3m_rndr1	movem.l	d0-d7/a0-a1/a6,-(sp)
	move.l	PartCtr,d0
	divu.w	#p3_RNDRSPDMOD,d0
	swap.w	d0
	tst.w	d0
	bne.s	.UpdRst

	move.w	p3_RndrPos,d6	;get RndrPos; ATN(don't trsh)
	cmpi.w	#p3_SCRFRMHT,d6
	blo.s	.rndr	;if rndr not over...

	movea.l	DI0Adr,a0
	movea.l	([p3_II_stop.l],TCS_II_GfxAdr.w),a1
	movea.l	p3_StopMsk,a2
	move.w	#p3_SCRFRM1X+(p3_SCRFRMWD-p3_STOPSZ)/2,d0
	move.w	#p3_SCRFRMY+p3_SCRFRMHT+9+(p3_030HT-p3_STOPSZ)/2,d1
	move.w	#p3_STOPSZ,d2
	move.w	#p3_STOPSZ,d3
	CALLTCS	WrtBrsh8	;place "stop" sign on 030

	move.w	p3_RstPos,d7	;get RstPos
	cmpi.w	#p3_SCRFRMHT-1,d7
	blo.s	.UpdRst	;if rst not over...
	WTLMB	.exit
	move.l	#p3m_PrepRndr2,(4,a5)	;chg part body
	bra	.exit

.rndr	movea.l	DI0Adr,a0
	movea.l	([p3_II_pic1.l],TCS_II_GfxAdr.w),a1
	moveq.l	#0,d0
	move.w	d6,d1
	move.w	#p3_SCRFRMWD-1,d2
	move.w	d6,d3
	move.w	#p3_SCRFRM1X,d4
	move.w	#p3_SCRFRMY,d5
	add.w	d3,d5
	move.w	#p3_SCRFRMWD,d6
	CALLTCS	WrtBrshZn0	;rndr 1 ln

	addq.w	#1,d3
	move.w	d3,p3_RndrPos	;upd RndrPos

.UpdRst	move.b	PartCtr+3,d0
	andi.b	#p3_RSTSPDMOD,d0
	bne	.exit	;ATN(retcode, too)

	movea.l	DI0Adr,a0
	movea.l	([p3_II_pic0.l],TCS_II_GfxAdr.w),a1
	moveq.l	#0,d0
	move.w	p3_RstPos,d1
	move.w	#p3_SCRFRMWD-1,d2
	move.w	d1,d3
	move.w	#p3_1940BRDRSZ,d4
	move.w	#p3_1940BRDRSZ,d5
	add.w	d3,d5
	move.w	#p3_SCRFRMWD,d6
	CALLTCS	WrtBrshZn0	;rst 1 ln

	move.w	d3,d7	;keep RstPos

	movea.l	DI0Adr,a0
	move.w	#p3_1940WD+1,d0
	move.w	#p3_1940BRDRSZ+1,d1
	move.w	#p3_1940WD+p3_ARWWD,d2
	move.w	#p3_1940HT,d3
	moveq.l	#0,d4
	CALLTCS	DrwFrm2	;clr arw

	movea.l	DI0Adr,a0
	movea.l	([p3_II_arw.l],TCS_II_GfxAdr.w),a1
	move.w	#p3_1940WD+1,d0
	move.w	#p3_1940BRDRSZ-p3_ARWHT/2,d1
	add.w	d7,d1
	move.w	#p3_ARWWD,d2
	move.w	#p3_ARWHT,d3
	CALLTCS	WrtBrsh0	;drw arw

	addq.w	#1,d7
	cmpi.w	#p3_SCRFRMHT,d7
	bne.s	.UpdRstPos
	moveq.l	#0,d7
.UpdRstPos	move.w	d7,p3_RstPos	;upd RstPos

.exit	movea.l	DI0Adr,a0
	CALLTCS	CPUFRPass0
	move.w	#0,ccr	;cont
	movem.l	(sp)+,d0-d7/a0-a1/a6
	rts



*******************************************************************************
* p3m_PrepRndr2 1.1.1
*******************************************************************************
* INFO	preps the scr for 2nd rndr xmpl
* OUT	ccr	ne=cont
*******************************************************************************

p3m_PrepRndr2	movem.l	d0-d3/a0-a1/a6,-(sp)
	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.w	#p3_SCRWD-1,d2
	move.w	#p3_SCRFRMY-2,d3
	moveq.l	#0,d4
	CALLTCS	DrwFrm2	;clr upper part of scr

	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	move.w	#p3_SCRFRMY+p3_SCRFRMHT+1,d1
	move.w	#p3_SCRWD-1,d2
	move.w	#p3_SCRHT-1,d3
	moveq.l	#0,d4
	CALLTCS	DrwFrm2	;clr lower part of scr

	movea.l	DI0Adr,a0
	movea.l	([p3_II_1940.l],TCS_II_GfxAdr.w),a1
	move.w	#p3_SCRFRM1X+(p3_SCRFRMWD-p3_1940WD)/2,d0
	moveq.l	#0,d1
	move.w	#p3_1940WD,d2
	move.w	#p3_1940HT,d3
	CALLTCS	WrtBrsh0	;drw 1940

	movea.l	DI0Adr,a0
	movea.l	([p3_II_030.l],TCS_II_GfxAdr.w),a1
	move.w	#p3_SCRFRM0X+(p3_SCRFRMWD-p3_030WD)/2,d0
	move.w	#p3_SCRFRMY+p3_SCRFRMHT+1,d1
	move.w	#p3_030WD,d2
	move.w	#p3_030HT,d3
	CALLTCS	FastWrtBrsh0	;drw 030

	movea.l	DI0Adr,a0
	CALLTCS	CPUFRPass0

	clr.w	p3_RndrPos
	clr.w	p3_RstPos
	move.l	#p3m_rndr2,(4,a5)	;chg part body; ATN(retcode, too)
.exit	movem.l	(sp)+,d0-d3/a0-a1/a6
	rts



*******************************************************************************
* p3m_rndr2 3.1.2
*******************************************************************************
* INFO	rndrs the buf0 and shws buf1
* OUT	ccr	ne=cont
*******************************************************************************

p3m_rndr2	movem.l	d0-d7/a0-a1/a6,-(sp)
	move.l	PartCtr,d0
	divu.w	#p3_RNDRSPDMOD,d0
	swap.w	d0
	tst.w	d0
	bne.s	.UpdRst

	move.w	p3_RndrPos,d1	;get RndrPos; ATN(don't trsh)
	cmpi.w	#p3_SCRFRMHT,d1
	blo.s	.rndr	;if rndr not over...

	movea.l	DI0Adr,a0
	movea.l	([p3_II_stop.l],TCS_II_GfxAdr.w),a1
	movea.l	p3_StopMsk,a2
	move.w	#p3_SCRFRM0X+(p3_SCRFRMWD-p3_STOPSZ)/2,d0
	move.w	#p3_SCRFRMY+p3_SCRFRMHT+9+(p3_030HT-p3_STOPSZ)/2,d1
	move.w	#p3_STOPSZ,d2
	move.w	#p3_STOPSZ,d3
	CALLTCS	WrtBrsh8	;place "stop" sign on 030

	move.w	p3_RstPos,d7	;get RstPos
	cmpi.w	#p3_SCRFRMHT-1,d7
	blo.s	.UpdRst	;if rst not over...
	WTLMB	.exit
	move.l	#p3m_PrepRndr3,(4,a5)	;chg part body
	bra	.exit

.rndr	movea.l	DI0Adr,a0
	movea.l	([p3_II_pic2.l],TCS_II_GfxAdr.w),a1
	moveq.l	#0,d0
	move.w	#p3_SCRFRMWD-1,d2
	move.w	d1,d3
	move.w	#p3_SCRFRM0X,d4
	move.w	#p3_SCRFRMY,d5
	add.w	d3,d5
	move.w	#p3_SCRFRMWD,d6
	CALLTCS	WrtBrshZn0	;rndr 1 ln

	addq.w	#1,d3
	move.w	d3,p3_RndrPos	;upd RndrPos

.UpdRst	move.b	PartCtr+3,d0
	andi.b	#p3_RSTSPDMOD,d0
	bne	.exit	;ATN(retcode, too)

	movea.l	DI0Adr,a0
	movea.l	([p3_II_pic1.l],TCS_II_GfxAdr.w),a1
	moveq.l	#0,d0
	move.w	p3_RstPos,d1
	move.w	#p3_SCRFRMWD-1,d2
	move.w	d1,d3
	move.w	#p3_SCRFRM1X+(p3_SCRFRMWD-p3_1940WD)/2+p3_1940BRDRSZ,d4
	move.w	#p3_1940BRDRSZ,d5
	add.w	d3,d5
	move.w	#p3_SCRFRMWD,d6
	CALLTCS	WrtBrshZn0	;rst 1 ln

	move.w	d3,d7	;keep RstPos

	movea.l	DI0Adr,a0
	move.w	#p3_SCRFRM1X+(p3_SCRFRMWD-p3_1940WD)/2+p3_1940WD+1,d0
	move.w	#p3_1940BRDRSZ+1,d1
	move.w	#p3_SCRFRM1X+(p3_SCRFRMWD-p3_1940WD)/2+p3_1940WD+1+p3_ARWWD,d2
	move.w	#p3_1940HT,d3
	moveq.l	#0,d4
	CALLTCS	DrwFrm2	;clr arw

	movea.l	DI0Adr,a0
	movea.l	([p3_II_arw.l],TCS_II_GfxAdr.w),a1
	move.w	#p3_SCRFRM1X+(p3_SCRFRMWD-p3_1940WD)/2+p3_1940WD+1,d0
	move.w	#p3_1940BRDRSZ-p3_ARWHT/2,d1
	add.w	d7,d1
	move.w	#p3_ARWWD,d2
	move.w	#p3_ARWHT,d3
	CALLTCS	WrtBrsh0	;drw arw

	addq.w	#1,d7
	cmpi.w	#p3_SCRFRMHT,d7
	blo.s	.UpdRstPos
	moveq.l	#0,d7
.UpdRstPos	move.w	d7,p3_RstPos	;upd RstPos

.exit	movea.l	DI0Adr,a0
	CALLTCS	CPUFRPass0
	move.w	#0,ccr	;cont
	movem.l	(sp)+,d0-d7/a0-a1/a6
	rts



*******************************************************************************
* p3m_PrepRndr3 1.0.1
*******************************************************************************
* INFO	preps the scr for 3rd rndr xmpl
* OUT	ccr	ne=cont
*******************************************************************************

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

	movea.l	DI0Adr,a0
	move.w	#p3_SCRFRM0X-1,d0
	move.w	#p3_SCRFRMY-1,d1
	move.w	#p3_SCRFRM0X+p3_SCRFRMWD,d2
	move.w	#p3_SCRFRMY+p3_SCRFRMHT,d3
	move.b	#255,d4
	CALLTCS	DrwFrm0	;drw buf0 frm

	movea.l	DI0Adr,a0
	move.w	#p3_SCRFRM0X+p3_SCRFRMWD+16-1,d0
	move.w	#p3_SCRFRMY-1,d1
	move.w	#p3_SCRFRM0X+p3_SCRFRMWD+16+p3_SCRFRMWD,d2
	move.w	#p3_SCRFRMY+p3_SCRFRMHT,d3
	move.b	#255,d4
	CALLTCS	DrwFrm0	;drw buf1 frm

	movea.l	DI0Adr,a0
	move.w	#p3_SCRFRM0X+(p3_SCRFRMWD+16)*2-1,d0
	move.w	#p3_SCRFRMY-1,d1
	move.w	#p3_SCRFRM0X+(p3_SCRFRMWD+16)*2+p3_SCRFRMWD,d2
	move.w	#p3_SCRFRMY+p3_SCRFRMHT,d3
	move.b	#255,d4
	CALLTCS	DrwFrm0	;drw buf2 frm

	movea.l	DI0Adr,a0
	movea.l	([p3_II_pic0.l],TCS_II_GfxAdr.w),a1
	move.w	#p3_SCRFRM0X,d0
	move.w	#p3_SCRFRMY,d1
	move.w	#p3_SCRFRMWD,d2
	move.w	#p3_SCRFRMHT,d3
	CALLTCS	WrtBrsh0	;buf0 pic

	movea.l	DI0Adr,a0
	movea.l	([p3_II_pic1.l],TCS_II_GfxAdr.w),a1
	move.w	#p3_SCRFRM0X+p3_SCRFRMWD+16,d0
	move.w	#p3_SCRFRMY,d1
	move.w	#p3_SCRFRMWD,d2
	move.w	#p3_SCRFRMHT,d3
	CALLTCS	WrtBrsh0	;buf1 pic

	movea.l	DI0Adr,a0
	CALLTCS	CPUFRPass0

	WTLMB	.exit
	clr.w	p3_RndrPos
	clr.w	p3_RstPos
	move.l	#p3m_rndr3,(4,a5)	;chg part body; ATN(retcode, too)
.exit	movem.l	(sp)+,d0-d3/a0-a1/a6
	rts



*******************************************************************************
* p3m_rndr3 2.0.2
*******************************************************************************
* INFO	tribuf rndring xmpl
* OUT	ccr	ne=cont
*******************************************************************************

p3m_rndr3	movem.l	d0-d3/a0-a1/a6,-(sp)

*******************************************************************************
* 030 rndr

	move.l	PartCtr,d0
	divu.w	#p3_RNDRSPDMOD,d0
	swap.w	d0
	tst.w	d0
	bne.s	.rst	;if no rndr upd...
	move.w	p3_RndrStts,d6
	move.w	d6,d7
	bclr.l	#15,d6
	cmpi.w	#2,d6
	ble.s	.RndrX
	subq.w	#3,d6
.RndrX	mulu.w	#p3_SCRFRMWD+16,d6
	addi.w	#p3_1940BRDRSZ,d6	;x
	bclr.l	#15,d7
	beq.s	.RndrLn	;if no rndr shf...
	move.w	d7,p3_RndrStts

	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	move.w	#p3_SCRFRMY+p3_SCRFRMHT+1,d1
	move.w	#p3_SCRWD-1,d2
	move.w	#p3_SCRHT-1,d3
	moveq.l	#0,d4
	CALLTCS	DrwFrm2	;clr lower part of scr

	movea.l	DI0Adr,a0
	movea.l	([p3_II_030.l],TCS_II_GfxAdr.w),a1
	move.w	d6,d0
	addi.w	#(p3_SCRFRMWD-p3_030WD)/2,d0
	move.w	#p3_SCRFRMY+p3_SCRFRMHT+1,d1
	move.w	#p3_030WD,d2
	move.w	#p3_030HT,d3
	CALLTCS	FastWrtBrsh0	;drw 030

.RndrLn	movea.l	DI0Adr,a0
	lea.l	p3_II_pic0,a1
	move.w	p3_RndrStts,d0
	lea.l	(a1,d0.w*4),a1
	movea.l	([a1.l],TCS_II_GfxAdr.w),a1
	moveq.l	#0,d0
	move.w	p3_RndrPos,d1
	move.w	#p3_SCRFRMWD-1,d2
	move.w	d1,d3
	move.w	d6,d4
	move.w	d1,d5
	addi.w	#p3_SCRFRMY,d5
	move.w	#p3_SCRFRMWD,d6
	CALLTCS	WrtBrshZn0	;rndr 1 ln

	move.w	p3_RndrPos,d7
	addq.w	#1,d7
	cmpi.w	#p3_SCRFRMHT,d7
	blo.s	.UpdRndrPos
	moveq.l	#0,d7
	move.w	p3_RndrStts,d6
	cmpi.w	#4,d6
	blo.s	.UpdRndrStts	;if not all bufs rndrd...
	WTLMB	.exit
	move.l	#p3m_PrepDubBuf,(4,a5)	;chg part body
	bra	.exit
.UpdRndrStts	addi.w	#$8001,d6
	move.w	d6,p3_RndrStts	;upd rndr stts
.UpdRndrPos	move.w	d7,p3_RndrPos	;& pos

*******************************************************************************
* rst rndr

.rst	move.b	PartCtr+3,d0
	andi.b	#p3_RSTSPDMOD,d0
	bne	.exit	;if no rst upd...
	move.w	p3_RstStts,d6
	move.w	d6,d7
	bclr.l	#15,d6
	cmpi.w	#2,d6
	ble.s	.RstX
	subq.w	#3,d6
.RstX	mulu.w	#p3_SCRFRMWD+16,d6	;x
	bclr.l	#15,d7
	beq.s	.arw	;if no rst shf...
	move.w	d7,p3_RstStts

	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.w	#p3_SCRWD-1,d2
	move.w	#p3_SCRFRMY-2,d3
	moveq.l	#0,d4
	CALLTCS	DrwFrm2	;clr upper part of scr

	movea.l	DI0Adr,a0
	movea.l	([p3_II_1940.l],TCS_II_GfxAdr.w),a1
	move.w	d6,d0
	moveq.l	#0,d1
	move.w	#p3_1940WD,d2
	move.w	#p3_1940HT,d3
	CALLTCS	WrtBrsh0	;drw 1940

.arw	movea.l	DI0Adr,a0
	move.w	d6,d0
	addi.w	#p3_1940WD+1,d0
	move.w	#p3_1940BRDRSZ+1,d1
	move.w	d0,d2
	addi.w	#p3_ARWWD-1,d2
	move.w	#p3_1940HT,d3
	moveq.l	#0,d4
	CALLTCS	DrwFrm2	;clr arw

	move.w	p3_RstPos,d7	;get RstPos

	movea.l	DI0Adr,a0
	movea.l	([p3_II_arw.l],TCS_II_GfxAdr.w),a1
	move.w	d6,d0
	addi.w	#p3_1940WD+1,d0
	move.w	d7,d1
	addi.w	#p3_1940BRDRSZ-p3_ARWHT/2,d1
	move.w	#p3_ARWWD,d2
	move.w	#p3_ARWHT,d3
	CALLTCS	WrtBrsh0	;drw arw

	movea.l	DI0Adr,a0
	lea.l	p3_II_pic0,a1
	move.w	p3_RstStts,d0
	lea.l	(a1,d0.w*4),a1
	movea.l	([a1.l],TCS_II_GfxAdr.w),a1
	moveq.l	#0,d0
	move.w	d7,d1
	move.w	#p3_SCRFRMWD-1,d2
	move.w	d7,d3
	move.w	d6,d4
	addi.w	#p3_1940BRDRSZ,d4
	move.w	d7,d5
	addi.w	#p3_1940BRDRSZ,d5
	move.w	#p3_SCRFRMWD,d6
	CALLTCS	WrtBrshZn0	;rst 1 ln

	move.w	p3_RstPos,d7
	addq.w	#1,d7
	cmpi.w	#p3_SCRFRMHT,d7
	blo.s	.UpdRstPos
	moveq.l	#0,d7
	addi.w	#$8001,p3_RstStts	;upd rst stts
.UpdRstPos	move.w	d7,p3_RstPos	;& pos

*******************************************************************************

.exit	movea.l	DI0Adr,a0
	CALLTCS	CPUFRPass0
	move.w	#0,ccr
	movem.l	(sp)+,d0-d3/a0-a1/a6
	rts



*******************************************************************************
* p3m_PrepDubBuf 2.0.3
*******************************************************************************
* INFO	preps the HR scr for dub bufing & scrl
* OUT	ccr	ne=cont
*******************************************************************************

p3m_PrepDubBuf	movem.l	d0-d1/a0-a1/a6,-(sp)
	movea.l	DI1Adr,a0
	movea.l	([p3_II_tmprl.l],TCS_II_GfxAdr.w),a1
	lea.l	p3_ZmVtxs,a2
	move.w	#p3_TMPRLWD,d0
	move.w	#p3_TMPRLHT,d1
	CALLTCS	FastFitBrsh0	;rndr pic...
	movea.l	DI1Adr,a0
	CALLTCS	EquVdoBufs	;... on both bufs

	movea.l	DI1Adr,a0
	CALLTCS	ShwDspl	;shw HR dspl
	move.l	#p3m_DubBuf,(4,a5)	;chg part body; ATN(retcode, too)
	movem.l	(sp)+,d0-d1/a0-a1/a6
	rts




*******************************************************************************
* p3m_DubBuf 0.0.1
*******************************************************************************
* OUT	ccr	ne=cont, eq=end
*******************************************************************************

p3m_DubBuf	movem.l	d0-d1/a0-a1/a6,-(sp)
	bsr	RdMsePort	;get mse
	ext.w	d0
	sub.w	p3_ScrCoos,d0	;XOfs-ScrXOfs
	neg.w	d0	;ScrXOfs-XOfs
	bpl.s	.ChkXOfs
	moveq.l	#0,d0
.ChkXOfs	cmpi.w	#p3_SCRWD*2-p3_DSPLWD,d0
	bls.s	.StoreXOfs
	move.w	#p3_SCRWD*2-p3_DSPLWD,d0
.StoreXOfs	move.w	d0,p3_ScrCoos
	ext.w	d1
	sub.w	p3_ScrCoos+2,d1	;YOfs-ScrYOfs
	neg.w	d1	;ScrYOfs-YOfs
	bpl.s	.ChkYOfs
	moveq.l	#0,d1
.ChkYOfs	cmpi.w	#p3_SCRHT*2-p3_DSPLHT,d1
	bls.s	.StoreYOfs
	move.w	#p3_SCRHT*2-p3_DSPLHT,d1
.StoreYOfs	move.w	d1,p3_ScrCoos+2

	WTRSTLN	50
	movea.l	DI1Adr,a0
	lsl.w	#2,d0	;(x ofs is in SHRES)
	CALLTCS	SetPlnsPos	;scrl scr
	movea.l	DI1Adr,a0
	CALLTCS	DubSwp

	btst.b	#6,$bfe001	;retcode
.exit	movem.l	(sp)+,d0-d1/a0-a1/a6
	rts



*******************************************************************************
* p3c 1.0.2
*******************************************************************************

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

	movea.l	p3_StopMsk,a0
	CALLTCS	FreeBrsh

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