;=======T=======T========================T==========================================;
;Name:      DPKernel StartUp file.
;Author:    Paul Manias.
;Date:      October 1997.
;Copyright: DreamWorld Productions (c) 1996-1997.  All rights reserved.

	INCDIR	"INCLUDES:"
	INCLUDE	"dpkernel/dpkernel.i"

	xref	_main
	xref	_ProgVersion
	xref	_ProgRevision
	xref	_ProgAuthor
	xref	_ProgCopyright
	xref	_ProgDate
	xref	_ProgName
	xref	_ProgShort

	xdef	_BLTBase
	xdef	_DPKBase
	xdef	_FILBase
	xdef	_GVBase
	xdef	_SCRBase
	xdef	_SNDBase
	xdef	_BLTModule
	xdef	_FILModule
	xdef	_SCRModule
	xdef	_SNDModule
	xdef	_SysBase
	xdef	_Table
	xdef	__XCEXIT

	SECTION	"DPKStart",CODE

;===================================================================================;
;                            SPECIAL STARTUP CODE
;===================================================================================;

Start:	bra.s	StartAmigaDOS

_Table:	dc.l	"PRGM"	;ID Header.
	dc.w	1	;Version number.
	dc.w	JMP_LVO	;Type of jump table to get from DPK.
	dc.l	StartDPKernel	;Start of program.
_DPKBase:
	dc.l	0	;DPKBase.
	dc.l	_ProgName	;Name of the program.
	dc.l	_ProgAuthor	;Who wrote the program.
	dc.l	_ProgDate	;Date of compilation.
	dc.l	_ProgCopyright	;Copyright details.
	dc.l	_ProgShort	;Short description of program.
	dc.w	DPKVersion	;Minimum required DPKernel version.
	dc.w	DPKRevision	;Minimum required DPKernel revision.
_GVBase	dc.l	0	;Global variable base.

StartDPKernel:
	MOVEM.L	D0-D7/A0-A6,-(SP)
	move.l	($4).w,_SysBase
	bra.s	Launch

StartAmigaDOS
	MOVEM.L	D0-D7/A0-A6,-(SP)
	move.l	($4).w,_SysBase
	move.l	_SysBase(pc),a6	;a6 = ExecBase
	lea	DPKName(pc),a1	;a1 = Library name.
	moveq	#$00,d0	;d0 = Any version.
	jsr	-552(a6)	;>> = OpenLibrary()
	move.l	d0,_GVBase	;ma = Save global variable base.
	move.l	d0,_DPKBase	;ma = Save base.
	beq.s	ErrDPK	;>> = Error, exit.
	move.w	#1,DOS

	move.l	d0,a6	;a6 = DPKBase.
	lea	Exit(pc),a0	;a0 = Pointer to SelfDestruct() cleanup.
	move.l	a7,a1	;a1 = Stack pointer.
	CALL	InitDestruct	;>> = Initialise the call.

Launch:	move.l	_DPKBase(pc),a6
	moveq	#MOD_SCREENS,d0
	sub.l	a0,a0
	CALL	OpenModule
	move.l	d0,_SCRModule
	beq.s	Exit
	move.l	d0,a5
	move.l	MOD_ModBase(a5),_SCRBase

	moveq	#MOD_SOUND,d0
	sub.l	a0,a0
	CALL	OpenModule
	move.l	d0,_SNDModule
	beq.s	Exit
	move.l	d0,a5
	move.l	MOD_ModBase(a5),_SNDBase

	moveq	#MOD_BLITTER,d0
	sub.l	a0,a0
	CALL	OpenModule
	move.l	d0,_BLTModule
	beq.s	Exit
	move.l	d0,a5
	move.l	MOD_ModBase(a5),_BLTBase

	moveq	#MOD_FILES,d0
	sub.l	a0,a0
	CALL	OpenModule
	move.l	d0,_FILModule
	beq.s	Exit
	move.l	d0,a5
	move.l	MOD_ModBase(a5),_FILBase

	move.l	_DPKBase(pc),a6
	jsr	_main

__XCEXIT:
Exit:	move.l	_DPKBase(pc),a6	;a6 = DPKBase
	move.l	_FILModule(pc),a0
	CALL	Free
	move.l	_SCRModule(pc),a0
	CALL	Free
	move.l	_BLTModule(pc),a0
	CALL	Free
	move.l	_SNDModule(pc),a0
	CALL	Free

	tst.w	DOS
	beq.s	ErrDPK
	CALL	CloseDPK
ErrDPK:	MOVEM.L	(SP)+,D0-D7/A0-A6
	moveq	#$00,d0
	rts

DOS:		dc.w  0

_BLTBase:	dc.l  0
_FILBase:	dc.l  0
_SCRBase:	dc.l  0
_SNDBase:	dc.l  0
_SysBase:	dc.l  0

_BLTModule:	dc.l  0
_FILModule:	dc.l  0
_SCRModule:	dc.l  0
_SNDModule:	dc.l  0

DPKName:	dc.b  "GMS:libs/dpkernel.library",0
		even

