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