machdep.c revision 1.12 1 /* $NetBSD: machdep.c,v 1.12 2005/02/20 13:59:27 tsutsui Exp $ */
2
3 /*
4 * Copyright (c) 1982, 1986, 1990, 1993
5 * The Regents of the University of California. All rights reserved.
6 *
7 * This code is derived from software contributed to Berkeley by
8 * the Systems Programming Group of the University of Utah Computer
9 * Science Department.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in the
18 * documentation and/or other materials provided with the distribution.
19 * 3. Neither the name of the University nor the names of its contributors
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 *
35 * from: Utah $Hdr: machdep.c 1.10 92/06/18
36 *
37 * @(#)machdep.c 8.1 (Berkeley) 6/10/93
38 */
39 /*
40 * Copyright (c) 1988 University of Utah.
41 *
42 * This code is derived from software contributed to Berkeley by
43 * the Systems Programming Group of the University of Utah Computer
44 * Science Department.
45 *
46 * Redistribution and use in source and binary forms, with or without
47 * modification, are permitted provided that the following conditions
48 * are met:
49 * 1. Redistributions of source code must retain the above copyright
50 * notice, this list of conditions and the following disclaimer.
51 * 2. Redistributions in binary form must reproduce the above copyright
52 * notice, this list of conditions and the following disclaimer in the
53 * documentation and/or other materials provided with the distribution.
54 * 3. All advertising materials mentioning features or use of this software
55 * must display the following acknowledgement:
56 * This product includes software developed by the University of
57 * California, Berkeley and its contributors.
58 * 4. Neither the name of the University nor the names of its contributors
59 * may be used to endorse or promote products derived from this software
60 * without specific prior written permission.
61 *
62 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
63 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
64 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
65 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
66 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
67 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
68 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
69 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
70 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
71 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
72 * SUCH DAMAGE.
73 *
74 * from: Utah $Hdr: machdep.c 1.10 92/06/18
75 *
76 * @(#)machdep.c 8.1 (Berkeley) 6/10/93
77 */
78
79 #include <sys/param.h>
80 #include <lib/libsa/stand.h>
81 #include <hp300/stand/common/samachdep.h>
82
83 char *
84 getmachineid(void)
85 {
86 extern int machineid;
87 char *cp;
88
89 switch (machineid) {
90 case HP_320:
91 cp = "320"; break;
92 case HP_330:
93 cp = "318/319/330"; break;
94 case HP_340:
95 cp = "340"; break;
96 case HP_345:
97 cp = "345"; break;
98 case HP_350:
99 cp = "350"; break;
100 case HP_360:
101 cp = "360"; break;
102 case HP_370:
103 cp = "370"; break;
104 case HP_375:
105 cp = "375"; break;
106 case HP_380:
107 cp = "380"; break;
108 case HP_385:
109 cp = "385"; break;
110 case HP_400:
111 cp = "400"; break;
112 case HP_425:
113 switch (mmuid) {
114 case MMUID_425_T:
115 cp = "425t"; break;
116 case MMUID_425_S:
117 cp = "425s"; break;
118 case MMUID_425_E:
119 cp = "425e"; break;
120 default:
121 cp = "425"; break;
122 }
123 break;
124 case HP_433:
125 switch (mmuid) {
126 case MMUID_433_T:
127 cp = "433t"; break;
128 case MMUID_433_S:
129 cp = "433s"; break;
130 default:
131 cp = "433"; break;
132 }
133 break;
134 default:
135 cp = "???"; break;
136 }
137 return cp;
138 }
139
140 int userom;
141
142 int
143 trap(struct trapframe *fp)
144 {
145 static int intrap = 0;
146
147 if (intrap)
148 return 0;
149 intrap = 1;
150
151 #if 0
152 userom = 1;
153 #endif
154
155 printf("Got unexpected trap: format=%x vector=%x ps=%x pc=%x\n",
156 fp->tf_format, fp->tf_format, fp->tf_sr, fp->tf_pc);
157 printf("dregs: %x %x %x %x %x %x %x %x\n",
158 fp->tf_regs[0], fp->tf_regs[1],
159 fp->tf_regs[2], fp->tf_regs[3],
160 fp->tf_regs[4], fp->tf_regs[5],
161 fp->tf_regs[6], fp->tf_regs[7]);
162 printf("aregs: %x %x %x %x %x %x %x %x\n",
163 fp->tf_regs[8], fp->tf_regs[9],
164 fp->tf_regs[10], fp->tf_regs[11],
165 fp->tf_regs[12], fp->tf_regs[13],
166 fp->tf_regs[14], fp->tf_regs[15]);
167
168 #if 0
169 userom = 0;
170 #endif
171
172 intrap = 0;
173 return 0;
174 }
175
176 #define ROWS 24
177 #define COLS 80
178
179 void
180 romputchar(int c)
181 {
182 static char buf[COLS];
183 static int col = 0, row = 0;
184 int i;
185
186 switch (c) {
187 case '\0':
188 break;
189 case '\r':
190 break; /* ignore */
191 case '\n':
192 for (i = col; i < COLS-1; i++)
193 buf[i] = ' ';
194 buf[i] = '\0';
195 romout(row, buf);
196 col = 0;
197 if (++row == ROWS)
198 row = 0;
199 break;
200
201 case '\t':
202 do {
203 romputchar(' ');
204 } while (col & 7);
205 break;
206
207 default:
208 buf[col] = c;
209 if (++col == COLS-1)
210 romputchar('\n');
211 break;
212 }
213 }
214
215 void
216 machdep_start(char *entry, int howto, char *loadaddr, char *ssym, char *esym)
217 {
218
219 /* Adjust entry point. */
220 transfer(entry, howto, opendev, cons_scode, loadaddr, esym);
221 }
222
223 void
224 transfer(char *entry, int howto, int od, int csc, char *lr, char *es)
225 {
226
227 printf("Entry point: 0x%lx\n", (u_long)entry);
228
229 #ifdef EXEC_DEBUG
230 printf("\n\nReturn to boot...\n");
231 (void)getchar();
232 #endif
233
234 _transfer(entry, howto, od, csc, lr, es);
235 }
236