*******************************************************************************
* init 0.0.1
*******************************************************************************
* OUT	ccr	ne=OK, eq=ERROR
*******************************************************************************

init	movem.l	d0-d7/a0-a6,-(sp)
	movea.l	4.w,a6
	lea.l	DOSNm,a1
	moveq.l	#37,d0
	jsr	(-552,a6)	;OpenLibrary(...)
	move.l	d0,_DOSBase
	beq	.exit
	lea.l	GfxNm,a1
	moveq.l	#37,d0
	jsr	(-552,a6)	;OpenLibrary(...)
	move.l	d0,_GfxBase
	beq	.exit
	lea.l	TCSNm,a1
	moveq.l	#1,d0
	jsr	(-552,a6)	;OpenLibrary(...)
	move.l	d0,_TCSBase
	beq.s	.exit

	movea.l	_DOSBase,a6
	moveq.l	#40,d1
	jsr	(-198,a6)	;Delay(40)

	movea.l	_GfxBase,a6
	move.l	($22,a6),_SysView	;gb_ActiView
	suba.l	a1,a1
	jsr	(-222,a6)	;LoadView(NULL)
	jsr	(-270,a6)	;WaitTOF()
	jsr	(-270,a6)	;WaitTOF()
	jsr	(-456,a6)	;OwnBlitter()
	jsr	(-228,a6)	;WaitBlit()

	movea.l	4.w,a6
	jsr	(-132,a6)	;Forbid()
	jsr	(-120,a6)	;Disable()

	move.w	$dff01c,_SysINTENA
	move.w	#$7fff,$dff09a	;clr INTENA.all
	move.w	#$7fff,$dff09c	;clr INTREQ.all
	move.w	$dff002,_SysDMACON
	move.w	#$7fff,$dff096	;clr DMACON.all
	move.w	#$8210,$dff096	;set DMACON.DMAEN/DSKEN
	move.w	#$d00a,$dff09a	;set INTENA.INTEN/DSKSYN/PORTS/DSKBLK

	bsr	GetVBR
	lea.l	([_VBR.l],$64.w),a0	;1st autovec adr
	movem.l	(a0),d1-d7	;get sys autovecs 1-7
	lea.l	_SysVecs,a0
	movem.l	d1-d7,(a0)	;store them

	move.w	#0,ccr	;OK
.exit	movem.l	(sp)+,d0-d7/a0-a6
	rts



*******************************************************************************
* ClnUp 0.0.1
*******************************************************************************

ClnUp	movem.l	d0-d7/a0-a6,-(sp)
	tst.l	_TCSBase
	beq.s	.ClsLibs	;if TCS.library not opnd...

	lea.l	_SysVecs,a0	;get sys
	movem.l	(a0),d1-d7	;autovecs
	lea.l	([_VBR.l],$64.w),a0	;1st autovec adr
	movem.l	d1-d7,(a0)	;rest them

	move.w	#$7fff,$dff09a	;clr INTENA.all
	move.w	#$7fff,$dff09c	;clr INTREQ.all
	move.w	#$7fff,$dff096	;clr DMACON.all
	move.w	_SysDMACON,d0
	ori.w	#$8000,d0
	move.w	d0,$dff096	;rest sys DMACON
	move.w	_SysINTENA,d0
	ori.w	#$c000,d0
	move.w	d0,$dff09a	;rest sys INTENA

	movea.l	4.w,a6
	jsr	(-126,a6)	;Enable()
	jsr	(-138,a6)	;Permit()

	movea.l	_GfxBase,a6
	jsr	(-462,a6)	;DisownBlitter()

	movea.l	_GfxBase,a6
	movea.l	_SysView,a1
	jsr	(-222,a6)	;LoadView(_SysView)
	jsr	(-270,a6)	;WaitTOF()
	jsr	(-270,a6)	;WaitTOF()
	move.l	([_GfxBase.l],$26.w),$dff080 ;gb_copinit
	move.w	#1,$dff088	;rest sys coplst

.ClsLibs	movea.l	4.w,a6
	movea.l	_TCSBase,a1
	tst.l	a1
	beq.s	.exit
	jsr	(-414,a6)	;CloseLibrary(...)
	movea.l	_GfxBase,a1
	tst.l	a1
	beq.s	.exit
	jsr	(-414,a6)	;CloseLibrary(...)
	movea.l	_DOSBase,a1
	tst.l	a1
	beq.s	.exit
	jsr	(-414,a6)	;CloseLibrary(...)

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



*******************************************************************************
* GetVBR 0.0.0
*******************************************************************************
* OUT	_VBR.l	variable holding the VBR
*******************************************************************************

GetVBR	movem.l	a5-a6,-(sp)
	movea.l	4.w,a6
	btst.b	#0,($129,a6)
	beq.s	.exit	;if 68000...
	lea.l	(_GetVBR,pc),a5
	jsr	(-30,a6)	;Supervisor()
.exit	movem.l	(sp)+,a5-a6
	rts

_GetVBR	movec.l	vbr,a5
	move.l	a5,_VBR
	rte



*******************************************************************************
* LdPix 0.0.0
*******************************************************************************
* INFO	lds a lst of ILBMs
* IN	a2.l	ptr to NULL-termd lst of flnms adrs
*	a3.l	ptr to vec for storing ILBMs' ILBMInfo strc ptrs
* OUT	ccr	ne=OK, eq=ERROR!
* NOTE	the dst vec must have at least as many items as flnms!
*******************************************************************************

LdPix	movem.l	d0-d1/a0-a3/a6,-(sp)
.LdPic	movea.l	(a2)+,a0	;get pic fl nm adr
	tst.l	a0
	beq.s	.OK	;if none...
	suba.l	a1,a1
	CALLTCS	LdILBM	;ld pic
	move.l	d0,(a3)+	;store ILBMInfo strc adr
	cmpi.l	#TCS_PE_OK,d0
	bhs.s	.LdPic	;if not err...
	move.w	#4,ccr
	bra.s	.exit
.OK	move.w	#0,ccr
.exit	movem.l	(sp)+,d0-d1/a0-a3/a6
	rts



*******************************************************************************
* UnLdPix 0.0.0
*******************************************************************************
* INFO	unlds a lst of ILBMs
* IN	a2.l	ptr to NULL-termd lst of ILBMInfo strcs
*******************************************************************************

UnLdPix	movem.l	d0-d1/a0-a2/a6,-(sp)
.UnLdPic	movea.l	(a2)+,a0
	tst.l	a0
	beq.s	.exit
	CALLTCS	UnLdILBM
	bra.s	.UnLdPic
.exit	movem.l	(sp)+,d0-d1/a0-a2/a6
	rts



*****************************************************************************
* RdMsePort
*****************************************************************************
* INFO	rets the vals of the dev in mse port
* OUT	d0.b,d1.b	x,y shf
*****************************************************************************

RdMsePort	movem.l	a0/d2-d3,-(sp)
	move.w	$dff00a,d1	;get coo
	lea.l	(.OldMseCoo,pc),a0
	move.b	d1,d0	;cpy x
	lsr.w	#8,d1	;y
	move.b	(a0),d2	;get old x
	move.b	d0,(a0)+	;store new x
	move.b	(a0),d3	;get old y
	sub.b	d2,d0	;XOfs
	move.b	d1,(a0)	;store new y
	sub.b	d3,d1	;YOfs
	movem.l	(sp)+,a0/d2-d3
	rts

.OldMseCoo	dc.b	0,0
