xref: /csrg-svn/sys/vax/stand/srt0.c (revision 30547)
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*30547Skarels  *	@(#)srt0.c	7.2 (Berkeley) 02/21/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
26326Sbill 
27326Sbill 	.set	HIGH,31		# mask for total disable
28326Sbill 
292438Swnj entry:	.globl	entry
30326Sbill 	.word	0x0
31326Sbill 	mtpr	$HIGH,$IPL		# just in case
323349Swnj #ifdef REL
333349Swnj 	movl	$RELOC,sp
343349Swnj #else
353349Swnj 	movl	$RELOC-0x2400,sp
363349Swnj #endif
372438Swnj start:
383349Swnj 	movl	aedata,r0
39411Sbill clr:
40411Sbill 	clrl	(r0)+
41411Sbill 	cmpl	r0,sp
42411Sbill 	jlss	clr
433349Swnj #ifdef REL
4412366Ssam 	movc3	aedata,*$0,(sp)
4512366Ssam /*
4612366Ssam  * Reclear bss segment separately from text and data
4712366Ssam  * since movc3 can't move more than 64K bytes
4812366Ssam  */
4912366Ssam dclr:
5012366Ssam 	clrl	(r3)+
5112366Ssam 	cmpl	r3,$_end
5212366Ssam 	jlss	dclr
5312366Ssam /* this loop shouldn't be necessary, but is when booting from an ra81 */
5412366Ssam xclr:
5512366Ssam 	clrl	(r3)+
5612366Ssam 	cmpl	r3,$0x100000
5712366Ssam 	jlss	xclr
583349Swnj 	jmp	*abegin
593349Swnj begin:
603349Swnj #endif
613349Swnj 	mtpr	$0,$SCBB
623263Swnj 	calls	$0,_configure
633349Swnj 	movl	$1,_openfirst
64326Sbill 	calls	$0,_main
653349Swnj #ifndef TP
66326Sbill 	jmp	start
673349Swnj #else
683349Swnj 	ret
693349Swnj #endif
70326Sbill 
713349Swnj 	.data
723349Swnj #ifdef REL
733349Swnj abegin:	.long	begin
743349Swnj aedata:	.long	_edata-RELOC
753349Swnj #else
763349Swnj aedata:	.long	_edata
773349Swnj #endif
783349Swnj 
79326Sbill __rtt:
80326Sbill 	.word	0x0
8125442Skarels #ifdef	REL
8225442Skarels 	halt
8325442Skarels #else
84326Sbill 	jmp	start
8525442Skarels #endif
863349Swnj 
87*30547Skarels 	.globl	_badaddr
88*30547Skarels _badaddr:
893349Swnj 	.word	0
903349Swnj 	movl	$1,r0
913349Swnj 	movl	4(ap),r3
92*30547Skarels 	movl	8(ap),r4
933349Swnj 	movl	$4,r2
943349Swnj 	movab	9f,(r2)
95*30547Skarels 	bbc	$0,r4,1f; tstb	(r3)
96*30547Skarels 1:	bbc	$1,r4,1f; tstw	(r3)
97*30547Skarels 1:	bbc	$2,r4,1f; tstl	(r3)
983349Swnj 1:	clrl	r0			# made it w/o machine checks
993349Swnj 2:	movl	$4,r2
1003349Swnj 	clrl	(r2)
1013349Swnj 	ret
1023349Swnj 	.align	2
1033349Swnj 9:
1043349Swnj 	casel	_cpu,$1,$VAX_MAX
1053349Swnj 0:
1063349Swnj 	.word	8f-0b		# 1 is 780
1073349Swnj 	.word	5f-0b		# 2 is 750
1087446Sroot 	.word	5f-0b		# 3 is 730
10924153Sbloom 	.word	6f-0b		# 4 is 8600
1103349Swnj 5:
1113349Swnj 	mtpr	$0xf,$MCESR
1123349Swnj 	brb	1f
11324153Sbloom 6:
11424153Sbloom 	mtpr	$0,$EHSR
11524153Sbloom 	brb	1f
1163349Swnj 8:
1173349Swnj 	mtpr	$0,$SBIFS
1183349Swnj 1:
1193349Swnj 	addl2	(sp)+,sp		# discard mchchk trash
1203349Swnj 	movab	2b,(sp)
1213349Swnj 	rei
122