*
* $Header: DH0:src/omti/dist/src/startup/1.3/RCS/StartUp.a,v 1.1 92/11/25 02:11:57 Barnard Exp $
*
*
*

*
* newstartup.a, written 1989 by Michael Schröder
*
*


* Mountet CON, RAW, NEWCON, SER, PAR, PRT, RAM,
*         DFn, eine Festplatte

* und Assignt ':','SYS','LIBS","DEVS","FONTS","C","L","S"
* laedt System-Configuration
* oeffnet NEWCON: / NewShell Window
* gibt Copyright aus


sta				dc.l	(en-sta)/4			; BCPL- Laenge des Codes

intro			bra.s	start

configtable		dc.l	(hardenv-sta)		; Zeiger auf die Mount-Tabelle der Platte

start			moveq.l	#156/4,d0
				bsr		gobc
				lsl.l	#2,d1
				move.l	d1,a3
				moveq.l	#5+21+5,d1
				move.l	#$10001,d2
				moveq.l	#76/4,d0
				bsr		gobc
				move.l	d1,24(a3)
				addq.l	#5,d1
				move.l	d1,(a3)
				add.l	#22,d1
				move.l	d1,12(a1)
				clr.l	8(a3)
				clr.l	12(a3)
				clr.l	16(a3)
				moveq.l	#56/4,d0
				bsr		gobc
				move.l	(a3),a0
				add.l	a0,a0
				add.l	a0,a0
				moveq.l	#20,d0
				move.l	d0,(a0)+
				move.l	d1,(a0)
				move.l	d1,a0
				move.l	d1,8(a1)
				moveq.l	#1,d0
				move.l	d0,140-92(a0)	;CLI	Task	1
				move.l	128-92(a0),a4
				add.l	a4,a4
				add.l	a4,a4
				move.l	12(a1),a0
				add.l	a0,a0
				add.l	a0,a0
				move.l	#24,-4(a0)
				move.l	(a4)+,(a0)+
				move.l	(a4)+,(a0)+
				move.l	(a4)+,(a0)+
				move.l	(a4)+,(a0)+
				move.l	(a4),(a0)
				move.l	(a4)+,20(a1)
				move.l	(a4)+,16(a1)
				move.l	(a4)+,28(a3)
				move.l	(a4)+,20(a3)
				move.l	(a4)+,(a1)
				move.l	(a4)+,4(a1)
				move.l	(a4)+,4(a3)
				move.l	8(a1),a0
				move.l	12(a1),128-92(a0)
				clr.l	168-92(a0)
				move.l	16(a1),d3
				moveq.l	#0,d2
				lea		conn(pc),a0
				move.l	a0,d1
				bsr		mountdev2
				move.l	16(a1),d3
				moveq.l	#1,d2
				lea		rawn(pc),a0
				move.l	a0,d1
				bsr		mountdev2
				move.l	#1000,d5
				move.l	4(a1),d3
				moveq.l	#0,d2
				lea		newconn(pc),a0
				move.l	a0,d1
				bsr		mountdev3
				move.l	#800,d3
				moveq.l	#0,d2
				lea		sern(pc),a0
				move.l	a0,d1
				bsr		mountport
				move.l	#800,d3
				moveq.l	#1,d2
				lea		parn(pc),a0
				move.l	a0,d1
				bsr		mountport
				move.l	#1000,d3
				moveq.l	#2,d2
				lea		prtn(pc),a0
				move.l	a0,d1
				bsr		mountport
				lea		intuiname(pc),a0
				move.l	a0,316(a1)
				clr.l	d4
				clr.l	d3
				clr.l	d2
				move.l	#-552,d1
				moveq.l	#352/4,d0
				bsr		gobc
				move.l	d1,368(a2)

				moveq.l	#-1,d7
startdrivel		tst.l	d7
				bpl		nor1
				move.l	(a1),d3
				moveq.l	#10,d2
				move.l	#4000,d4
				lea		ffsn(pc),a4
				move.l	a4,d1
				moveq.l	#-72/4,d0
				bsr		gobc
				bra		std1
nor1			moveq.l	#4,d1
				moveq.l	#116/4,d0
				bsr		gobc
				move.l	d1,a0
				add.l	a0,a0
				add.l	a0,a0
				move.l	#3,(a0)+
				move.l	12(a1),a4
				add.l	a4,a4
				add.l	a4,a4
				move.l	4(a4),(a0)+
				move.l	8(a4),(a0)+
				move.l	28(a3),(a0)+
				move.l	d1,-(a7)
				moveq.l	#52/4,d0
				bsr		gobc
				move.l	d1,316(a1)
				move.l	#210,d2
				lea		fsn(pc),a4
				move.l	a4,d4
				lsr.l	#2,d4
				moveq.l	#10,d3
				move.l	(a7)+,d1
				moveq.l	#132/4,d0
				bsr		gobc
std1			move.l	d1,-(a7)
				moveq.l	#3,d1
				moveq.l	#116/4,d0
				bsr		gobc
				move.l	d1,a0
				add.l	a0,a0
				add.l	a0,a0
				move.l	d7,(a0)
				lea		devn(pc),a4
				move.l	a4,d5
				lea		env(pc),a4
				move.l	a4,d6
				tst.l	d7
				bpl.s	noomt2

				clr.l	d2
				move.b	MountUnit(pc),d2
				move.l	d2,(a0)			; MountUnit eintragen

				lea		harddevn(pc),a4
				move.l	a4,d5
				lea		hardenv(pc),a4
				move.l	a4,d6
noomt2			lsr.l	#2,d5
				lsr.l	#2,d6
				move.l	d5,4(a0)
				move.l	d6,8(a0)
				clr.l	12(a0)			; Unit-Feld loeschen
				move.l	(a7)+,d2
				move.l	d1,-(a7)
				move.l	d1,324(a1)
				move.l	#$fc0000/4,328(a1)
				moveq.l	#192/4,d0
				bsr		gobc
				tst.l	d1
				bne.s	stdriok
				move.l	(a7)+,d1
				moveq.l	#120/4,d0
				bsr		gobc
				bra		weida
stdriok			move.l	d2,-(a7)
				tst.l	d7
				bpl.s	flopp
				lea		hardn(pc),a4
				bra.s	flopp2
flopp			lea		df0n(pc),a4
flopp2			move.l	a4,d1
				clr.l	d3
				bsr		mount
				move.l	(a7)+,d1
				move.l	(a7)+,28(a0)
				move.l	40(a0),a0
				add.l	a0,a0
				add.l	a0,a0
				tst.l	d7
				bmi.s	hard
				add.b	d7,3(a0)
hard			move.l	8(a1),a0
				tst.l	168-92(a0)
				beq.s	makeassign
				tst.l	d7
				bne		weida
				move.l	d1,168-92(a0)
				bra		weida
makeassign		move.l	d1,168-92(a0)
				lea		doppel(pc),a4
				move.l	a4,d4
				lea		sysn(pc),a4
				move.l	a4,d1
				bsr		assign2
				lea		libsn(pc),a4
				move.l	a4,d1
				bsr		assign
				lea		devsn(pc),a4
				move.l	a4,d1
				bsr		assign
				lea		fontsn(pc),a4
				move.l	a4,d1
				bsr		assign
				lea		cn(pc),a4
				move.l	a4,d1
				bsr		assign
				lea		ln(pc),a4
				move.l	a4,d1
				bsr		assign
				lea		sn(pc),a4
				move.l	a4,d1
				bsr		assign
weida			addq.l	#1,d7
				cmp.b	#4,d7
				bne		startdrivel

				clr.l	d5
				move.l	#300,d4
				lea		ramhn(pc),a0
				move.l	a0,d3
				clr.l	d2
				lea		ramn(pc),a0
				move.l	a0,d1
				bsr		mounthand
				lea		confign(pc),a0
				move.l	a0,d1
				lsr.l	#2,d1
				moveq.l	#236/4,d0			; GetPacket (?)
				bsr		gobc
				tst.l	d1
				beq.s	noconfig
				move.l	d1,d7
				lea	24(a1),a0
				move.l	a0,d2
				move.l	#233,d3
				moveq.l	#-12/4,d0			; Examine (?)
				bsr		gobc
				subq.l	#1,d3
				cmp.l	d3,d1
				bne.s	notval
				move.l	a0,316(a1)
				moveq.l	#1,d4
				move.l	#-324,d2
				move.l	368(a2),d1
				moveq.l	#412/4,d0
				bsr		gobc
notval			move.l	d7,d1
				moveq.l	#372/4,d0
				bsr		gobc
noconfig		lea		clin(pc),a4
				move.l	a4,d1
				move.l	20(a1),d2
				bsr		makeres
				lea		restartn(pc),a4
				move.l	a4,d1
				move.l	20(a3),d2
				bsr		makeres
				lea		filehandn(pc),a4
				move.l	a4,d1
				move.l	28(a3),d2
				bsr		makeres

				move.l	8(a1),a3

				clr.l	184-92(a3)
				clr.l	152-92(a3)
				move.l	172-92(a3),a0
				add.l	a0,a0
				add.l	a0,a0
				lea		con(pc),a4
				move.l	a4,d1
				lsr.l	#2,d1
				moveq.l	#240/4,d0				: CurrentDir (?)
				bsr		gobc
				tst.l	d1
				bne.s	winok
				lea		$fc0002,a5
				move.l	4,a6
				jmp	-30(a6)

winok			move.l	d1,48(a0)
				move.l	d1,56(a0)
				move.l	d1,160-92(a3)
				lsl.l	#2,d1
				move.l	d1,a4
				move.l	8(a4),164-92(a3)
				lea		ast(pc),a4
				move.l	a4,d1
				lsr.l	#2,d1
				moveq.l	#236/4,d0				; GetPacket (?)
				bsr		gobc
				move.l	d1,28(a0)
				move.l	d1,32(a0)
				move.l	d1,156-92(a3)
				clr.l	44(a0)
				clr.l	8(a0)
				clr.l	12(a0)
				moveq.l	#10,d0
				move.l	d0,20(a0)
				clr.l	(a0)
				move.l	#4000,52(a0)
				lea		sysdopn(pc),a4
				move.l	a4,d1
				lsr.l	#2,d1
				moveq.l	#432/4,d0
				bsr		gobc
				move.l	d1,152-92(a3)
				move.l	36(a0),a3
				add.l	a3,a3
				add.l	a3,a3
				clr.b	(a3)
				clr.l	60(a0)
				move.l	24(a0),a3
				add.l	a3,a3
				add.l	a3,a3
				move.l	#$04254e3e,(a3)+
				move.b	#' ',(a3)
				lsl.l	#2,d1
				beq.s	nolo
				move.l	d1,a3
				move.l	16(a3),a3
				add.l	a3,a3
				add.l	a3,a3
				move.l	40(a3),d1
				move.l	4(a0),d2
				moveq.l	#460/4,d0
				bsr		gobc
				lsl.l	#2,d2
				move.l	d2,a3
				clr.l	d0
				move.b	(a3),d0
				addq.b	#1,(a3)+
				add.l	d0,a3
				move.b	#':',(a3)
nolo			lea		copyr(pc),a4
				move.l	a4,d1
				lsr.l	#2,d1
				moveq.l	#296/4,d0
				bsr		gobc
				lea		startn(pc),a4
				move.l	a4,d1
				lsr.l	#2,d1
				moveq.l	#236/4,d0				; GetPacket (?)
				bsr		gobc
				tst.l	d1
				beq.s	nostartup
				move.l	d1,32(a0)
nostartup		clr.l	d1
				sub.l	a0,a0
				jmp		(a6)



***********	Assign
*				d1:	Directory
*				d4:	Name

assign			move.l	d1,d4
assign2			move.l	d1,d5
				moveq.l	#424/4,d0
				lsr.l	#2,d1
				bsr		gobc
				moveq.l	#1,d3
				move.l	d1,d2
				move.l	d5,d1

***********	Mount	**********
*				d1:	name
*				d2:	task
*				d3:	type
*				(d4:	Dirname)

mount			lsr.l	#2,d1
				moveq.l	#340/4,d0
				bsr		gobc
				lsl.l	#2,d1
				move.l	d1,a0
				move.l	d3,4(a0)
				move.l	d2,8(a0)
				clr.l	d1
				subq.l	#1,d3
				bne.s	noassign
				move.l	d4,d1
				lsr.l	#2,d1
				moveq.l	#432/4,d0
				bsr		gobc
noassign		move.l	d1,12(a0)
				rts

************	Mountport
*				d1:name
*				d2:startup
*				d3:stacksize
mountport		move.l	d3,d4
				move.l	a2,d5
				lsr.l	#2,d5
				lea		porthn(pc),a4
				move.l	a4,d3

************	Mounthand
*				d1:	name
*				d2:	startup
*				d3:	handlername
*				d4:	stacksize
*				d5:	GV
mounthand		move.l	d5,d7
				move.l	d4,d5
				move.l	d3,d4
				clr.l	d3
				clr.l	d6

***********	Mountdev
*				d1:	name
*				d2:	startup
*				d3:	segl
*				d4:	handler
*				d5:	stacksize
*				d6:	pri
*				d7:	GV
mountdev		movem.l	d2/d3,-(a7)
				clr.l	d2
				clr.l	d3
				bsr		mount
				movem.l	(a7)+,d2/d3
				movem.l	d2/d3/d7,28(a0)
				lsr.l	#2,d4
				movem.l	d4/d5/d6,16(a0)
				rts

***********	Mountdev2
*				d1:	name
*				d2:	startup
*				d3:	seglist
mountdev2		move.l	#700,d5

***********	Mountdev3
*				d1:	name
*				d2:	startup
*				d3:	seglist
*				d5:	stacksize

mountdev3		clr.l	d4
				moveq.l	#5,d6
				move.l	a2,d7
				lsr.l	#2,d7
				bra.s	mountdev

************	makeres
*				d1:	name
*				d2:	segment
makeres			move.l	d1,a0
				clr.l	d1
				move.b	(a0),d1
				lsr.l	#2,d1
				addq.l	#4,d1
				move.l	d2,d3
				move.l	#$10001,d2
				moveq.l	#76/4,d0
				bsr		gobc
				movem.l	a1/a2,-(a7)
				move.l	a0,a1
				move.l	d1,a0
				add.l	a0,a0
				add.l	a0,a0
				moveq.l	#-1,d0
				move.l	d0,4(a0)
				move.l	d3,8(a0)
				clr.l	d0
				lea		12(a0),a2
				move.b	(a1),d0
rcl				move.b	(a1)+,(a2)+
				dbf		d0,rcl
				move.l	24(a3),a1
				add.l	a1,a1
				add.l	a1,a1
				move.l	16(a1),(a0)
				move.l	d1,16(a1)
				movem.l	(a7)+,a1/a2
				rts


* gobc ruft eine Routine aus der internen DOS-Library auf

gobc			movem.l	d2-d7/a0/a3,-(a7)		; rette D2-D7, A0 und A3
				lsl.w	#2,d0					; D0 von BCPL auf Standard
				move.l	0(a2,d0.w),a4			; Adresse berechnen und nach A4
				move.l	#300,d0					;
				sub.l	a0,a0					; A0 loeschen
				jsr		(a5)					; Routine aufrufen
				movem.l	(a7)+,d2-d7/a0/a3		; Register wieder restoren
				rts


copyr			cnop	0,4
				dc.b	copye-copyr-1,'Copyright (C) 1985, 1986, Commodore-Amiga, Inc.',10
				dc.b	'Resident Hardboot from Omti.device',10
				dc.b	'All rights reversed - Release 1.2b',10
copye

				cnop	0,4
startn			dc.b	18,'S:Startup-Sequence'

				cnop	0,4
con				dc.b	27,'NEWCON:0/0/640/256/AmigaDOS'

				cnop	0,4
ast				dc.b	1,'*'

				cnop	0,4
df0n			dc.b	3,'DF0'

				cnop	0,4
sysdopn			dc.b	4,'SYS:'

				cnop	0,4
clin			dc.b	3,'CLI'

				cnop	0,4
restartn		dc.b	7,'Restart'

				cnop	0,4
filehandn		dc.b	11,'FileHandler'

				cnop	0,4
sysn			dc.b	3,'SYS'

				cnop	0,4
doppel			dc.b	1,':'

				cnop	0,4
libsn			dc.b	4,'LIBS'

				cnop	0,4
devsn			dc.b	4,'DEVS'

				cnop	0,4
fontsn			dc.b	5,'FONTS'

				cnop	0,4
cn				dc.b	1,'C'

				cnop	0,4
ln				dc.b	1,'L'

				cnop	0,4
sn				dc.b	1,'S'

				cnop	0,4
porthn			dc.b	14,'L:Port-Handler'

				cnop	0,4
ramhn			dc.b	13,'L:Ram-Handler'

				cnop	0,4
ramn			dc.b	3,'RAM'

				cnop	0,4
conn			dc.b	3,'CON'

				cnop	0,4
newconn			dc.b	6,'NEWCON'

				cnop	0,4
rawn			dc.b	3,'RAW'

				cnop	0,4
sern			dc.b	3,'SER'

				cnop	0,4
parn			dc.b	3,'PAR'

				cnop	0,4
prtn			dc.b	3,'PRT'

				cnop	0,4
confign			dc.b	25,'DEVS:system-configuration'

				cnop	0,4
ffsn			dc.b	'Fast File System',0

				cnop	0,4
fsn				dc.b	11,'File System'

				cnop	0,4
devn			dc.b	17,'trackdisk.device',0

				cnop	0,4
harddevn		dc.b	12,'omti.device',0

				cnop	0,4

env				dc.l	12
				dc.l	128
				dc.l	0
				dc.l	2
				dc.l	1
				dc.l	11
				dc.l	2
				dc.l	11
				dc.l	0
				dc.l	0
				dc.l	79
				dc.l	5
				dc.l	3
				cnop	0,4

* Environment fuer Festplatte (DosEnvec)

hardenv			dc.l	16			; Size of Environment vector
				dc.l	128			; in longwords: standard value is 128
				dc.l	0			; not used; must be 0
				dc.l	4			; # of heads (surfaces). drive specific
				dc.l	1			; not used; must be 1
				dc.l	26			; blocks per track. drive specific
				dc.l	2			; DOS reserved blocks at start of partition.
				dc.l	0			; DOS reserved blocks at end of partition
				dc.l	0			; usually 0
				dc.l	515			; starting cylinder. typically 0
				dc.l	613			; max cylinder. drive specific
				dc.l	100			; Initial # DOS of buffers.
				dc.l	1			; type of mem to allocate for buffers
				dc.l	256			; Max number of bytes to transfer at a time
				dc.l	$fffffffe	; Address Mask to block out certain memory
				dc.l	0			; Boot priority for autoboot
				dc.l	$444f5301	; ASCII (HEX) string showing filesystem type

hardn			dc.b	3,'DH1'

MountUnit		dc.b	0			; Unit Number for OpenDevice

intuiname		dc.b	'intuition.library',0

				cnop	0,4
				dc.l	0
				dc.l	532/4
				dc.l	intro-sta
				dc.l	536/4
en				end
