1 /* $NetBSD: machdep.c,v 1.14 2006/07/20 13:21:38 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_362: 103 cp = "362"; break; 104 case HP_370: 105 cp = "370"; break; 106 case HP_375: 107 cp = "375"; break; 108 case HP_380: 109 cp = "380"; break; 110 case HP_382: 111 cp = "382"; break; 112 case HP_385: 113 cp = "385"; break; 114 case HP_400: 115 cp = "400"; break; 116 case HP_425: 117 switch (mmuid) { 118 case MMUID_425_T: 119 cp = "425t"; break; 120 case MMUID_425_S: 121 cp = "425s"; break; 122 case MMUID_425_E: 123 cp = "425e"; break; 124 default: 125 cp = "425"; break; 126 } 127 break; 128 case HP_433: 129 switch (mmuid) { 130 case MMUID_433_T: 131 cp = "433t"; break; 132 case MMUID_433_S: 133 cp = "433s"; break; 134 default: 135 cp = "433"; break; 136 } 137 break; 138 default: 139 cp = "???"; break; 140 } 141 return cp; 142 } 143 144 int userom; 145 146 int 147 trap(struct trapframe *fp) 148 { 149 static int intrap = 0; 150 151 if (intrap) 152 return 0; 153 intrap = 1; 154 155 #if 0 156 userom = 1; 157 #endif 158 159 printf("Got unexpected trap: format=%x vector=%x ps=%x pc=%x\n", 160 fp->tf_format, fp->tf_format, fp->tf_sr, fp->tf_pc); 161 printf("dregs: %x %x %x %x %x %x %x %x\n", 162 fp->tf_regs[0], fp->tf_regs[1], 163 fp->tf_regs[2], fp->tf_regs[3], 164 fp->tf_regs[4], fp->tf_regs[5], 165 fp->tf_regs[6], fp->tf_regs[7]); 166 printf("aregs: %x %x %x %x %x %x %x %x\n", 167 fp->tf_regs[8], fp->tf_regs[9], 168 fp->tf_regs[10], fp->tf_regs[11], 169 fp->tf_regs[12], fp->tf_regs[13], 170 fp->tf_regs[14], fp->tf_regs[15]); 171 172 #if 0 173 userom = 0; 174 #endif 175 176 intrap = 0; 177 return 0; 178 } 179 180 #define ROWS 24 181 #define COLS 80 182 183 void 184 romputchar(int c) 185 { 186 static char buf[COLS]; 187 static int col = 0, row = 0; 188 int i; 189 190 switch (c) { 191 case '\0': 192 break; 193 case '\r': 194 break; /* ignore */ 195 case '\n': 196 for (i = col; i < COLS-1; i++) 197 buf[i] = ' '; 198 buf[i] = '\0'; 199 romout(row, buf); 200 col = 0; 201 if (++row == ROWS) 202 row = 0; 203 break; 204 205 case '\t': 206 do { 207 romputchar(' '); 208 } while (col & 7); 209 break; 210 211 default: 212 buf[col] = c; 213 if (++col == COLS-1) 214 romputchar('\n'); 215 break; 216 } 217 } 218 219 void 220 machdep_start(char *entry, int howto, char *loadaddr, char *ssym, char *esym) 221 { 222 223 /* Adjust entry point. */ 224 transfer(entry, howto, opendev, cons_scode, loadaddr, esym); 225 } 226 227 void 228 transfer(char *entry, int howto, int od, int csc, char *lr, char *es) 229 { 230 231 printf("Entry point: 0x%lx\n", (u_long)entry); 232 233 #ifdef EXEC_DEBUG 234 printf("\n\nReturn to boot...\n"); 235 (void)getchar(); 236 #endif 237 238 _transfer(entry, howto, od, csc, lr, es); 239 } 240