שתשת                                        ***************************************
*********  Startup Code 2.6  ********** ====== 	MUST BE CALLED AS SUBROUTINE
***************************************		(USER & SUPERVISOR, PC-REL)
******  Coded by Aga/Elven 11   ******* ====== 	CPU:		MC68000+ 
******  - updated 09/03/1997 -  ******* ====== 	Libs:		V32+
*************************************** ====== 	ChipSet:	OCS+

	IFND	LM
LM		set	0
	ENDC
	IFND	Supervisor
Supervisor	set	0
	ENDC
	IFND	Recurse
Recurse		set	0
	ENDC

_Startup:

._LVOSupervisor		equ	-30
._LVOOldOpenLibrary	equ	-408
._LVOLoadView		equ	-222
._LVOWaitTOF		equ	-270
._LVOOwnBlitter		equ	-456
._LVOWaitBlit		equ	-228
._GB_ActiView		equ	34
._AttnFlags		equ	296
._AFB_68010		equ	0

	IFEQ	Supervisor-1
	PRINTT	"MC680x0 Supervisor mode."
	move.l	4.w,a6
	move.l	(sp),_SuperRet
	lea	.Super(pc),a5
	jsr	._LVOSupervisor(a6)
	move.l	_SuperRet(pc),(sp)
	rts
.Super:	move.l	_SuperRet(pc),-(sp)
	ELSE
	PRINTT	"MC680x0 User mode."
	ENDC
	IFEQ	Recurse
	move.l	4.w,a6
	lea	_IntName(pc),a1
	jsr	._LVOOldOpenLibrary(a6)
	lea	_IntBase(pc),a5
	move.l	d0,(a5)
	beq.w	.Bye
	lea	_GfxName(pc),a1
	jsr	._LVOOldOpenLibrary(a6)
	lea	_GfxBase(pc),a5
	move.l	d0,(a5)
	beq.w	.Bye
	move.l	d0,a6
	jsr	._LVOWaitTOF(a6)
	lea	_OSView(pc),a5
	move.l	._GB_ActiView(a6),(a5)
	sub.l	a1,a1
	jsr	._LVOLoadView(a6)
	jsr	._LVOWaitTOF(a6)
	jsr	._LVOWaitTOF(a6)
	jsr	._LVOOwnBlitter(a6)
	jsr	._LVOWaitBlit(a6)
	ELSE
	bsr.w	waitvbl
	bsr.w	waitblit
	ENDC
	lea	$dff000,a6
	move.w	#$7fff,$9c(a6)
	lea	_IntEna(pc),a5
	move.w	$1c(a6),(a5)
	lea	_DMACon(pc),a5
	move.w	$2(a6),(a5)
	lea	_ADkCon(pc),a5
	move.w	$10(a6),(a5)
	IFEQ	LM-1
	PRINTT	"Leave CIAB-Music ON..."
	move.w	#%0001100001111111,$9a(a6)
	move.w	#%0111110111110000,$96(a6)
	ELSE
	move.w	#$7fff,$9a(a6)
	move.w	#$7fff,$96(a6)
	ENDC
	move.w	#$7fff,$9e(a6)
	lea	$144(a6),a0
	moveq	#8-1,d0
.SprLp:	clr.l	(a0)
	addq.w	#4*2,a0
	dbra	d0,.SprLp
	move.l	4.w,a6
	btst	#._AFB_68010,._AttnFlags+1(a6)
	beq.s	.No010
	lea	.GetCR_010(pc),a5
	jsr	._LVOSupervisor(a6)
.No010:	move.l	_VBR(pc),a0
	lea	$64(a0),a0
	lea	_OSAutoVecs(pc),a1
	lea	_NewAutoVecs(pc),a2
	moveq	#7-1,d0
.IntLp:	move.l	(a0)+,(a1)+
	move.l	(a2)+,d1
	beq.s	.NoVec
	move.l	d1,-4(a0)
.NoVec:	dbra	d0,.IntLp
	move.l	_VBR(pc),a0
	move.l	$80(a0),d0
	lea	.GetCR(pc),a5
	move.l	a5,$80(a0)
	trap	#0
	move.l	d0,$80(a0)
	lea	_SP(pc),a0
	lea	4(sp),a1
	move.l	a1,(a0)
.Bye:	rts

.GetCR_010:
	dc.l	$4e7a0801	;movec	vbr,d0
	lea	_VBR(pc),a5
	move.l	d0,(a5)
	dc.l	$4e7a0002	;movec	cacr,d0
	lea	_CacR(pc),a5
	move.l	d0,(a5)
	rte
.GetCR:
	move.l	sp,d1
	lea	.CalcTrapStackFrame(pc),a5
	move.l	a5,$80(a0)
	trap	#0
	lea	(sp,d1.w),a1
	lea	_SSP(pc),a5
	move.l	a1,(a5)
	lea	_SR(pc),a5
	move.w	(sp),(a5)
	rte
.CalcTrapStackFrame:
	sub.l	sp,d1
	lea	_TrapStackFrame(pc),a5
	move.w	d1,(a5)
	rte

_SuperRet:
	dc.l	0
;-------------------------------------- 
_Quit:

._LVOCloseLibrary	equ	-414
._LVOLoadView		equ	-222
._LVOWaitTOF		equ	-270
._LVORethinkDisplay	equ	-390
._LVODisownBlitter	equ	-462
._GB_CopInit		equ	$26
._GB_LoFList		equ	$32
._AttnFlags		equ	296
._AFB_68010		equ	0

	bsr.w	waitvbl
	bsr.w	waitblit
	lea	$dff000,a6
	IFEQ	LM-1
	move.w	#%0001100001111111,$9c(a6)
	move.w	#%0001100001111111,$9a(a6)
	move.w	#%0111110111110000,$96(a6)
	ELSE
	move.w	#$7fff,$9c(a6)
	move.w	#$7fff,$9a(a6)
	move.w	#$7fff,$96(a6)
	ENDC
	move.w	#$7fff,$9e(a6)
	move.l	(sp),a2
	move.l	_VBR(pc),a0
	move.l	$80(a0),d0
	move.l	#.SetCR,$80(a0)
	trap	#0
	move.l	d0,$80(a0)
	move.l	_SP(pc),sp
	pea	(a2)
	lea	$64(a0),a0
	lea	_OSAutoVecs(pc),a1
	moveq	#7-1,d0
.IntLp:	move.l	(a1)+,(a0)+
	dbra	d0,.IntLp
	lea	$dff000,a6
	IFEQ	Recurse
	move.l	_GfxBase(pc),a1
	move.l	._GB_CopInit(a1),$80(a6)
	move.l	._GB_LoFList(a1),$84(a6)
	move.w	d0,$88(a6)
	ENDC
	move.w	_ADkCon(pc),d0
	or.w	#$8000,d0
	move.w	d0,$9e(a6)
	move.w	_DMACon(pc),d0
	or.w	#$8000,d0
	move.w	d0,$96(a6)
	move.w	_IntEna(pc),d0
	or.w	#$8000,d0
	move.w	d0,$9a(a6)
	IFEQ	Recurse
	move.l	_GfxBase(pc),a6
	jsr	._LVODisownBlitter(a6)
	jsr	._LVOWaitTOF(a6)
	move.l	_OSView(pc),a1
	jsr	._LVOLoadView(a6)
	jsr	._LVOWaitTOF(a6)
	jsr	._LVOWaitTOF(a6)
	move.l	_IntBase(pc),a6
	jsr	._LVORethinkDisplay(a6)
	move.l	4.w,a6
	move.l	_GfxBase(pc),a1
	jsr	._LVOCloseLibrary(a6)	
	move.l	_IntBase(pc),a1
	jsr	._LVOCloseLibrary(a6)
	ENDC
	IFEQ	Supervisor-1
	move.l	(sp)+,_SuperRet
	rte
	ENDC
	rts
.SetCR:
	move.l	4.w,a6
	btst	#._AFB_68010,._AttnFlags+1(a6)
	beq.s	.No010
	move.l	_CacR(pc),d1
	dc.l	$4e7b1002	;movec	d1,CacR
.No010:	move.w	_TrapStackFrame(pc),d1
	lea	(sp,d1.w),a1
	move.l	_SSP(pc),sp
	lsr.w	#1,d1
	subq.w	#1,d1
.SFCopy:move.w	-(a1),-(sp)
	dbra	d1,.SFCopy
	move.w	_SR(pc),(sp)
	rte

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

	cnop	0,4
_GfxBase:	ds.l	1
_IntBase:	ds.l	1
_GfxName:	dc.b	"graphics.library",0
_IntName:	dc.b	"intuition.library",0
	cnop	0,4
_IntEna:	ds.w	1
_DMACon:	ds.w	1
_ADkCon:	ds.w	1
_OSView:	ds.l	1
_VBR:		dc.l	0
_CacR:		ds.l	1
_SR:		ds.w	1
_SP:		ds.l	1
_SSP:		ds.l	1
_TrapStackFrame:ds.w	1
_OSAutoVecs:	ds.l	7

;"_NewAutoVecs:" needed...
