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