xref: /csrg-svn/sys/vax/stand/srt0.c (revision 30770)
123242Smckusick /*
229309Smckusick  * Copyright (c) 1982, 1986 Regents of the University of California.
323242Smckusick  * All rights reserved.  The Berkeley software License Agreement
423242Smckusick  * specifies the terms and conditions for redistribution.
523242Smckusick  *
6*30770Skarels  *	@(#)srt0.c	7.3 (Berkeley) 04/02/87
723242Smckusick  */
8326Sbill 
99186Ssam #include "../vax/mtpr.h"
103349Swnj #define	LOCORE
119186Ssam #include "../vax/cpu.h"
123263Swnj 
131914Swnj /*
141914Swnj  * Startup code for standalone system
151914Swnj  * Non-relocating version -- for programs which are loaded by boot
1625442Skarels  * Relocating version for boot*
171914Swnj  */
18326Sbill 
193349Swnj 	.globl	_end
201757Sbill 	.globl	_edata
21326Sbill 	.globl	_main
22326Sbill 	.globl	__rtt
233263Swnj 	.globl	_configure
243349Swnj 	.globl	_cpu
253349Swnj 	.globl	_openfirst
26*30770Skarels 	.globl	_boothowto
27*30770Skarels 	.globl	_bootdev
28326Sbill 
29326Sbill 	.set	HIGH,31		# mask for total disable
30326Sbill 
312438Swnj entry:	.globl	entry
32326Sbill 	.word	0x0
33326Sbill 	mtpr	$HIGH,$IPL		# just in case
343349Swnj #ifdef REL
353349Swnj 	movl	$RELOC,sp
363349Swnj #else
373349Swnj 	movl	$RELOC-0x2400,sp
383349Swnj #endif
392438Swnj start:
403349Swnj 	movl	aedata,r0
41411Sbill clr:
42411Sbill 	clrl	(r0)+
43411Sbill 	cmpl	r0,sp
44411Sbill 	jlss	clr
453349Swnj #ifdef REL
4612366Ssam 	movc3	aedata,*$0,(sp)
4712366Ssam /*
4812366Ssam  * Reclear bss segment separately from text and data
4912366Ssam  * since movc3 can't move more than 64K bytes
5012366Ssam  */
5112366Ssam dclr:
5212366Ssam 	clrl	(r3)+
5312366Ssam 	cmpl	r3,$_end
5412366Ssam 	jlss	dclr
5512366Ssam /* this loop shouldn't be necessary, but is when booting from an ra81 */
5612366Ssam xclr:
5712366Ssam 	clrl	(r3)+
5812366Ssam 	cmpl	r3,$0x100000
5912366Ssam 	jlss	xclr
603349Swnj 	jmp	*abegin
613349Swnj begin:
623349Swnj #endif
63*30770Skarels 	movl	r11,_boothowto
64*30770Skarels 	movl	r10,_bootdev
65*30770Skarels again:
663349Swnj 	mtpr	$0,$SCBB
673263Swnj 	calls	$0,_configure
683349Swnj 	movl	$1,_openfirst
69326Sbill 	calls	$0,_main
70*30770Skarels #ifdef REL
71*30770Skarels 	jmp	again
723349Swnj #else
733349Swnj 	ret
743349Swnj #endif
75326Sbill 
763349Swnj 	.data
773349Swnj #ifdef REL
783349Swnj abegin:	.long	begin
793349Swnj aedata:	.long	_edata-RELOC
803349Swnj #else
813349Swnj aedata:	.long	_edata
823349Swnj #endif
83*30770Skarels _bootdev:	.long	0
84*30770Skarels _boothowto:	.long	0
85*30770Skarels 	.text
863349Swnj 
87326Sbill __rtt:
88326Sbill 	.word	0x0
8925442Skarels #ifdef	REL
9025442Skarels 	halt
9125442Skarels #else
92326Sbill 	jmp	start
9325442Skarels #endif
943349Swnj 
9530547Skarels 	.globl	_badaddr
9630547Skarels _badaddr:
973349Swnj 	.word	0
983349Swnj 	movl	$1,r0
993349Swnj 	movl	4(ap),r3
10030547Skarels 	movl	8(ap),r4
1013349Swnj 	movl	$4,r2
1023349Swnj 	movab	9f,(r2)
10330547Skarels 	bbc	$0,r4,1f; tstb	(r3)
10430547Skarels 1:	bbc	$1,r4,1f; tstw	(r3)
10530547Skarels 1:	bbc	$2,r4,1f; tstl	(r3)
1063349Swnj 1:	clrl	r0			# made it w/o machine checks
1073349Swnj 2:	movl	$4,r2
1083349Swnj 	clrl	(r2)
1093349Swnj 	ret
1103349Swnj 	.align	2
1113349Swnj 9:
1123349Swnj 	casel	_cpu,$1,$VAX_MAX
1133349Swnj 0:
1143349Swnj 	.word	8f-0b		# 1 is 780
1153349Swnj 	.word	5f-0b		# 2 is 750
1167446Sroot 	.word	5f-0b		# 3 is 730
11724153Sbloom 	.word	6f-0b		# 4 is 8600
1183349Swnj 5:
1193349Swnj 	mtpr	$0xf,$MCESR
1203349Swnj 	brb	1f
12124153Sbloom 6:
12224153Sbloom 	mtpr	$0,$EHSR
12324153Sbloom 	brb	1f
1243349Swnj 8:
1253349Swnj 	mtpr	$0,$SBIFS
1263349Swnj 1:
1273349Swnj 	addl2	(sp)+,sp		# discard mchchk trash
1283349Swnj 	movab	2b,(sp)
1293349Swnj 	rei
130