srt0.s revision 1.1 1 /* $NetBSD: srt0.s,v 1.1 1998/06/09 07:53:06 dbj 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 /*
33 * Startup code for standalone system
34 */
35
36 .globl _mg | struct prominfo
37 .globl _end
38 .globl _edata
39 .globl _main
40
41 .text
42 .globl start
43
44 start:
45 || clear bss (this shouldn't hurt us i.e. cause an exception)
46 movel #_edata,a2 | start of BSS
47 movel #_end,a3 | end
48 Lclr:
49 clrb a2@+ | clear BSS
50 cmpl a2,a3 | done?
51 bne Lclr | no, keep going
52
53 movl #0x0808,d0
54 movc d0,cacr | clear and disable on-chip cache(s)
55
56 || catch exceptions myself
57 movec vbr, a3
58 movel a3, save_vbr | save register for restoration
59 lea vectbl, a4
60 movel a3@(4),a4@(4) | copy mg, just for sure
61 movel a3@(180),a4@(180) | copy vector for trap #13
62 movel a3@(124),a4@(124) | copy vector for int 7
63 movec a4,vbr | use the new table
64
65 || save mg as pi
66 movel a3@(4),_mg
67
68 || make sure we disallow interrupts
69 movew #0x2600,sr
70
71 || let's go
72 movel sp@(4),sp@- | copy the argument we got
73 jsr _main | call C
74 addql #4,sp
75
76 || restore prom vectors
77 movel save_vbr, a0
78 movec a0,vbr
79
80 || return kernel start address (still in d0)
81 rts
82
83 .globl __halt
84 __halt:
85 movel save_vbr, a0
86 movec a0,vbr | restore prom vbr
87 hloop:
88 movel #halt, d0
89 trap #13 | halt the system
90 bra hloop | and don't allow continuation
91
92 .globl _trap
93 trap:
94 moveml d0-d7/a0-a7,sp@- | save all registers
95
96 movel sp,sp@- | push pointer to registers
97 jsr _trap | call C to handle things (dump regs)
98 addql #4,sp
99 tstl d0
100 jeq Lstop
101 moveml sp@+,d0-d7/a0-a7
102 rte
103 Lstop:
104 bra Lstop | don't move
105
106 .data
107 save_vbr:
108 .long 0
109 halt:
110 .asciz "-h"
111 vectbl: | copy of vector table (can't use .fill)
112 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
113 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
114 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
115 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
116 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
117 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
118 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
119 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
120 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
121 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
122 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
123 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
124 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
125 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
126 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
127 .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
128