*******************************************************************************
* p2i 2.2.1
*******************************************************************************
* OUT	ccr	eq=ERROR, ne=OK
*******************************************************************************

p2i	movem.l	d0-d7/a0-a6,-(sp)
	lea.l	p2_PixFlNmsAdrs,a2
	lea.l	p2_IIs,a3
	bsr	LdPix
	beq.s	.exit

	lea.l	DsplDef,a0
	move.l	#p2_VDOMODE_FR,(TCS_DD_VdoMode,a0)
	clr.l	(TCS_DD_UsrLst0,a0)
	clr.l	(TCS_DD_UsrLst1,a0)
	move.w	#p2_DSPLX0,(TCS_DD_DsplX0,a0)
	move.w	#p2_DSPLY0,(TCS_DD_DsplY0,a0)
	move.w	#p2_DSPLX1,(TCS_DD_DsplX1,a0)
	move.w	#p2_DSPLY1,(TCS_DD_DsplY1,a0)
	move.w	#p2_SCRWD,(TCS_DD_ScrWd,a0)
	move.w	#p2_SCRHT,(TCS_DD_ScrHt,a0)
	move.w	#p2_DSPLBRTNS,(TCS_DD_brtns,a0)
	move.w	#p2_GFXCTXT,(TCS_DD_GfxCtxt+TCS_GC_flgs,a0)
	CALLTCS	InitDspl
	move.l	d0,DI0Adr
	beq.s	.exit

	lea.l	DsplDef,a0
	move.l	#p2_VDOMODE_HR,(TCS_DD_VdoMode,a0)
	move.w	#p2_SCRWD/2,(TCS_DD_ScrWd,a0)
	CALLTCS	InitDspl
	move.l	d0,DI1Adr
	beq.s	.exit

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



*******************************************************************************
* p2m_HRScrl_c 3.0.4
*******************************************************************************
* INFO	shws how scrl is made in HR
* OUT	ccr	ne=cont
*******************************************************************************

p2m_HRScrl_c	movem.l	d0-d4/a0-a2/a6,-(sp)
	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.w	#p2_DSPLWD-1,d2
	move.w	#p2_DSPLHT-1,d3
	moveq.l	#0,d4
	CALLTCS	DrwFrm2	;clr scr

	bsr	RdMsePort	;get mse
	ext.w	d0
	sub.w	p2_ScrCoos,d0	;XOfs-ScrXOfs
	neg.w	d0	;ScrXOfs-XOfs
	bpl.s	.ChkXOfs
	moveq.l	#0,d0
.ChkXOfs	cmpi.w	#p2_SCRWD-p2_DSPLWD,d0
	bls.s	.StoreXOfs
	move.w	#p2_SCRWD-p2_DSPLWD,d0
.StoreXOfs	move.w	d0,p2_ScrCoos
	ext.w	d1
	sub.w	p2_ScrCoos+2,d1	;YOfs-ScrYOfs
	neg.w	d1	;ScrYOfs-YOfs
	bpl.s	.ChkYOfs
	moveq.l	#0,d1
.ChkYOfs	cmpi.w	#p2_SCRHT-p2_DSPLHT,d1
	bls.s	.StoreYOfs
	move.w	#p2_SCRHT-p2_DSPLHT,d1
.StoreYOfs	move.w	d1,p2_ScrCoos+2

	movea.l	DI0Adr,a0
	movea.l	([p2_II_tmpral.l],TCS_II_GfxAdr.w),a1
	lea.l	p2_ZmVtxs,a2
	lsr.w	#p2_SCLLOG,d0	;scl x ofs
	neg.w	d0
	addi.w	#p2_SCRFRMX,d0
	move.w	d0,(a2)
	addi.w	#(p2_SCRWD>>p2_SCLLOG)-1,d0
	move.w	d0,(4,a2)
	lsr.w	#p2_SCLLOG,d1	;scl y ofs
	neg.w	d1
	addi.w	#p2_SCRFRMY,d1
	move.w	d1,(2,a2)
	addi.w	#(p2_SCRHT>>p2_SCLLOG)-1,d1
	move.w	d1,(6,a2)
	move.w	#p2_TMPRLWD,d0
	move.w	#p2_TMPRLHT,d1
	CALLTCS	FitBrsh0	;drw whole scr

	movea.l	DI0Adr,a0
	move.w	#p2_SCRFRMX,d0
	move.w	#p2_SCRFRMY,d1
	move.w	#p2_SCRFRMX+(p2_DSPLWD>>p2_SCLLOG)-1,d2
	move.w	#p2_SCRFRMY+(p2_DSPLHT>>p2_SCLLOG)-1,d3
	moveq.l	#-1,d4
	CALLTCS	DrwFrm0	;drw vsbl area frm

	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	moveq.l	#1,d1
	CALLTCS	CPUFRPass1	;mk chgs vsbl

	CHKLMB	.exit
	movea.l	DI1Adr,a0
	movea.l	([p2_II_tmpral.l],TCS_II_GfxAdr.w),a1
	lea.l	p2_ZmVtxs,a2
	clr.w	(a2)
	clr.w	(2,a2)
	move.w	#p2_SCRWD/2-1,(4,a2)
	move.w	#p2_SCRHT-1,(6,a2)
	move.w	#p2_TMPRLWD,d0
	move.w	#p2_TMPRLHT,d1
	CALLTCS	FastFitBrsh0	;brsh to HR scr
	movea.l	DI1Adr,a0
	CALLTCS	ShwDspl	;shw HR dspl
	move.l	#p2m_HRScrl_e,(4,a5)	;chg part body
.exit	move.w	#0,ccr	;cont
	movem.l	(sp)+,d0-d4/a0-a2/a6
	rts



*******************************************************************************
* p2m_HRScrl_e 1.0.1
*******************************************************************************
* INFO	real HR scrl
* OUT	ccr	ne=cont
*******************************************************************************

p2m_HRScrl_e	movem.l	d0-d1/a0-a1/a6,-(sp)
	bsr	RdMsePort	;get mse
	ext.w	d0
	sub.w	p2_ScrCoos,d0	;XOfs-ScrXOfs
	neg.w	d0	;ScrXOfs-XOfs
	bpl.s	.ChkXOfs
	moveq.l	#0,d0
.ChkXOfs	cmpi.w	#p2_SCRWD-p2_DSPLWD,d0
	bls.s	.StoreXOfs
	move.w	#p2_SCRWD-p2_DSPLWD,d0
.StoreXOfs	move.w	d0,p2_ScrCoos
	ext.w	d1
	sub.w	p2_ScrCoos+2,d1	;YOfs-ScrYOfs
	neg.w	d1	;ScrYOfs-YOfs
	bpl.s	.ChkYOfs
	moveq.l	#0,d1
.ChkYOfs	cmpi.w	#p2_SCRHT-p2_DSPLHT,d1
	bls.s	.StoreYOfs
	move.w	#p2_SCRHT-p2_DSPLHT,d1
.StoreYOfs	move.w	d1,p2_ScrCoos+2

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

	CHKLMB	.exit
	movea.l	DI0Adr,a0
	CALLTCS	ShwDspl	;shw FR dspl
	move.l	#p2m_FRScrl_c,(4,a5)	;chg part body
.exit	move.w	#0,ccr	;cont
	movem.l	(sp)+,d0-d1/a0-a1/a6
	rts



*******************************************************************************
* p2m_FRScrl_c 4.0.4
*******************************************************************************
* INFO	shws how scrl is made in FR
* OUT	ccr	ne=cont
*******************************************************************************

p2m_FRScrl_c	movem.l	d0-d4/a0-a2/a6,-(sp)
	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.w	#p2_DSPLWD-1,d2
	move.w	#p2_DSPLHT-1,d3
	moveq.l	#0,d4
	CALLTCS	DrwFrm2	;clr scr

	bsr	RdMsePort	;get mse
	ext.w	d0
	add.w	p2_ScrCoos,d0	;ScrXOfs+XOfs
	bpl.s	.ChkXOfs
	moveq.l	#0,d0
.ChkXOfs	cmpi.w	#p2_SCRWD-p2_DSPLWD,d0
	bls.s	.StoreXOfs
	move.w	#p2_SCRWD-p2_DSPLWD,d0
.StoreXOfs	move.w	d0,p2_ScrCoos
	ext.w	d1
	add.w	p2_ScrCoos+2,d1	;ScrYOfs+YOfs
	bpl.s	.ChkYOfs
	moveq.l	#0,d1
.ChkYOfs	cmpi.w	#p2_SCRHT-p2_DSPLHT,d1
	bls.s	.StoreYOfs
	move.w	#p2_SCRHT-p2_DSPLHT,d1
.StoreYOfs	move.w	d1,p2_ScrCoos+2

	move.l	d0,d2
	move.w	d1,d3	;keep scrl ofs

	movea.l	DI0Adr,a0
	movea.l	([p2_II_tmpral.l],TCS_II_GfxAdr.w),a1
	lea.l	p2_ZmVtxs,a2
	move.w	#p2_SCRPOSX,(a2)
	move.w	#p2_SCRPOSY,(2,a2)
	move.w	#p2_SCRPOSX+(p2_SCRWD>>p2_SCLLOG)-1,(4,a2)
	move.w	#p2_SCRPOSY+(p2_SCRHT>>p2_SCLLOG)-1,(6,a2)
	move.w	#p2_TMPRLWD,d0
	move.w	#p2_TMPRLHT,d1
	CALLTCS	FitBrsh0	;drw whole scr

	movea.l	DI0Adr,a0
	move.w	d2,d0
	move.w	d3,d1
	lsr.w	#p2_SCLLOG,d0	;scl x ofs
	lsr.w	#p2_SCLLOG,d1	;scl y ofs
	addi.w	#p2_SCRPOSX,d0
	addi.w	#p2_SCRPOSY,d1
	move.w	d0,d2
	move.w	d1,d3
	addi.w	#(p2_DSPLWD>>p2_SCLLOG)-1,d2
	addi.w	#(p2_DSPLHT>>p2_SCLLOG)-1,d3
	moveq.l	#-1,d4
	CALLTCS	DrwFrm0	;drw vsbl area frm

	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	moveq.l	#1,d1
	CALLTCS	CPUFRPass1	;mk chgs vsbl

	CHKLMB	.exit
	movea.l	DI0Adr,a0
	movea.l	([p2_II_tmpral.l],TCS_II_GfxAdr.w),a1
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.w	#p2_TMPRLWD,d2
	move.w	#p2_TMPRLHT,d3
	CALLTCS	FastWrtBrsh0	;brsh to FR scr
	move.l	#p2m_FRScrl_e,(4,a5)	;chg part body
.exit	move.w	#0,ccr	;cont
	movem.l	(sp)+,d0-d4/a0-a2/a6
	rts



*******************************************************************************
* p2m_FRScrl_e 1.0.1
*******************************************************************************
* INFO	real FR scrl
* OUT	ccr	ne=cont, eq=end
*******************************************************************************

p2m_FRScrl_e	movem.l	d0-d1/a0-a1/a6,-(sp)
	bsr	RdMsePort	;get mse
	ext.w	d0
	sub.w	p2_ScrCoos,d0	;XOfs-ScrXOfs
	neg.w	d0	;ScrXOfs-XOfs
	bpl.s	.ChkXOfs
	moveq.l	#0,d0
.ChkXOfs	cmpi.w	#p2_SCRWD-p2_DSPLWD,d0
	bls.s	.StoreXOfs
	move.w	#p2_SCRWD-p2_DSPLWD,d0
.StoreXOfs	move.w	d0,p2_ScrCoos
	ext.w	d1
	sub.w	p2_ScrCoos+2,d1	;YOfs-ScrYOfs
	neg.w	d1	;ScrYOfs-YOfs
	bpl.s	.ChkYOfs
	moveq.l	#0,d1
.ChkYOfs	cmpi.w	#p2_SCRHT-p2_DSPLHT,d1
	bls.s	.StoreYOfs
	move.w	#p2_SCRHT-p2_DSPLHT,d1
.StoreYOfs	move.w	d1,p2_ScrCoos+2

	movea.l	DI0Adr,a0
	CALLTCS	CPUFRPass1	;scrl
	CHKLMB	.exit
	move.w	#4,ccr
.exit	movem.l	(sp)+,d0-d1/a0-a1/a6
	rts



*******************************************************************************
* p2c 1.0.1
*******************************************************************************

p2c	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

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