[0074691a] | 1 | /* |
---|
| 2 | * $Id$ |
---|
| 3 | * |
---|
| 4 | * Re-written the gen68302 start-up code. |
---|
| 5 | * |
---|
| 6 | * Uses gas syntax only, removed the OAR asm.h. |
---|
| 7 | * |
---|
| 8 | * Supplies a complete vector table in ROM. |
---|
| 9 | * |
---|
| 10 | * Manages all vectors with seperate handlers to trap unhandled |
---|
| 11 | * execptions. |
---|
| 12 | * |
---|
| 13 | * Uses the target specific header file to get the runtime |
---|
| 14 | * configuration |
---|
| 15 | * |
---|
| 16 | * COPYRIGHT (c) 1996 |
---|
| 17 | * Objective Design Systems Pty Ltd (ODS) |
---|
| 18 | * |
---|
| 19 | * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. |
---|
| 20 | * On-Line Applications Research Corporation (OAR). |
---|
| 21 | * All rights assigned to U.S. Government, 1994. |
---|
| 22 | * |
---|
| 23 | * This material may be reproduced by or for the U.S. Government pursuant |
---|
| 24 | * to the copyright license under the clause at DFARS 252.227-7013. This |
---|
| 25 | * notice must appear in all copies of this file and its derivatives. |
---|
| 26 | * |
---|
| 27 | */ |
---|
| 28 | |
---|
| 29 | | |
---|
| 30 | | some basic defined, this is that is required |
---|
| 31 | | |
---|
| 32 | #define MC68302_BAR 0x000000F2 |
---|
| 33 | #define MC68302_BAR_FC_CFC 0x0000 |
---|
| 34 | #define MC68302_SYS_RAM_SIZE 0x240 |
---|
| 35 | |
---|
| 36 | | |
---|
| 37 | | Boot boot code in a special section, ld postions |
---|
| 38 | | |
---|
| 39 | | Initial stack pointer is in the dual ported RAM |
---|
| 40 | | |
---|
| 41 | .sect .text |
---|
| 42 | |
---|
| 43 | .global M68Kvec | Vector Table |
---|
| 44 | |
---|
| 45 | M68Kvec: | standard location for vectors |
---|
| 46 | |
---|
| 47 | | |
---|
| 48 | | Make relative, can have the code positioned any where |
---|
| 49 | | |
---|
| 50 | |
---|
| 51 | V___ISSP: .long MC68302_BASE + MC68302_SYS_RAM_SIZE |
---|
| 52 | V____IPC: .long start - V___ISSP |
---|
| 53 | |
---|
| 54 | | |
---|
| 55 | | Create the rest of the vector table to point to the unhandled expection |
---|
| 56 | | handler |
---|
| 57 | | |
---|
| 58 | | Lots of macros, how-ever it creates a simple ROM vector table |
---|
| 59 | | |
---|
| 60 | |
---|
| 61 | exception_handler = unhandled_exception - V___ISSP |
---|
| 62 | #define MAKE_EXCEPTION_VECTOR(n) V___##n: .long (exception_handler + (n * 8)) |
---|
| 63 | |
---|
| 64 | MAKE_EXCEPTION_VECTOR(2) |
---|
| 65 | MAKE_EXCEPTION_VECTOR(3) |
---|
| 66 | MAKE_EXCEPTION_VECTOR(4) |
---|
| 67 | MAKE_EXCEPTION_VECTOR(5) |
---|
| 68 | MAKE_EXCEPTION_VECTOR(6) |
---|
| 69 | MAKE_EXCEPTION_VECTOR(7) |
---|
| 70 | MAKE_EXCEPTION_VECTOR(8) |
---|
| 71 | MAKE_EXCEPTION_VECTOR(9) |
---|
| 72 | |
---|
| 73 | MAKE_EXCEPTION_VECTOR(10) |
---|
| 74 | MAKE_EXCEPTION_VECTOR(11) |
---|
| 75 | MAKE_EXCEPTION_VECTOR(12) |
---|
| 76 | MAKE_EXCEPTION_VECTOR(13) |
---|
| 77 | MAKE_EXCEPTION_VECTOR(14) |
---|
| 78 | MAKE_EXCEPTION_VECTOR(15) |
---|
| 79 | MAKE_EXCEPTION_VECTOR(16) |
---|
| 80 | MAKE_EXCEPTION_VECTOR(17) |
---|
| 81 | MAKE_EXCEPTION_VECTOR(18) |
---|
| 82 | MAKE_EXCEPTION_VECTOR(19) |
---|
| 83 | |
---|
| 84 | MAKE_EXCEPTION_VECTOR(20) |
---|
| 85 | MAKE_EXCEPTION_VECTOR(21) |
---|
| 86 | MAKE_EXCEPTION_VECTOR(22) |
---|
| 87 | MAKE_EXCEPTION_VECTOR(23) |
---|
| 88 | MAKE_EXCEPTION_VECTOR(24) |
---|
| 89 | MAKE_EXCEPTION_VECTOR(25) |
---|
| 90 | MAKE_EXCEPTION_VECTOR(26) |
---|
| 91 | MAKE_EXCEPTION_VECTOR(27) |
---|
| 92 | MAKE_EXCEPTION_VECTOR(28) |
---|
| 93 | MAKE_EXCEPTION_VECTOR(29) |
---|
| 94 | |
---|
| 95 | MAKE_EXCEPTION_VECTOR(30) |
---|
| 96 | MAKE_EXCEPTION_VECTOR(31) |
---|
| 97 | MAKE_EXCEPTION_VECTOR(32) |
---|
| 98 | MAKE_EXCEPTION_VECTOR(33) |
---|
| 99 | MAKE_EXCEPTION_VECTOR(34) |
---|
| 100 | MAKE_EXCEPTION_VECTOR(35) |
---|
| 101 | MAKE_EXCEPTION_VECTOR(36) |
---|
| 102 | MAKE_EXCEPTION_VECTOR(37) |
---|
| 103 | MAKE_EXCEPTION_VECTOR(38) |
---|
| 104 | MAKE_EXCEPTION_VECTOR(39) |
---|
| 105 | |
---|
| 106 | MAKE_EXCEPTION_VECTOR(40) |
---|
| 107 | MAKE_EXCEPTION_VECTOR(41) |
---|
| 108 | MAKE_EXCEPTION_VECTOR(42) |
---|
| 109 | MAKE_EXCEPTION_VECTOR(43) |
---|
| 110 | MAKE_EXCEPTION_VECTOR(44) |
---|
| 111 | MAKE_EXCEPTION_VECTOR(45) |
---|
| 112 | MAKE_EXCEPTION_VECTOR(46) |
---|
| 113 | MAKE_EXCEPTION_VECTOR(47) |
---|
| 114 | MAKE_EXCEPTION_VECTOR(48) |
---|
| 115 | MAKE_EXCEPTION_VECTOR(49) |
---|
| 116 | |
---|
| 117 | MAKE_EXCEPTION_VECTOR(50) |
---|
| 118 | MAKE_EXCEPTION_VECTOR(51) |
---|
| 119 | MAKE_EXCEPTION_VECTOR(52) |
---|
| 120 | MAKE_EXCEPTION_VECTOR(53) |
---|
| 121 | MAKE_EXCEPTION_VECTOR(54) |
---|
| 122 | MAKE_EXCEPTION_VECTOR(55) |
---|
| 123 | MAKE_EXCEPTION_VECTOR(56) |
---|
| 124 | MAKE_EXCEPTION_VECTOR(57) |
---|
| 125 | MAKE_EXCEPTION_VECTOR(58) |
---|
| 126 | MAKE_EXCEPTION_VECTOR(59) |
---|
| 127 | |
---|
| 128 | MAKE_EXCEPTION_VECTOR(60) |
---|
| 129 | MAKE_EXCEPTION_VECTOR(61) |
---|
| 130 | MAKE_EXCEPTION_VECTOR(62) |
---|
| 131 | MAKE_EXCEPTION_VECTOR(63) |
---|
| 132 | MAKE_EXCEPTION_VECTOR(64) |
---|
| 133 | MAKE_EXCEPTION_VECTOR(65) |
---|
| 134 | MAKE_EXCEPTION_VECTOR(66) |
---|
| 135 | MAKE_EXCEPTION_VECTOR(67) |
---|
| 136 | MAKE_EXCEPTION_VECTOR(68) |
---|
| 137 | MAKE_EXCEPTION_VECTOR(69) |
---|
| 138 | |
---|
| 139 | MAKE_EXCEPTION_VECTOR(70) |
---|
| 140 | MAKE_EXCEPTION_VECTOR(71) |
---|
| 141 | MAKE_EXCEPTION_VECTOR(72) |
---|
| 142 | MAKE_EXCEPTION_VECTOR(73) |
---|
| 143 | MAKE_EXCEPTION_VECTOR(74) |
---|
| 144 | MAKE_EXCEPTION_VECTOR(75) |
---|
| 145 | MAKE_EXCEPTION_VECTOR(76) |
---|
| 146 | MAKE_EXCEPTION_VECTOR(77) |
---|
| 147 | MAKE_EXCEPTION_VECTOR(78) |
---|
| 148 | MAKE_EXCEPTION_VECTOR(79) |
---|
| 149 | |
---|
| 150 | MAKE_EXCEPTION_VECTOR(80) |
---|
| 151 | MAKE_EXCEPTION_VECTOR(81) |
---|
| 152 | MAKE_EXCEPTION_VECTOR(82) |
---|
| 153 | MAKE_EXCEPTION_VECTOR(83) |
---|
| 154 | MAKE_EXCEPTION_VECTOR(84) |
---|
| 155 | MAKE_EXCEPTION_VECTOR(85) |
---|
| 156 | MAKE_EXCEPTION_VECTOR(86) |
---|
| 157 | MAKE_EXCEPTION_VECTOR(87) |
---|
| 158 | MAKE_EXCEPTION_VECTOR(88) |
---|
| 159 | MAKE_EXCEPTION_VECTOR(89) |
---|
| 160 | |
---|
| 161 | MAKE_EXCEPTION_VECTOR(90) |
---|
| 162 | MAKE_EXCEPTION_VECTOR(91) |
---|
| 163 | MAKE_EXCEPTION_VECTOR(92) |
---|
| 164 | MAKE_EXCEPTION_VECTOR(93) |
---|
| 165 | MAKE_EXCEPTION_VECTOR(94) |
---|
| 166 | MAKE_EXCEPTION_VECTOR(95) |
---|
| 167 | MAKE_EXCEPTION_VECTOR(96) |
---|
| 168 | MAKE_EXCEPTION_VECTOR(97) |
---|
| 169 | MAKE_EXCEPTION_VECTOR(98) |
---|
| 170 | MAKE_EXCEPTION_VECTOR(99) |
---|
| 171 | |
---|
| 172 | MAKE_EXCEPTION_VECTOR(100) |
---|
| 173 | MAKE_EXCEPTION_VECTOR(101) |
---|
| 174 | MAKE_EXCEPTION_VECTOR(102) |
---|
| 175 | MAKE_EXCEPTION_VECTOR(103) |
---|
| 176 | MAKE_EXCEPTION_VECTOR(104) |
---|
| 177 | MAKE_EXCEPTION_VECTOR(105) |
---|
| 178 | MAKE_EXCEPTION_VECTOR(106) |
---|
| 179 | MAKE_EXCEPTION_VECTOR(107) |
---|
| 180 | MAKE_EXCEPTION_VECTOR(108) |
---|
| 181 | MAKE_EXCEPTION_VECTOR(109) |
---|
| 182 | |
---|
| 183 | MAKE_EXCEPTION_VECTOR(110) |
---|
| 184 | MAKE_EXCEPTION_VECTOR(111) |
---|
| 185 | MAKE_EXCEPTION_VECTOR(112) |
---|
| 186 | MAKE_EXCEPTION_VECTOR(113) |
---|
| 187 | MAKE_EXCEPTION_VECTOR(114) |
---|
| 188 | MAKE_EXCEPTION_VECTOR(115) |
---|
| 189 | MAKE_EXCEPTION_VECTOR(116) |
---|
| 190 | MAKE_EXCEPTION_VECTOR(117) |
---|
| 191 | MAKE_EXCEPTION_VECTOR(118) |
---|
| 192 | MAKE_EXCEPTION_VECTOR(119) |
---|
| 193 | |
---|
| 194 | MAKE_EXCEPTION_VECTOR(120) |
---|
| 195 | MAKE_EXCEPTION_VECTOR(121) |
---|
| 196 | MAKE_EXCEPTION_VECTOR(122) |
---|
| 197 | MAKE_EXCEPTION_VECTOR(123) |
---|
| 198 | MAKE_EXCEPTION_VECTOR(124) |
---|
| 199 | MAKE_EXCEPTION_VECTOR(125) |
---|
| 200 | MAKE_EXCEPTION_VECTOR(126) |
---|
| 201 | MAKE_EXCEPTION_VECTOR(127) |
---|
| 202 | MAKE_EXCEPTION_VECTOR(128) |
---|
| 203 | MAKE_EXCEPTION_VECTOR(129) |
---|
| 204 | |
---|
| 205 | MAKE_EXCEPTION_VECTOR(130) |
---|
| 206 | MAKE_EXCEPTION_VECTOR(131) |
---|
| 207 | MAKE_EXCEPTION_VECTOR(132) |
---|
| 208 | MAKE_EXCEPTION_VECTOR(133) |
---|
| 209 | MAKE_EXCEPTION_VECTOR(134) |
---|
| 210 | MAKE_EXCEPTION_VECTOR(135) |
---|
| 211 | MAKE_EXCEPTION_VECTOR(136) |
---|
| 212 | MAKE_EXCEPTION_VECTOR(137) |
---|
| 213 | MAKE_EXCEPTION_VECTOR(138) |
---|
| 214 | MAKE_EXCEPTION_VECTOR(139) |
---|
| 215 | |
---|
| 216 | MAKE_EXCEPTION_VECTOR(140) |
---|
| 217 | MAKE_EXCEPTION_VECTOR(141) |
---|
| 218 | MAKE_EXCEPTION_VECTOR(142) |
---|
| 219 | MAKE_EXCEPTION_VECTOR(143) |
---|
| 220 | MAKE_EXCEPTION_VECTOR(144) |
---|
| 221 | MAKE_EXCEPTION_VECTOR(145) |
---|
| 222 | MAKE_EXCEPTION_VECTOR(146) |
---|
| 223 | MAKE_EXCEPTION_VECTOR(147) |
---|
| 224 | MAKE_EXCEPTION_VECTOR(148) |
---|
| 225 | MAKE_EXCEPTION_VECTOR(149) |
---|
| 226 | |
---|
| 227 | MAKE_EXCEPTION_VECTOR(150) |
---|
| 228 | MAKE_EXCEPTION_VECTOR(151) |
---|
| 229 | MAKE_EXCEPTION_VECTOR(152) |
---|
| 230 | MAKE_EXCEPTION_VECTOR(153) |
---|
| 231 | MAKE_EXCEPTION_VECTOR(154) |
---|
| 232 | MAKE_EXCEPTION_VECTOR(155) |
---|
| 233 | MAKE_EXCEPTION_VECTOR(156) |
---|
| 234 | MAKE_EXCEPTION_VECTOR(157) |
---|
| 235 | MAKE_EXCEPTION_VECTOR(158) |
---|
| 236 | MAKE_EXCEPTION_VECTOR(159) |
---|
| 237 | |
---|
| 238 | MAKE_EXCEPTION_VECTOR(160) |
---|
| 239 | MAKE_EXCEPTION_VECTOR(161) |
---|
| 240 | MAKE_EXCEPTION_VECTOR(162) |
---|
| 241 | MAKE_EXCEPTION_VECTOR(163) |
---|
| 242 | MAKE_EXCEPTION_VECTOR(164) |
---|
| 243 | MAKE_EXCEPTION_VECTOR(165) |
---|
| 244 | MAKE_EXCEPTION_VECTOR(166) |
---|
| 245 | MAKE_EXCEPTION_VECTOR(167) |
---|
| 246 | MAKE_EXCEPTION_VECTOR(168) |
---|
| 247 | MAKE_EXCEPTION_VECTOR(169) |
---|
| 248 | |
---|
| 249 | MAKE_EXCEPTION_VECTOR(170) |
---|
| 250 | MAKE_EXCEPTION_VECTOR(171) |
---|
| 251 | MAKE_EXCEPTION_VECTOR(172) |
---|
| 252 | MAKE_EXCEPTION_VECTOR(173) |
---|
| 253 | MAKE_EXCEPTION_VECTOR(174) |
---|
| 254 | MAKE_EXCEPTION_VECTOR(175) |
---|
| 255 | MAKE_EXCEPTION_VECTOR(176) |
---|
| 256 | MAKE_EXCEPTION_VECTOR(177) |
---|
| 257 | MAKE_EXCEPTION_VECTOR(178) |
---|
| 258 | MAKE_EXCEPTION_VECTOR(179) |
---|
| 259 | |
---|
| 260 | MAKE_EXCEPTION_VECTOR(180) |
---|
| 261 | MAKE_EXCEPTION_VECTOR(181) |
---|
| 262 | MAKE_EXCEPTION_VECTOR(182) |
---|
| 263 | MAKE_EXCEPTION_VECTOR(183) |
---|
| 264 | MAKE_EXCEPTION_VECTOR(184) |
---|
| 265 | MAKE_EXCEPTION_VECTOR(185) |
---|
| 266 | MAKE_EXCEPTION_VECTOR(186) |
---|
| 267 | MAKE_EXCEPTION_VECTOR(187) |
---|
| 268 | MAKE_EXCEPTION_VECTOR(188) |
---|
| 269 | MAKE_EXCEPTION_VECTOR(189) |
---|
| 270 | |
---|
| 271 | MAKE_EXCEPTION_VECTOR(190) |
---|
| 272 | MAKE_EXCEPTION_VECTOR(191) |
---|
| 273 | MAKE_EXCEPTION_VECTOR(192) |
---|
| 274 | MAKE_EXCEPTION_VECTOR(193) |
---|
| 275 | MAKE_EXCEPTION_VECTOR(194) |
---|
| 276 | MAKE_EXCEPTION_VECTOR(195) |
---|
| 277 | MAKE_EXCEPTION_VECTOR(196) |
---|
| 278 | MAKE_EXCEPTION_VECTOR(197) |
---|
| 279 | MAKE_EXCEPTION_VECTOR(198) |
---|
| 280 | MAKE_EXCEPTION_VECTOR(199) |
---|
| 281 | |
---|
| 282 | MAKE_EXCEPTION_VECTOR(200) |
---|
| 283 | MAKE_EXCEPTION_VECTOR(201) |
---|
| 284 | MAKE_EXCEPTION_VECTOR(202) |
---|
| 285 | MAKE_EXCEPTION_VECTOR(203) |
---|
| 286 | MAKE_EXCEPTION_VECTOR(204) |
---|
| 287 | MAKE_EXCEPTION_VECTOR(205) |
---|
| 288 | MAKE_EXCEPTION_VECTOR(206) |
---|
| 289 | MAKE_EXCEPTION_VECTOR(207) |
---|
| 290 | MAKE_EXCEPTION_VECTOR(208) |
---|
| 291 | MAKE_EXCEPTION_VECTOR(209) |
---|
| 292 | |
---|
| 293 | MAKE_EXCEPTION_VECTOR(210) |
---|
| 294 | MAKE_EXCEPTION_VECTOR(211) |
---|
| 295 | MAKE_EXCEPTION_VECTOR(212) |
---|
| 296 | MAKE_EXCEPTION_VECTOR(213) |
---|
| 297 | MAKE_EXCEPTION_VECTOR(214) |
---|
| 298 | MAKE_EXCEPTION_VECTOR(215) |
---|
| 299 | MAKE_EXCEPTION_VECTOR(216) |
---|
| 300 | MAKE_EXCEPTION_VECTOR(217) |
---|
| 301 | MAKE_EXCEPTION_VECTOR(218) |
---|
| 302 | MAKE_EXCEPTION_VECTOR(219) |
---|
| 303 | |
---|
| 304 | MAKE_EXCEPTION_VECTOR(220) |
---|
| 305 | MAKE_EXCEPTION_VECTOR(221) |
---|
| 306 | MAKE_EXCEPTION_VECTOR(222) |
---|
| 307 | MAKE_EXCEPTION_VECTOR(223) |
---|
| 308 | MAKE_EXCEPTION_VECTOR(224) |
---|
| 309 | MAKE_EXCEPTION_VECTOR(225) |
---|
| 310 | MAKE_EXCEPTION_VECTOR(226) |
---|
| 311 | MAKE_EXCEPTION_VECTOR(227) |
---|
| 312 | MAKE_EXCEPTION_VECTOR(228) |
---|
| 313 | MAKE_EXCEPTION_VECTOR(229) |
---|
| 314 | |
---|
| 315 | MAKE_EXCEPTION_VECTOR(230) |
---|
| 316 | MAKE_EXCEPTION_VECTOR(231) |
---|
| 317 | MAKE_EXCEPTION_VECTOR(232) |
---|
| 318 | MAKE_EXCEPTION_VECTOR(233) |
---|
| 319 | MAKE_EXCEPTION_VECTOR(234) |
---|
| 320 | MAKE_EXCEPTION_VECTOR(235) |
---|
| 321 | MAKE_EXCEPTION_VECTOR(236) |
---|
| 322 | MAKE_EXCEPTION_VECTOR(237) |
---|
| 323 | MAKE_EXCEPTION_VECTOR(238) |
---|
| 324 | MAKE_EXCEPTION_VECTOR(239) |
---|
| 325 | |
---|
| 326 | MAKE_EXCEPTION_VECTOR(240) |
---|
| 327 | MAKE_EXCEPTION_VECTOR(241) |
---|
| 328 | MAKE_EXCEPTION_VECTOR(242) |
---|
| 329 | MAKE_EXCEPTION_VECTOR(243) |
---|
| 330 | MAKE_EXCEPTION_VECTOR(244) |
---|
| 331 | MAKE_EXCEPTION_VECTOR(245) |
---|
| 332 | MAKE_EXCEPTION_VECTOR(246) |
---|
| 333 | MAKE_EXCEPTION_VECTOR(247) |
---|
| 334 | MAKE_EXCEPTION_VECTOR(248) |
---|
| 335 | MAKE_EXCEPTION_VECTOR(249) |
---|
| 336 | |
---|
| 337 | MAKE_EXCEPTION_VECTOR(250) |
---|
| 338 | MAKE_EXCEPTION_VECTOR(251) |
---|
| 339 | MAKE_EXCEPTION_VECTOR(252) |
---|
| 340 | MAKE_EXCEPTION_VECTOR(253) |
---|
| 341 | MAKE_EXCEPTION_VECTOR(254) |
---|
| 342 | MAKE_EXCEPTION_VECTOR(255) |
---|
| 343 | |
---|
| 344 | | |
---|
| 345 | | Start |
---|
| 346 | | |
---|
| 347 | | Entered from a hardware reset. |
---|
| 348 | | |
---|
| 349 | |
---|
| 350 | .global start | Default entry point for GNU |
---|
| 351 | start: |
---|
| 352 | |
---|
| 353 | move.w #0x2700,%sr | Disable all interrupts |
---|
| 354 | |
---|
| 355 | | |
---|
| 356 | | Program the BAR, give us a stack !! |
---|
| 357 | | |
---|
| 358 | |
---|
| 359 | moveq #0,%d0 |
---|
| 360 | move.w #(MC68302_BASE >> 12),%d0 |
---|
| 361 | or.w #(MC68302_BAR_FC_CFC << 12),%d0 |
---|
| 362 | move.l #MC68302_BAR,%a0 |
---|
| 363 | move.w %d0,%a0@(0) |
---|
| 364 | |
---|
| 365 | | |
---|
| 366 | | watch for sign extended maths with the linker on (boot_phase_1-V___ISSP) |
---|
| 367 | | manage the address with code, limited address of 2K at reset for CS0 |
---|
| 368 | | |
---|
| 369 | |
---|
| 370 | move.l #boot_phase_1,%d0 |
---|
| 371 | and.l #0x1FFF,%d0 |
---|
| 372 | move.l %d0,%a0 |
---|
| 373 | jsr %a0@(0) | programs all basic 302 registers |
---|
| 374 | |
---|
| 375 | | |
---|
| 376 | | Map to the 68302 registers |
---|
| 377 | | |
---|
| 378 | |
---|
| 379 | move.l #MC68302_BASE,%a5 |
---|
| 380 | |
---|
| 381 | | |
---|
| 382 | | Make a vector table in RAM |
---|
| 383 | | |
---|
| 384 | |
---|
| 385 | move.l #RAM_BASE,%a0 | a0 -> rom vector table |
---|
| 386 | moveal #ROM_BASE,%a1 | d1 -> start of tmp SRAM |
---|
| 387 | |
---|
| 388 | move.l #255,%d0 |
---|
| 389 | |
---|
| 390 | copy_vec_table: |
---|
| 391 | |
---|
| 392 | move.l (%a0)+,%d1 |
---|
| 393 | or.l #ROM_BASE,%d1 |
---|
| 394 | move.l %d1,(%a1)+ |
---|
| 395 | subq.l #1,%d0 |
---|
| 396 | bne copy_vec_table |
---|
| 397 | |
---|
| 398 | #if defined(SYSTEM_TABLE_ANCHOR_OFFSET) |
---|
| 399 | | |
---|
| 400 | | Clear the system table |
---|
| 401 | | |
---|
| 402 | |
---|
| 403 | move.l #SYSTEM_TABLE_ANCHOR_OFFSET,%a0 |
---|
| 404 | move.l #0,(%a0) |
---|
| 405 | #endif |
---|
| 406 | |
---|
| 407 | | |
---|
| 408 | | Copy the chip select swap code to DPRAM and run it |
---|
| 409 | | |
---|
| 410 | |
---|
| 411 | move.l #boot_phase_2,%d0 |
---|
| 412 | and.l #(ROM_SIZE - 1),%d0 |
---|
| 413 | move.l %d0,%a0 | a0 -> remap code |
---|
| 414 | lea %a5@(0),%a1 | a1 -> internal system RAM |
---|
| 415 | |
---|
| 416 | move.l #boot_phase_3,%d0 |
---|
| 417 | and.l #(ROM_SIZE - 1),%d0 |
---|
| 418 | sub.l %a0,%d0 |
---|
| 419 | |
---|
| 420 | copy_remap: |
---|
| 421 | move.b (%a0)+,(%a1)+ | copy |
---|
| 422 | dbra %d0,copy_remap |
---|
| 423 | |
---|
| 424 | | |
---|
| 425 | | Jump to the remap code in the 68302''s internal system RAM. |
---|
| 426 | | |
---|
| 427 | |
---|
| 428 | jsr %a5@(0) | execute the swap code |
---|
| 429 | |
---|
| 430 | | |
---|
| 431 | | Map to the 68302 registers |
---|
| 432 | | |
---|
| 433 | |
---|
| 434 | move.l #MC68302_BASE,%a5 |
---|
| 435 | |
---|
| 436 | | |
---|
| 437 | | Copy initialized data area from ROM to RAM |
---|
| 438 | | |
---|
| 439 | |
---|
| 440 | copy_data: |
---|
| 441 | moveal #etext,%a0 | find the end of .text |
---|
| 442 | moveal #data_start,%a1 | find the beginning of .data |
---|
| 443 | moveal #edata,%a2 | find the end of .data |
---|
| 444 | |
---|
| 445 | copy_data_loop: |
---|
| 446 | |
---|
| 447 | movel %a0@+,%a1@+ | copy the data |
---|
| 448 | cmpal %a2,%a1 |
---|
| 449 | jlt copy_data_loop | loop until edata reached |
---|
| 450 | |
---|
| 451 | | |
---|
| 452 | | zero out uninitialized data area |
---|
| 453 | | |
---|
| 454 | |
---|
| 455 | zerobss: |
---|
| 456 | moveal #end,%a0 | find end of .bss |
---|
| 457 | moveal #bss_start,%a1 | find beginning of .bss |
---|
| 458 | moveq #0,%d0 |
---|
| 459 | |
---|
| 460 | zerobss_loop: |
---|
| 461 | |
---|
| 462 | movel %d0,%a1@+ | to zero out uninitialized |
---|
| 463 | cmpal %a0,%a1 |
---|
| 464 | jlt zerobss_loop | loop until _end reached |
---|
| 465 | |
---|
| 466 | movel #end,%d0 | d0 = end of bss/start of heap |
---|
| 467 | addl #heap_size,%d0 | d0 = end of heap |
---|
| 468 | |
---|
| 469 | movel %d0,stack_start | Save for brk() routine |
---|
| 470 | addl #stack_size,%d0 | make room for stack |
---|
| 471 | andl #0xffffffc0,%d0 | align it on 16 byte boundary |
---|
| 472 | |
---|
| 473 | movw #0x3700,%sr | SUPV MODE,INTERRUPTS OFF!!! |
---|
| 474 | movel %d0,%a7 | set master stack pointer |
---|
| 475 | movel %d0,%a6 | set base pointer |
---|
| 476 | |
---|
| 477 | jsr boot_phase_3 |
---|
| 478 | |
---|
| 479 | | |
---|
| 480 | | Create an unhandled exception jump table. The table has an entry for |
---|
| 481 | | each vector in the vector table. The entry pushes the vector number onto |
---|
| 482 | | the stack and then calls a common exception handler using PIC. |
---|
| 483 | | |
---|
| 484 | | The macros are to create the labels and format vectors. |
---|
| 485 | | |
---|
| 486 | |
---|
| 487 | #define cat(x, y) x ## y |
---|
| 488 | #define FORMAT_ID(n) (n << 2) |
---|
| 489 | #define EXCEPTION_HANDLER(h, n) EH__##n: move.w cat(h, FORMAT_ID(n)),-(%sp) ; \ |
---|
| 490 | bra common_exception_handler |
---|
| 491 | |
---|
| 492 | unhandled_exception: |
---|
| 493 | |
---|
| 494 | EXCEPTION_HANDLER(#, 0) |
---|
| 495 | EXCEPTION_HANDLER(#, 1) |
---|
| 496 | EXCEPTION_HANDLER(#, 2) |
---|
| 497 | EXCEPTION_HANDLER(#, 3) |
---|
| 498 | EXCEPTION_HANDLER(#, 4) |
---|
| 499 | EXCEPTION_HANDLER(#, 5) |
---|
| 500 | EXCEPTION_HANDLER(#, 6) |
---|
| 501 | EXCEPTION_HANDLER(#, 7) |
---|
| 502 | EXCEPTION_HANDLER(#, 8) |
---|
| 503 | EXCEPTION_HANDLER(#, 9) |
---|
| 504 | |
---|
| 505 | EXCEPTION_HANDLER(#, 10) |
---|
| 506 | EXCEPTION_HANDLER(#, 11) |
---|
| 507 | EXCEPTION_HANDLER(#, 12) |
---|
| 508 | EXCEPTION_HANDLER(#, 13) |
---|
| 509 | EXCEPTION_HANDLER(#, 14) |
---|
| 510 | EXCEPTION_HANDLER(#, 15) |
---|
| 511 | EXCEPTION_HANDLER(#, 16) |
---|
| 512 | EXCEPTION_HANDLER(#, 17) |
---|
| 513 | EXCEPTION_HANDLER(#, 18) |
---|
| 514 | EXCEPTION_HANDLER(#, 19) |
---|
| 515 | |
---|
| 516 | EXCEPTION_HANDLER(#, 20) |
---|
| 517 | EXCEPTION_HANDLER(#, 21) |
---|
| 518 | EXCEPTION_HANDLER(#, 22) |
---|
| 519 | EXCEPTION_HANDLER(#, 23) |
---|
| 520 | EXCEPTION_HANDLER(#, 24) |
---|
| 521 | EXCEPTION_HANDLER(#, 25) |
---|
| 522 | EXCEPTION_HANDLER(#, 26) |
---|
| 523 | EXCEPTION_HANDLER(#, 27) |
---|
| 524 | EXCEPTION_HANDLER(#, 28) |
---|
| 525 | EXCEPTION_HANDLER(#, 29) |
---|
| 526 | |
---|
| 527 | EXCEPTION_HANDLER(#, 30) |
---|
| 528 | EXCEPTION_HANDLER(#, 31) |
---|
| 529 | EXCEPTION_HANDLER(#, 32) |
---|
| 530 | EXCEPTION_HANDLER(#, 33) |
---|
| 531 | EXCEPTION_HANDLER(#, 34) |
---|
| 532 | EXCEPTION_HANDLER(#, 35) |
---|
| 533 | EXCEPTION_HANDLER(#, 36) |
---|
| 534 | EXCEPTION_HANDLER(#, 37) |
---|
| 535 | EXCEPTION_HANDLER(#, 38) |
---|
| 536 | EXCEPTION_HANDLER(#, 39) |
---|
| 537 | |
---|
| 538 | EXCEPTION_HANDLER(#, 40) |
---|
| 539 | EXCEPTION_HANDLER(#, 41) |
---|
| 540 | EXCEPTION_HANDLER(#, 42) |
---|
| 541 | EXCEPTION_HANDLER(#, 43) |
---|
| 542 | EXCEPTION_HANDLER(#, 44) |
---|
| 543 | EXCEPTION_HANDLER(#, 45) |
---|
| 544 | EXCEPTION_HANDLER(#, 46) |
---|
| 545 | EXCEPTION_HANDLER(#, 47) |
---|
| 546 | EXCEPTION_HANDLER(#, 48) |
---|
| 547 | EXCEPTION_HANDLER(#, 49) |
---|
| 548 | |
---|
| 549 | EXCEPTION_HANDLER(#, 50) |
---|
| 550 | EXCEPTION_HANDLER(#, 51) |
---|
| 551 | EXCEPTION_HANDLER(#, 52) |
---|
| 552 | EXCEPTION_HANDLER(#, 53) |
---|
| 553 | EXCEPTION_HANDLER(#, 54) |
---|
| 554 | EXCEPTION_HANDLER(#, 55) |
---|
| 555 | EXCEPTION_HANDLER(#, 56) |
---|
| 556 | EXCEPTION_HANDLER(#, 57) |
---|
| 557 | EXCEPTION_HANDLER(#, 58) |
---|
| 558 | EXCEPTION_HANDLER(#, 59) |
---|
| 559 | |
---|
| 560 | EXCEPTION_HANDLER(#, 60) |
---|
| 561 | EXCEPTION_HANDLER(#, 61) |
---|
| 562 | EXCEPTION_HANDLER(#, 62) |
---|
| 563 | EXCEPTION_HANDLER(#, 63) |
---|
| 564 | EXCEPTION_HANDLER(#, 64) |
---|
| 565 | EXCEPTION_HANDLER(#, 65) |
---|
| 566 | EXCEPTION_HANDLER(#, 66) |
---|
| 567 | EXCEPTION_HANDLER(#, 67) |
---|
| 568 | EXCEPTION_HANDLER(#, 68) |
---|
| 569 | EXCEPTION_HANDLER(#, 69) |
---|
| 570 | |
---|
| 571 | EXCEPTION_HANDLER(#, 70) |
---|
| 572 | EXCEPTION_HANDLER(#, 71) |
---|
| 573 | EXCEPTION_HANDLER(#, 72) |
---|
| 574 | EXCEPTION_HANDLER(#, 73) |
---|
| 575 | EXCEPTION_HANDLER(#, 74) |
---|
| 576 | EXCEPTION_HANDLER(#, 75) |
---|
| 577 | EXCEPTION_HANDLER(#, 76) |
---|
| 578 | EXCEPTION_HANDLER(#, 77) |
---|
| 579 | EXCEPTION_HANDLER(#, 78) |
---|
| 580 | EXCEPTION_HANDLER(#, 79) |
---|
| 581 | |
---|
| 582 | EXCEPTION_HANDLER(#, 80) |
---|
| 583 | EXCEPTION_HANDLER(#, 81) |
---|
| 584 | EXCEPTION_HANDLER(#, 82) |
---|
| 585 | EXCEPTION_HANDLER(#, 83) |
---|
| 586 | EXCEPTION_HANDLER(#, 84) |
---|
| 587 | EXCEPTION_HANDLER(#, 85) |
---|
| 588 | EXCEPTION_HANDLER(#, 86) |
---|
| 589 | EXCEPTION_HANDLER(#, 87) |
---|
| 590 | EXCEPTION_HANDLER(#, 88) |
---|
| 591 | EXCEPTION_HANDLER(#, 89) |
---|
| 592 | |
---|
| 593 | EXCEPTION_HANDLER(#, 90) |
---|
| 594 | EXCEPTION_HANDLER(#, 91) |
---|
| 595 | EXCEPTION_HANDLER(#, 92) |
---|
| 596 | EXCEPTION_HANDLER(#, 93) |
---|
| 597 | EXCEPTION_HANDLER(#, 94) |
---|
| 598 | EXCEPTION_HANDLER(#, 95) |
---|
| 599 | EXCEPTION_HANDLER(#, 96) |
---|
| 600 | EXCEPTION_HANDLER(#, 97) |
---|
| 601 | EXCEPTION_HANDLER(#, 98) |
---|
| 602 | EXCEPTION_HANDLER(#, 99) |
---|
| 603 | |
---|
| 604 | EXCEPTION_HANDLER(#, 100) |
---|
| 605 | EXCEPTION_HANDLER(#, 101) |
---|
| 606 | EXCEPTION_HANDLER(#, 102) |
---|
| 607 | EXCEPTION_HANDLER(#, 103) |
---|
| 608 | EXCEPTION_HANDLER(#, 104) |
---|
| 609 | EXCEPTION_HANDLER(#, 105) |
---|
| 610 | EXCEPTION_HANDLER(#, 106) |
---|
| 611 | EXCEPTION_HANDLER(#, 107) |
---|
| 612 | EXCEPTION_HANDLER(#, 108) |
---|
| 613 | EXCEPTION_HANDLER(#, 109) |
---|
| 614 | |
---|
| 615 | EXCEPTION_HANDLER(#, 110) |
---|
| 616 | EXCEPTION_HANDLER(#, 111) |
---|
| 617 | EXCEPTION_HANDLER(#, 112) |
---|
| 618 | EXCEPTION_HANDLER(#, 113) |
---|
| 619 | EXCEPTION_HANDLER(#, 114) |
---|
| 620 | EXCEPTION_HANDLER(#, 115) |
---|
| 621 | EXCEPTION_HANDLER(#, 116) |
---|
| 622 | EXCEPTION_HANDLER(#, 117) |
---|
| 623 | EXCEPTION_HANDLER(#, 118) |
---|
| 624 | EXCEPTION_HANDLER(#, 119) |
---|
| 625 | |
---|
| 626 | EXCEPTION_HANDLER(#, 120) |
---|
| 627 | EXCEPTION_HANDLER(#, 121) |
---|
| 628 | EXCEPTION_HANDLER(#, 122) |
---|
| 629 | EXCEPTION_HANDLER(#, 123) |
---|
| 630 | EXCEPTION_HANDLER(#, 124) |
---|
| 631 | EXCEPTION_HANDLER(#, 125) |
---|
| 632 | EXCEPTION_HANDLER(#, 126) |
---|
| 633 | EXCEPTION_HANDLER(#, 127) |
---|
| 634 | EXCEPTION_HANDLER(#, 128) |
---|
| 635 | EXCEPTION_HANDLER(#, 129) |
---|
| 636 | |
---|
| 637 | EXCEPTION_HANDLER(#, 130) |
---|
| 638 | EXCEPTION_HANDLER(#, 131) |
---|
| 639 | EXCEPTION_HANDLER(#, 132) |
---|
| 640 | EXCEPTION_HANDLER(#, 133) |
---|
| 641 | EXCEPTION_HANDLER(#, 134) |
---|
| 642 | EXCEPTION_HANDLER(#, 135) |
---|
| 643 | EXCEPTION_HANDLER(#, 136) |
---|
| 644 | EXCEPTION_HANDLER(#, 137) |
---|
| 645 | EXCEPTION_HANDLER(#, 138) |
---|
| 646 | EXCEPTION_HANDLER(#, 139) |
---|
| 647 | |
---|
| 648 | EXCEPTION_HANDLER(#, 140) |
---|
| 649 | EXCEPTION_HANDLER(#, 141) |
---|
| 650 | EXCEPTION_HANDLER(#, 142) |
---|
| 651 | EXCEPTION_HANDLER(#, 143) |
---|
| 652 | EXCEPTION_HANDLER(#, 144) |
---|
| 653 | EXCEPTION_HANDLER(#, 145) |
---|
| 654 | EXCEPTION_HANDLER(#, 146) |
---|
| 655 | EXCEPTION_HANDLER(#, 147) |
---|
| 656 | EXCEPTION_HANDLER(#, 148) |
---|
| 657 | EXCEPTION_HANDLER(#, 149) |
---|
| 658 | |
---|
| 659 | EXCEPTION_HANDLER(#, 150) |
---|
| 660 | EXCEPTION_HANDLER(#, 151) |
---|
| 661 | EXCEPTION_HANDLER(#, 152) |
---|
| 662 | EXCEPTION_HANDLER(#, 153) |
---|
| 663 | EXCEPTION_HANDLER(#, 154) |
---|
| 664 | EXCEPTION_HANDLER(#, 155) |
---|
| 665 | EXCEPTION_HANDLER(#, 156) |
---|
| 666 | EXCEPTION_HANDLER(#, 157) |
---|
| 667 | EXCEPTION_HANDLER(#, 158) |
---|
| 668 | EXCEPTION_HANDLER(#, 159) |
---|
| 669 | |
---|
| 670 | EXCEPTION_HANDLER(#, 160) |
---|
| 671 | EXCEPTION_HANDLER(#, 161) |
---|
| 672 | EXCEPTION_HANDLER(#, 162) |
---|
| 673 | EXCEPTION_HANDLER(#, 163) |
---|
| 674 | EXCEPTION_HANDLER(#, 164) |
---|
| 675 | EXCEPTION_HANDLER(#, 165) |
---|
| 676 | EXCEPTION_HANDLER(#, 166) |
---|
| 677 | EXCEPTION_HANDLER(#, 167) |
---|
| 678 | EXCEPTION_HANDLER(#, 168) |
---|
| 679 | EXCEPTION_HANDLER(#, 169) |
---|
| 680 | |
---|
| 681 | EXCEPTION_HANDLER(#, 170) |
---|
| 682 | EXCEPTION_HANDLER(#, 171) |
---|
| 683 | EXCEPTION_HANDLER(#, 172) |
---|
| 684 | EXCEPTION_HANDLER(#, 173) |
---|
| 685 | EXCEPTION_HANDLER(#, 174) |
---|
| 686 | EXCEPTION_HANDLER(#, 175) |
---|
| 687 | EXCEPTION_HANDLER(#, 176) |
---|
| 688 | EXCEPTION_HANDLER(#, 177) |
---|
| 689 | EXCEPTION_HANDLER(#, 178) |
---|
| 690 | EXCEPTION_HANDLER(#, 179) |
---|
| 691 | |
---|
| 692 | EXCEPTION_HANDLER(#, 180) |
---|
| 693 | EXCEPTION_HANDLER(#, 181) |
---|
| 694 | EXCEPTION_HANDLER(#, 182) |
---|
| 695 | EXCEPTION_HANDLER(#, 183) |
---|
| 696 | EXCEPTION_HANDLER(#, 184) |
---|
| 697 | EXCEPTION_HANDLER(#, 185) |
---|
| 698 | EXCEPTION_HANDLER(#, 186) |
---|
| 699 | EXCEPTION_HANDLER(#, 187) |
---|
| 700 | EXCEPTION_HANDLER(#, 188) |
---|
| 701 | EXCEPTION_HANDLER(#, 189) |
---|
| 702 | |
---|
| 703 | EXCEPTION_HANDLER(#, 190) |
---|
| 704 | EXCEPTION_HANDLER(#, 191) |
---|
| 705 | EXCEPTION_HANDLER(#, 192) |
---|
| 706 | EXCEPTION_HANDLER(#, 193) |
---|
| 707 | EXCEPTION_HANDLER(#, 194) |
---|
| 708 | EXCEPTION_HANDLER(#, 195) |
---|
| 709 | EXCEPTION_HANDLER(#, 196) |
---|
| 710 | EXCEPTION_HANDLER(#, 197) |
---|
| 711 | EXCEPTION_HANDLER(#, 198) |
---|
| 712 | EXCEPTION_HANDLER(#, 199) |
---|
| 713 | |
---|
| 714 | EXCEPTION_HANDLER(#, 200) |
---|
| 715 | EXCEPTION_HANDLER(#, 201) |
---|
| 716 | EXCEPTION_HANDLER(#, 202) |
---|
| 717 | EXCEPTION_HANDLER(#, 203) |
---|
| 718 | EXCEPTION_HANDLER(#, 204) |
---|
| 719 | EXCEPTION_HANDLER(#, 205) |
---|
| 720 | EXCEPTION_HANDLER(#, 206) |
---|
| 721 | EXCEPTION_HANDLER(#, 207) |
---|
| 722 | EXCEPTION_HANDLER(#, 208) |
---|
| 723 | EXCEPTION_HANDLER(#, 209) |
---|
| 724 | |
---|
| 725 | EXCEPTION_HANDLER(#, 210) |
---|
| 726 | EXCEPTION_HANDLER(#, 211) |
---|
| 727 | EXCEPTION_HANDLER(#, 212) |
---|
| 728 | EXCEPTION_HANDLER(#, 213) |
---|
| 729 | EXCEPTION_HANDLER(#, 214) |
---|
| 730 | EXCEPTION_HANDLER(#, 215) |
---|
| 731 | EXCEPTION_HANDLER(#, 216) |
---|
| 732 | EXCEPTION_HANDLER(#, 217) |
---|
| 733 | EXCEPTION_HANDLER(#, 218) |
---|
| 734 | EXCEPTION_HANDLER(#, 219) |
---|
| 735 | |
---|
| 736 | EXCEPTION_HANDLER(#, 220) |
---|
| 737 | EXCEPTION_HANDLER(#, 221) |
---|
| 738 | EXCEPTION_HANDLER(#, 222) |
---|
| 739 | EXCEPTION_HANDLER(#, 223) |
---|
| 740 | EXCEPTION_HANDLER(#, 224) |
---|
| 741 | EXCEPTION_HANDLER(#, 225) |
---|
| 742 | EXCEPTION_HANDLER(#, 226) |
---|
| 743 | EXCEPTION_HANDLER(#, 227) |
---|
| 744 | EXCEPTION_HANDLER(#, 228) |
---|
| 745 | EXCEPTION_HANDLER(#, 229) |
---|
| 746 | |
---|
| 747 | EXCEPTION_HANDLER(#, 230) |
---|
| 748 | EXCEPTION_HANDLER(#, 231) |
---|
| 749 | EXCEPTION_HANDLER(#, 232) |
---|
| 750 | EXCEPTION_HANDLER(#, 233) |
---|
| 751 | EXCEPTION_HANDLER(#, 234) |
---|
| 752 | EXCEPTION_HANDLER(#, 235) |
---|
| 753 | EXCEPTION_HANDLER(#, 236) |
---|
| 754 | EXCEPTION_HANDLER(#, 237) |
---|
| 755 | EXCEPTION_HANDLER(#, 238) |
---|
| 756 | EXCEPTION_HANDLER(#, 239) |
---|
| 757 | |
---|
| 758 | EXCEPTION_HANDLER(#, 240) |
---|
| 759 | EXCEPTION_HANDLER(#, 241) |
---|
| 760 | EXCEPTION_HANDLER(#, 242) |
---|
| 761 | EXCEPTION_HANDLER(#, 243) |
---|
| 762 | EXCEPTION_HANDLER(#, 244) |
---|
| 763 | EXCEPTION_HANDLER(#, 245) |
---|
| 764 | EXCEPTION_HANDLER(#, 246) |
---|
| 765 | EXCEPTION_HANDLER(#, 247) |
---|
| 766 | EXCEPTION_HANDLER(#, 248) |
---|
| 767 | EXCEPTION_HANDLER(#, 249) |
---|
| 768 | |
---|
| 769 | EXCEPTION_HANDLER(#, 250) |
---|
| 770 | EXCEPTION_HANDLER(#, 251) |
---|
| 771 | EXCEPTION_HANDLER(#, 252) |
---|
| 772 | EXCEPTION_HANDLER(#, 253) |
---|
| 773 | EXCEPTION_HANDLER(#, 254) |
---|
| 774 | EXCEPTION_HANDLER(#, 255) |
---|
| 775 | |
---|
| 776 | |
---|
| 777 | common_exception_handler: |
---|
| 778 | |
---|
| 779 | | |
---|
| 780 | | Need to put the format/vector above the PC and status register |
---|
| 781 | | |
---|
| 782 | |
---|
| 783 | move.l %d0,-(%sp) | free a register |
---|
| 784 | move.w 4(%sp),%d0 | get the format/vector id |
---|
| 785 | |
---|
| 786 | | |
---|
| 787 | | If a bus error or address error then trash the extra |
---|
| 788 | | data saved on the stack |
---|
| 789 | | |
---|
| 790 | |
---|
| 791 | cmp.w #0x0008,%d0 |
---|
| 792 | beq ceh_10 |
---|
| 793 | |
---|
| 794 | cmp.w #0x000C,%d0 |
---|
| 795 | beq ceh_10 |
---|
| 796 | |
---|
| 797 | bra ceh_20 |
---|
| 798 | |
---|
| 799 | ceh_10: |
---|
| 800 | |
---|
| 801 | move.w %d0,12(%sp) | need to move the format/id |
---|
| 802 | move.l (%sp)+,%d0 | recover d0 |
---|
| 803 | addq #8,%sp | trash the stack |
---|
| 804 | move.l %d0,-(%sp) | free a register, again |
---|
| 805 | move.w 4(%sp),%d0 | get the format/vector id |
---|
| 806 | |
---|
| 807 | ceh_20: |
---|
| 808 | |
---|
| 809 | move.w 6(%sp),4(%sp) |
---|
| 810 | move.w 8(%sp),6(%sp) |
---|
| 811 | move.w 10(%sp),8(%sp) |
---|
| 812 | move.w %d0,10(%sp) | put the format/vector id |
---|
| 813 | move.l (%sp)+,%d0 |
---|
| 814 | |
---|
| 815 | | |
---|
| 816 | | Save all the registers, pass control to a dump trace routine |
---|
| 817 | | |
---|
| 818 | |
---|
| 819 | movem.l %d0-%d7/%a0-%a7,%sp@- |
---|
| 820 | |
---|
| 821 | | |
---|
| 822 | | check to see if ROM is mapped to zero |
---|
| 823 | | |
---|
| 824 | |
---|
| 825 | move.l #trace_exception,%d1 | get the linked address |
---|
| 826 | and.l #(ROM_SIZE - 1),%d1 | obtain the offset into the ROM |
---|
| 827 | lea.l %pc@(0),%a0 | were are we currently |
---|
| 828 | move.l %a0,%d0 | need to use a data register |
---|
| 829 | and.l #~(ROM_SIZE - 1),%d0 | keep the top part of the address |
---|
| 830 | or.l %d1,%d0 | apply it to the trace exception offset |
---|
| 831 | move.l %d0,%a0 | need an address register for jumping |
---|
| 832 | jsr %a0@(0) |
---|
| 833 | |
---|
| 834 | ceh_30: |
---|
| 835 | jmp ceh_30 |
---|
| 836 | | |
---|
| 837 | | The RAM based vector table |
---|
| 838 | | |
---|
| 839 | |
---|
| 840 | .sect .vtable |
---|
| 841 | |
---|
| 842 | .global vector_table |
---|
| 843 | |
---|
| 844 | vector_table: |
---|
| 845 | .space (256 * 4),0 |
---|
| 846 | |
---|
| 847 | | |
---|
| 848 | | Initialised data |
---|
| 849 | | |
---|
| 850 | |
---|
| 851 | .sect .data |
---|
| 852 | |
---|
| 853 | .global start_frame |
---|
| 854 | |
---|
| 855 | start_frame: |
---|
| 856 | .space 4,0 |
---|
| 857 | |
---|
| 858 | .global stack_start |
---|
| 859 | |
---|
| 860 | stack_start: |
---|
| 861 | .space 4,0 |
---|
| 862 | |
---|
| 863 | | |
---|
| 864 | | Uninitialised data |
---|
| 865 | | |
---|
| 866 | |
---|
| 867 | .sect .bss |
---|
| 868 | |
---|
| 869 | .global environ |
---|
| 870 | .align 2 |
---|
| 871 | |
---|
| 872 | environ: |
---|
| 873 | .long 0 |
---|
| 874 | |
---|
| 875 | .global heap_size |
---|
| 876 | .set heap_size,0x2000 |
---|
| 877 | |
---|
| 878 | .global stack_size |
---|
| 879 | .set stack_size,0x1000 |
---|
| 880 | |
---|
| 881 | |
---|