*******************************************************************************
* p5i 0.0.0
*******************************************************************************
* OUT	ccr	eq=ERROR, ne=OK
*******************************************************************************

p5i	movem.l	d0-d7/a0-a6,-(sp)
	lea.l	DsplDef,a0
	move.l	#p5_VDOMODE,(TCS_DD_VdoMode,a0)
	clr.l	(TCS_DD_UsrLst0,a0)
	clr.l	(TCS_DD_UsrLst1,a0)
	move.w	#p5_DSPLX0,(TCS_DD_DsplX0,a0)
	move.w	#p5_DSPLY0,(TCS_DD_DsplY0,a0)
	move.w	#p5_DSPLX1,(TCS_DD_DsplX1,a0)
	move.w	#p5_DSPLY1,(TCS_DD_DsplY1,a0)
	move.w	#p5_SCRWD,(TCS_DD_ScrWd,a0)
	move.w	#p5_SCRHT,(TCS_DD_ScrHt,a0)
	move.w	#p5_DSPLBRTNS,(TCS_DD_brtns,a0)
	move.w	#p5_GFXCTXT,(TCS_DD_GfxCtxt+TCS_GC_flgs,a0)
	move.w	#p5_CLPTOP,(TCS_DD_GfxCtxt+TCS_GC_ClpWin+TCS_CW_top,a0)
	move.w	#p5_CLPBTM,(TCS_DD_GfxCtxt+TCS_GC_ClpWin+TCS_CW_btm,a0)
	move.w	#p5_CLPLF,(TCS_DD_GfxCtxt+TCS_GC_ClpWin+TCS_CW_lf,a0)
	move.w	#p5_CLPRT,(TCS_DD_GfxCtxt+TCS_GC_ClpWin+TCS_CW_rt,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



*******************************************************************************
* p5m_pxl 1.0.1
*******************************************************************************
* INFO	drws a parable with pxls
* OUT	ccr	ne=cont
*******************************************************************************

p5m_pxl	movem.l	d0-d5/a0-a1/a6,-(sp)
	bsr	p5_WpScr
	movea.l	DI0Adr,a0
	move.w	#p5_SCRWD-1,d5	;ctr
	move.w	#-p5_SCRWD/2,d4	;x: from lf

.plt	move.w	d4,d1	;x
	move.w	d4,d0	;x
	muls.w	d4,d1	;x²
	addi.w	#p5_SCRWD/2,d0	;(x on scr)
	divu.w	#300,d1	;y: x²/300
	addi.w	#p5_SCRHT/2,d1	;(y on scr)
	ext.l	d0
	move.w	d1,d3	;keep y
	move.b	#p5_OUTCOL,d2
	CALLTCS	PltPxl0
	move.w	d3,d1	;y
	move.b	#p5_INCOL,d2
	CALLTCS	PltPxl

	addq.w	#1,d4	;inc x
	dbra	d5,.plt

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



*******************************************************************************
* p5m_ln 1.0.2
*******************************************************************************
* INFO	drws a family of lns
* OUT	ccr	ne=cont
*******************************************************************************

p5m_ln	movem.l	d0-d5/a0-a1/a6,-(sp)
	bsr	p5_WpScr
	clr.l	d5	;ctr

.ln	movea.l	DI0Adr,a0
	move.w	#p5_SCRWD,d2
	move.w	d5,d0	;x0: ctr
	sub.w	d5,d2	;x1: wd-ctr
	moveq.l	#0,d1	;y0
	move.w	#p5_SCRHT-1,d3	;y1
	move.b	#p5_OUTCOL,d4
	CALLTCS	DrwLn0

	movea.l	DI0Adr,a0
	move.w	#p5_SCRWD,d2
	move.w	d5,d0	;x0: ctr
	sub.w	d5,d2	;x1: wd-ctr
	moveq.l	#0,d1	;y0
	move.w	#p5_SCRHT-1,d3	;y1
	move.b	#p5_INCOL,d4
	CALLTCS	DrwLn

	addq.w	#8,d5
	cmpi.w	#p5_SCRWD,d5
	blo.s	.ln

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



*******************************************************************************
* p5m_trngl 1.0.1
*******************************************************************************
* INFO	drws some trgnls
* OUT	ccr	ne=cont
*******************************************************************************

p5m_trngl	movem.l	d0-d1/a0-a1/a6,-(sp)
	bsr	p5_WpScr

	movea.l	DI0Adr,a0
	lea.l	p5_trngls,a1
	move.b	#p5_OUTCOL,d0
	CALLTCS	DrwTrngl2

	movea.l	DI0Adr,a0
	lea.l	p5_trngls,a1
	move.b	#p5_INCOL,d0
	CALLTCS	DrwTrngl

	movea.l	DI0Adr,a0
	lea.l	p5_trngls+12,a1
	move.b	#p5_OUTCOL,d0
	CALLTCS	DrwTrngl2

	movea.l	DI0Adr,a0
	lea.l	p5_trngls+12,a1
	move.b	#p5_INCOL,d0
	CALLTCS	DrwTrngl

	movea.l	DI0Adr,a0
	lea.l	p5_trngls+24,a1
	move.b	#p5_OUTCOL,d0
	CALLTCS	DrwTrngl2

	movea.l	DI0Adr,a0
	lea.l	p5_trngls+24,a1
	move.b	#p5_INCOL,d0
	CALLTCS	DrwTrngl

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



*******************************************************************************
* p5m_plgn 1.0.1
*******************************************************************************
* INFO	drws a star
* OUT	ccr	ne=cont
*******************************************************************************

p5m_plgn	movem.l	d0-d1/a0-a1/a6,-(sp)
	bsr	p5_WpScr

	movea.l	DI0Adr,a0
	lea.l	p5_plgn,a1
	move.b	#p5_OUTCOL,d0
	CALLTCS	DrwPlgn2

	movea.l	DI0Adr,a0
	lea.l	p5_plgn,a1
	move.b	#p5_INCOL,d0
	CALLTCS	DrwPlgn

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



*******************************************************************************
* p5m_crcl 1.0.1
*******************************************************************************
* INFO	drws some crcls
* OUT	ccr	ne=cont
*******************************************************************************

p5m_crcl	movem.l	d0-d3/a0-a1/a6,-(sp)
	bsr	p5_WpScr

	movea.l	DI0Adr,a0
	move.w	#p5_CLPLF,d0
	move.w	#p5_CLPTOP,d1
	move.w	#p5_SCRHT/8,d2
	move.b	#p5_OUTCOL,d3
	CALLTCS	DrwCrcl2

	movea.l	DI0Adr,a0
	move.w	#p5_CLPLF,d0
	move.w	#p5_CLPTOP,d1
	move.w	#p5_SCRHT/8,d2
	move.b	#p5_INCOL,d3
	CALLTCS	DrwCrcl

	movea.l	DI0Adr,a0
	move.w	#p5_SCRWD/2+20,d0
	move.w	#p5_SCRHT/2,d1
	move.w	#p5_SCRHT/3,d2
	move.b	#p5_OUTCOL,d3
	CALLTCS	DrwCrcl2

	movea.l	DI0Adr,a0
	move.w	#p5_SCRWD/2+20,d0
	move.w	#p5_SCRHT/2,d1
	move.w	#p5_SCRHT/3,d2
	move.b	#p5_INCOL,d3
	CALLTCS	DrwCrcl

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



*******************************************************************************
* p5m_fill 1.0.1
*******************************************************************************
* INFO	fills an area
* OUT	ccr	eq=end
*******************************************************************************

p5m_fill	movem.l	d0-d1/a0-a1/a6,-(sp)
	movea.l	DI0Adr,a0
	move.b	#p5_CLRCOL0,d0
	CALLTCS	ClrScr0
	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.w	#p5_SCRWD-1,d2
	move.w	#p5_SCRHT-1,d3
	move.b	#p5_BRDRCOL,d4
	CALLTCS	DrwFrm0

	movea.l	DI0Adr,a0
	lea.l	p5_area,a1
	move.b	#p5_BRDRCOL,d0
	CALLTCS	DrwPlgn0

	movea.l	DI0Adr,a0
	move.w	#p5_SCRWD/2,d0
	move.w	#p5_SCRHT/2,d1
	move.b	#p5_OUTCOL,d2
	CALLTCS	FillArea0

	movea.l	DI0Adr,a0
	CALLTCS	CPUFRPass0

	WTLMB	.exit

	movea.l	DI0Adr,a0
	move.b	#p5_CLRCOL0,d0
	CALLTCS	ClrScr0
	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.w	#p5_SCRWD-1,d2
	move.w	#p5_SCRHT-1,d3
	move.b	#p5_BRDRCOL,d4
	CALLTCS	DrwFrm0

	movea.l	DI0Adr,a0
	lea.l	p5_area,a1
	move.b	#p5_BRDRCOL,d0
	CALLTCS	DrwPlgn0

	movea.l	DI0Adr,a0
	move.w	#p5_SCRWD/2,d0
	move.w	#p5_SCRHT/2,d1
	move.b	#p5_OUTCOL,d2
	CALLTCS	FillArea

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



*******************************************************************************
* p5c 0.0.0
*******************************************************************************

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

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



*******************************************************************************
* p5m_WpScr 0.0.0
*******************************************************************************
* INFO	wps the scr and drws the clp zn
*******************************************************************************

p5_WpScr	movem.l	d0-d4/a0-a1/a6,-(sp)
	movea.l	DI0Adr,a0
	move.b	#p5_CLRCOL0,d0
	CALLTCS	ClrScr0
	movea.l	DI0Adr,a0
	move.w	#p5_CLPLF,d0
	move.w	#p5_CLPTOP,d1
	move.w	#p5_CLPRT,d2
	move.w	#p5_CLPBTM,d3
	move.b	#p5_CLRCOL1,d4
	CALLTCS	DrwFrm2
	movea.l	DI0Adr,a0
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.w	#p5_SCRWD-1,d2
	move.w	#p5_SCRHT-1,d3
	move.b	#p5_BRDRCOL,d4
	CALLTCS	DrwFrm0
	movem.l	(sp)+,d0-d4/a0-a1/a6
	rts
