xref: /netbsd/sys/arch/next68k/stand/boot/srt0.s (revision bf9ec67e)
1/*	$NetBSD: srt0.s,v 1.2 2001/05/12 22:35:30 chs Exp $	*/
2/*
3 * Copyright (c) 1994 Rolf Grossmann
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 * 3. All advertising materials mentioning features or use of this software
15 *    must display the following acknowledgement:
16 *      This product includes software developed by Rolf Grossmann.
17 * 4. The name of the author may not be used to endorse or promote products
18 *    derived from this software without specific prior written permission
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#include <machine/asm.h>
33
34/*
35 * Startup code for standalone system
36 */
37
38	.text
39ASENTRY_NOPROFILE(start)
40	|| clear bss (this should not hurt us i.e. cause an exception)
41	movel	#_C_LABEL(edata),%a2	| start of BSS
42	movel	#_C_LABEL(end),%a3	| end
43Lclr:
44	clrb	%a2@+			| clear BSS
45	cmpl	%a2,%a3			| done?
46	bne	Lclr			| no, keep going
47
48	movl	#0x0808,%d0
49	movc	%d0,%cacr		| clear and disable on-chip cache(s)
50
51	|| catch exceptions myself
52	movec	%vbr,%a3
53	movel	%a3,save_vbr		| save register for restoration
54	lea	vectbl,%a4
55	movel	%a3@(4),%a4@(4)		| copy mg, just for sure
56	movel	%a3@(180),%a4@(180)	| copy vector for trap #13
57	movel	%a3@(124),%a4@(124)	| copy vector for int 7
58	movec	%a4,%vbr		| use the new table
59
60	|| save mg as pi
61	movel	%a3@(4),_C_LABEL(mg)
62
63	|| make sure we disallow interrupts
64	movew	#0x2600,%sr
65
66	|| away we go
67	movel	%sp@(4),%sp@-		| copy the argument we got
68	jsr	_C_LABEL(main)		| call C
69	addql	#4,%sp
70
71	|| restore prom vectors
72	movel	save_vbr,%a0
73	movec	%a0,%vbr
74
75	|| return kernel start address (still in d0)
76	rts
77
78ENTRY(_halt)
79	movel	save_vbr,%a0
80	movec	%a0,%vbr		| restore prom vbr
81hloop:
82	movel	#halt,%d0
83	trap	#13			| halt the system
84	bra	hloop			| and do not allow continuation
85
86ASENTRY_NOPROFILE(astrap)
87	moveml	%d0-%d7/%a0-%a7,%sp@-	| save all registers
88
89	movel	%sp,%sp@-		| push pointer to registers
90	jsr	_C_LABEL(trap)		| call C to handle things (dump regs)
91	addql   #4,%sp
92	tstl    %d0
93	jeq     Lstop
94	moveml  %sp@+,%d0-%d7/%a0-%a7
95	rte
96Lstop:
97	bra	Lstop			| stay here
98
99	.data
100save_vbr:
101	.long 0
102halt:
103	.asciz "-h"
104
105#define TRAP16 \
106	VECTOR(astrap); VECTOR(astrap); VECTOR(astrap); VECTOR(astrap); \
107	VECTOR(astrap); VECTOR(astrap); VECTOR(astrap); VECTOR(astrap); \
108	VECTOR(astrap); VECTOR(astrap); VECTOR(astrap); VECTOR(astrap); \
109	VECTOR(astrap); VECTOR(astrap); VECTOR(astrap); VECTOR(astrap);
110
111vectbl:
112	TRAP16
113	TRAP16
114	TRAP16
115	TRAP16
116	TRAP16
117	TRAP16
118	TRAP16
119	TRAP16
120	TRAP16
121	TRAP16
122	TRAP16
123	TRAP16
124	TRAP16
125	TRAP16
126	TRAP16
127	TRAP16
128