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 | | Joel: With the change of MC68302_BASE from a #define to a linker |
---|
361 | | symbol, the following 4 instructions replace this one: |
---|
362 | | move.w #(MC68302_BASE >> 12),%d0 |
---|
363 | move.l #MC68302_BASE,%d0 |
---|
364 | moveq.l #12,%d1 |
---|
365 | lsr.l %d1,%d0 |
---|
366 | and.l #0xFFFF,%d0 |
---|
367 | |
---|
368 | or.w #(MC68302_BAR_FC_CFC << 12),%d0 |
---|
369 | move.l #MC68302_BAR,%a0 |
---|
370 | move.w %d0,%a0@(0) |
---|
371 | |
---|
372 | | |
---|
373 | | watch for sign extended maths with the linker on (boot_phase_1-V___ISSP) |
---|
374 | | manage the address with code, limited address of 2K at reset for CS0 |
---|
375 | | |
---|
376 | |
---|
377 | move.l #boot_phase_1,%d0 |
---|
378 | and.l #0x1FFF,%d0 |
---|
379 | move.l %d0,%a0 |
---|
380 | jsr %a0@(0) | programs all basic 302 registers |
---|
381 | |
---|
382 | | |
---|
383 | | Map to the 68302 registers |
---|
384 | | |
---|
385 | |
---|
386 | move.l #MC68302_BASE,%a5 |
---|
387 | |
---|
388 | | |
---|
389 | | Make a vector table in RAM |
---|
390 | | |
---|
391 | |
---|
392 | move.l #RAM_BASE,%a0 | a0 -> rom vector table |
---|
393 | moveal #ROM_BASE,%a1 | d1 -> start of tmp SRAM |
---|
394 | |
---|
395 | move.l #255,%d0 |
---|
396 | |
---|
397 | copy_vec_table: |
---|
398 | |
---|
399 | move.l (%a0)+,%d1 |
---|
400 | or.l #ROM_BASE,%d1 |
---|
401 | move.l %d1,(%a1)+ |
---|
402 | subq.l #1,%d0 |
---|
403 | bne copy_vec_table |
---|
404 | |
---|
405 | #if defined(SYSTEM_TABLE_ANCHOR_OFFSET) |
---|
406 | | |
---|
407 | | Clear the system table |
---|
408 | | |
---|
409 | |
---|
410 | move.l #SYSTEM_TABLE_ANCHOR_OFFSET,%a0 |
---|
411 | move.l #0,(%a0) |
---|
412 | #endif |
---|
413 | |
---|
414 | | |
---|
415 | | Copy the chip select swap code to DPRAM and run it |
---|
416 | | |
---|
417 | |
---|
418 | move.l #boot_phase_2,%d0 |
---|
419 | and.l #(ROM_SIZE - 1),%d0 |
---|
420 | move.l %d0,%a0 | a0 -> remap code |
---|
421 | lea %a5@(0),%a1 | a1 -> internal system RAM |
---|
422 | |
---|
423 | move.l #boot_phase_3,%d0 |
---|
424 | and.l #(ROM_SIZE - 1),%d0 |
---|
425 | sub.l %a0,%d0 |
---|
426 | |
---|
427 | copy_remap: |
---|
428 | move.b (%a0)+,(%a1)+ | copy |
---|
429 | dbra %d0,copy_remap |
---|
430 | |
---|
431 | | |
---|
432 | | Jump to the remap code in the 68302''s internal system RAM. |
---|
433 | | |
---|
434 | |
---|
435 | jsr %a5@(0) | execute the swap code |
---|
436 | |
---|
437 | | |
---|
438 | | Map to the 68302 registers |
---|
439 | | |
---|
440 | |
---|
441 | move.l #MC68302_BASE,%a5 |
---|
442 | |
---|
443 | | |
---|
444 | | Copy initialized data area from ROM to RAM |
---|
445 | | |
---|
446 | |
---|
447 | copy_data: |
---|
448 | moveal #_etext,%a0 | find the end of .text |
---|
449 | moveal #_copy_start,%a1 | find the beginning of .data |
---|
450 | moveal #_edata,%a2 | find the end of .data |
---|
451 | |
---|
452 | copy_data_loop: |
---|
453 | |
---|
454 | movel %a0@+,%a1@+ | copy the data |
---|
455 | cmpal %a2,%a1 |
---|
456 | jlt copy_data_loop | loop until edata reached |
---|
457 | |
---|
458 | | |
---|
459 | | zero out uninitialized data area |
---|
460 | | |
---|
461 | |
---|
462 | zerobss: |
---|
463 | moveal #_clear_end,%a0 | find end of .bss |
---|
464 | moveal #_clear_start,%a1 | find beginning of .bss |
---|
465 | moveq #0,%d0 |
---|
466 | |
---|
467 | zerobss_loop: |
---|
468 | |
---|
469 | movel %d0,%a1@+ | to zero out uninitialized |
---|
470 | cmpal %a0,%a1 |
---|
471 | jlt zerobss_loop | loop until _end reached |
---|
472 | |
---|
473 | movel %d0,_stack_init | load stack top |
---|
474 | |
---|
475 | movw #0x3700,%sr | SUPV MODE,INTERRUPTS OFF!!! |
---|
476 | movel %d0,%a7 | set master stack pointer |
---|
477 | movel %d0,%a6 | set base pointer |
---|
478 | |
---|
479 | jsr boot_phase_3 |
---|
480 | |
---|
481 | | |
---|
482 | | Create an unhandled exception jump table. The table has an entry for |
---|
483 | | each vector in the vector table. The entry pushes the vector number onto |
---|
484 | | the stack and then calls a common exception handler using PIC. |
---|
485 | | |
---|
486 | | The macros are to create the labels and format vectors. |
---|
487 | | |
---|
488 | |
---|
489 | #define cat(x, y) x ## y |
---|
490 | #define FORMAT_ID(n) (n << 2) |
---|
491 | #define EXCEPTION_HANDLER(h, n) EH__##n: move.w cat(h, FORMAT_ID(n)),-(%sp) ; \ |
---|
492 | bra common_exception_handler |
---|
493 | |
---|
494 | unhandled_exception: |
---|
495 | |
---|
496 | EXCEPTION_HANDLER(#, 0) |
---|
497 | EXCEPTION_HANDLER(#, 1) |
---|
498 | EXCEPTION_HANDLER(#, 2) |
---|
499 | EXCEPTION_HANDLER(#, 3) |
---|
500 | EXCEPTION_HANDLER(#, 4) |
---|
501 | EXCEPTION_HANDLER(#, 5) |
---|
502 | EXCEPTION_HANDLER(#, 6) |
---|
503 | EXCEPTION_HANDLER(#, 7) |
---|
504 | EXCEPTION_HANDLER(#, 8) |
---|
505 | EXCEPTION_HANDLER(#, 9) |
---|
506 | |
---|
507 | EXCEPTION_HANDLER(#, 10) |
---|
508 | EXCEPTION_HANDLER(#, 11) |
---|
509 | EXCEPTION_HANDLER(#, 12) |
---|
510 | EXCEPTION_HANDLER(#, 13) |
---|
511 | EXCEPTION_HANDLER(#, 14) |
---|
512 | EXCEPTION_HANDLER(#, 15) |
---|
513 | EXCEPTION_HANDLER(#, 16) |
---|
514 | EXCEPTION_HANDLER(#, 17) |
---|
515 | EXCEPTION_HANDLER(#, 18) |
---|
516 | EXCEPTION_HANDLER(#, 19) |
---|
517 | |
---|
518 | EXCEPTION_HANDLER(#, 20) |
---|
519 | EXCEPTION_HANDLER(#, 21) |
---|
520 | EXCEPTION_HANDLER(#, 22) |
---|
521 | EXCEPTION_HANDLER(#, 23) |
---|
522 | EXCEPTION_HANDLER(#, 24) |
---|
523 | EXCEPTION_HANDLER(#, 25) |
---|
524 | EXCEPTION_HANDLER(#, 26) |
---|
525 | EXCEPTION_HANDLER(#, 27) |
---|
526 | EXCEPTION_HANDLER(#, 28) |
---|
527 | EXCEPTION_HANDLER(#, 29) |
---|
528 | |
---|
529 | EXCEPTION_HANDLER(#, 30) |
---|
530 | EXCEPTION_HANDLER(#, 31) |
---|
531 | EXCEPTION_HANDLER(#, 32) |
---|
532 | EXCEPTION_HANDLER(#, 33) |
---|
533 | EXCEPTION_HANDLER(#, 34) |
---|
534 | EXCEPTION_HANDLER(#, 35) |
---|
535 | EXCEPTION_HANDLER(#, 36) |
---|
536 | EXCEPTION_HANDLER(#, 37) |
---|
537 | EXCEPTION_HANDLER(#, 38) |
---|
538 | EXCEPTION_HANDLER(#, 39) |
---|
539 | |
---|
540 | EXCEPTION_HANDLER(#, 40) |
---|
541 | EXCEPTION_HANDLER(#, 41) |
---|
542 | EXCEPTION_HANDLER(#, 42) |
---|
543 | EXCEPTION_HANDLER(#, 43) |
---|
544 | EXCEPTION_HANDLER(#, 44) |
---|
545 | EXCEPTION_HANDLER(#, 45) |
---|
546 | EXCEPTION_HANDLER(#, 46) |
---|
547 | EXCEPTION_HANDLER(#, 47) |
---|
548 | EXCEPTION_HANDLER(#, 48) |
---|
549 | EXCEPTION_HANDLER(#, 49) |
---|
550 | |
---|
551 | EXCEPTION_HANDLER(#, 50) |
---|
552 | EXCEPTION_HANDLER(#, 51) |
---|
553 | EXCEPTION_HANDLER(#, 52) |
---|
554 | EXCEPTION_HANDLER(#, 53) |
---|
555 | EXCEPTION_HANDLER(#, 54) |
---|
556 | EXCEPTION_HANDLER(#, 55) |
---|
557 | EXCEPTION_HANDLER(#, 56) |
---|
558 | EXCEPTION_HANDLER(#, 57) |
---|
559 | EXCEPTION_HANDLER(#, 58) |
---|
560 | EXCEPTION_HANDLER(#, 59) |
---|
561 | |
---|
562 | EXCEPTION_HANDLER(#, 60) |
---|
563 | EXCEPTION_HANDLER(#, 61) |
---|
564 | EXCEPTION_HANDLER(#, 62) |
---|
565 | EXCEPTION_HANDLER(#, 63) |
---|
566 | EXCEPTION_HANDLER(#, 64) |
---|
567 | EXCEPTION_HANDLER(#, 65) |
---|
568 | EXCEPTION_HANDLER(#, 66) |
---|
569 | EXCEPTION_HANDLER(#, 67) |
---|
570 | EXCEPTION_HANDLER(#, 68) |
---|
571 | EXCEPTION_HANDLER(#, 69) |
---|
572 | |
---|
573 | EXCEPTION_HANDLER(#, 70) |
---|
574 | EXCEPTION_HANDLER(#, 71) |
---|
575 | EXCEPTION_HANDLER(#, 72) |
---|
576 | EXCEPTION_HANDLER(#, 73) |
---|
577 | EXCEPTION_HANDLER(#, 74) |
---|
578 | EXCEPTION_HANDLER(#, 75) |
---|
579 | EXCEPTION_HANDLER(#, 76) |
---|
580 | EXCEPTION_HANDLER(#, 77) |
---|
581 | EXCEPTION_HANDLER(#, 78) |
---|
582 | EXCEPTION_HANDLER(#, 79) |
---|
583 | |
---|
584 | EXCEPTION_HANDLER(#, 80) |
---|
585 | EXCEPTION_HANDLER(#, 81) |
---|
586 | EXCEPTION_HANDLER(#, 82) |
---|
587 | EXCEPTION_HANDLER(#, 83) |
---|
588 | EXCEPTION_HANDLER(#, 84) |
---|
589 | EXCEPTION_HANDLER(#, 85) |
---|
590 | EXCEPTION_HANDLER(#, 86) |
---|
591 | EXCEPTION_HANDLER(#, 87) |
---|
592 | EXCEPTION_HANDLER(#, 88) |
---|
593 | EXCEPTION_HANDLER(#, 89) |
---|
594 | |
---|
595 | EXCEPTION_HANDLER(#, 90) |
---|
596 | EXCEPTION_HANDLER(#, 91) |
---|
597 | EXCEPTION_HANDLER(#, 92) |
---|
598 | EXCEPTION_HANDLER(#, 93) |
---|
599 | EXCEPTION_HANDLER(#, 94) |
---|
600 | EXCEPTION_HANDLER(#, 95) |
---|
601 | EXCEPTION_HANDLER(#, 96) |
---|
602 | EXCEPTION_HANDLER(#, 97) |
---|
603 | EXCEPTION_HANDLER(#, 98) |
---|
604 | EXCEPTION_HANDLER(#, 99) |
---|
605 | |
---|
606 | EXCEPTION_HANDLER(#, 100) |
---|
607 | EXCEPTION_HANDLER(#, 101) |
---|
608 | EXCEPTION_HANDLER(#, 102) |
---|
609 | EXCEPTION_HANDLER(#, 103) |
---|
610 | EXCEPTION_HANDLER(#, 104) |
---|
611 | EXCEPTION_HANDLER(#, 105) |
---|
612 | EXCEPTION_HANDLER(#, 106) |
---|
613 | EXCEPTION_HANDLER(#, 107) |
---|
614 | EXCEPTION_HANDLER(#, 108) |
---|
615 | EXCEPTION_HANDLER(#, 109) |
---|
616 | |
---|
617 | EXCEPTION_HANDLER(#, 110) |
---|
618 | EXCEPTION_HANDLER(#, 111) |
---|
619 | EXCEPTION_HANDLER(#, 112) |
---|
620 | EXCEPTION_HANDLER(#, 113) |
---|
621 | EXCEPTION_HANDLER(#, 114) |
---|
622 | EXCEPTION_HANDLER(#, 115) |
---|
623 | EXCEPTION_HANDLER(#, 116) |
---|
624 | EXCEPTION_HANDLER(#, 117) |
---|
625 | EXCEPTION_HANDLER(#, 118) |
---|
626 | EXCEPTION_HANDLER(#, 119) |
---|
627 | |
---|
628 | EXCEPTION_HANDLER(#, 120) |
---|
629 | EXCEPTION_HANDLER(#, 121) |
---|
630 | EXCEPTION_HANDLER(#, 122) |
---|
631 | EXCEPTION_HANDLER(#, 123) |
---|
632 | EXCEPTION_HANDLER(#, 124) |
---|
633 | EXCEPTION_HANDLER(#, 125) |
---|
634 | EXCEPTION_HANDLER(#, 126) |
---|
635 | EXCEPTION_HANDLER(#, 127) |
---|
636 | EXCEPTION_HANDLER(#, 128) |
---|
637 | EXCEPTION_HANDLER(#, 129) |
---|
638 | |
---|
639 | EXCEPTION_HANDLER(#, 130) |
---|
640 | EXCEPTION_HANDLER(#, 131) |
---|
641 | EXCEPTION_HANDLER(#, 132) |
---|
642 | EXCEPTION_HANDLER(#, 133) |
---|
643 | EXCEPTION_HANDLER(#, 134) |
---|
644 | EXCEPTION_HANDLER(#, 135) |
---|
645 | EXCEPTION_HANDLER(#, 136) |
---|
646 | EXCEPTION_HANDLER(#, 137) |
---|
647 | EXCEPTION_HANDLER(#, 138) |
---|
648 | EXCEPTION_HANDLER(#, 139) |
---|
649 | |
---|
650 | EXCEPTION_HANDLER(#, 140) |
---|
651 | EXCEPTION_HANDLER(#, 141) |
---|
652 | EXCEPTION_HANDLER(#, 142) |
---|
653 | EXCEPTION_HANDLER(#, 143) |
---|
654 | EXCEPTION_HANDLER(#, 144) |
---|
655 | EXCEPTION_HANDLER(#, 145) |
---|
656 | EXCEPTION_HANDLER(#, 146) |
---|
657 | EXCEPTION_HANDLER(#, 147) |
---|
658 | EXCEPTION_HANDLER(#, 148) |
---|
659 | EXCEPTION_HANDLER(#, 149) |
---|
660 | |
---|
661 | EXCEPTION_HANDLER(#, 150) |
---|
662 | EXCEPTION_HANDLER(#, 151) |
---|
663 | EXCEPTION_HANDLER(#, 152) |
---|
664 | EXCEPTION_HANDLER(#, 153) |
---|
665 | EXCEPTION_HANDLER(#, 154) |
---|
666 | EXCEPTION_HANDLER(#, 155) |
---|
667 | EXCEPTION_HANDLER(#, 156) |
---|
668 | EXCEPTION_HANDLER(#, 157) |
---|
669 | EXCEPTION_HANDLER(#, 158) |
---|
670 | EXCEPTION_HANDLER(#, 159) |
---|
671 | |
---|
672 | EXCEPTION_HANDLER(#, 160) |
---|
673 | EXCEPTION_HANDLER(#, 161) |
---|
674 | EXCEPTION_HANDLER(#, 162) |
---|
675 | EXCEPTION_HANDLER(#, 163) |
---|
676 | EXCEPTION_HANDLER(#, 164) |
---|
677 | EXCEPTION_HANDLER(#, 165) |
---|
678 | EXCEPTION_HANDLER(#, 166) |
---|
679 | EXCEPTION_HANDLER(#, 167) |
---|
680 | EXCEPTION_HANDLER(#, 168) |
---|
681 | EXCEPTION_HANDLER(#, 169) |
---|
682 | |
---|
683 | EXCEPTION_HANDLER(#, 170) |
---|
684 | EXCEPTION_HANDLER(#, 171) |
---|
685 | EXCEPTION_HANDLER(#, 172) |
---|
686 | EXCEPTION_HANDLER(#, 173) |
---|
687 | EXCEPTION_HANDLER(#, 174) |
---|
688 | EXCEPTION_HANDLER(#, 175) |
---|
689 | EXCEPTION_HANDLER(#, 176) |
---|
690 | EXCEPTION_HANDLER(#, 177) |
---|
691 | EXCEPTION_HANDLER(#, 178) |
---|
692 | EXCEPTION_HANDLER(#, 179) |
---|
693 | |
---|
694 | EXCEPTION_HANDLER(#, 180) |
---|
695 | EXCEPTION_HANDLER(#, 181) |
---|
696 | EXCEPTION_HANDLER(#, 182) |
---|
697 | EXCEPTION_HANDLER(#, 183) |
---|
698 | EXCEPTION_HANDLER(#, 184) |
---|
699 | EXCEPTION_HANDLER(#, 185) |
---|
700 | EXCEPTION_HANDLER(#, 186) |
---|
701 | EXCEPTION_HANDLER(#, 187) |
---|
702 | EXCEPTION_HANDLER(#, 188) |
---|
703 | EXCEPTION_HANDLER(#, 189) |
---|
704 | |
---|
705 | EXCEPTION_HANDLER(#, 190) |
---|
706 | EXCEPTION_HANDLER(#, 191) |
---|
707 | EXCEPTION_HANDLER(#, 192) |
---|
708 | EXCEPTION_HANDLER(#, 193) |
---|
709 | EXCEPTION_HANDLER(#, 194) |
---|
710 | EXCEPTION_HANDLER(#, 195) |
---|
711 | EXCEPTION_HANDLER(#, 196) |
---|
712 | EXCEPTION_HANDLER(#, 197) |
---|
713 | EXCEPTION_HANDLER(#, 198) |
---|
714 | EXCEPTION_HANDLER(#, 199) |
---|
715 | |
---|
716 | EXCEPTION_HANDLER(#, 200) |
---|
717 | EXCEPTION_HANDLER(#, 201) |
---|
718 | EXCEPTION_HANDLER(#, 202) |
---|
719 | EXCEPTION_HANDLER(#, 203) |
---|
720 | EXCEPTION_HANDLER(#, 204) |
---|
721 | EXCEPTION_HANDLER(#, 205) |
---|
722 | EXCEPTION_HANDLER(#, 206) |
---|
723 | EXCEPTION_HANDLER(#, 207) |
---|
724 | EXCEPTION_HANDLER(#, 208) |
---|
725 | EXCEPTION_HANDLER(#, 209) |
---|
726 | |
---|
727 | EXCEPTION_HANDLER(#, 210) |
---|
728 | EXCEPTION_HANDLER(#, 211) |
---|
729 | EXCEPTION_HANDLER(#, 212) |
---|
730 | EXCEPTION_HANDLER(#, 213) |
---|
731 | EXCEPTION_HANDLER(#, 214) |
---|
732 | EXCEPTION_HANDLER(#, 215) |
---|
733 | EXCEPTION_HANDLER(#, 216) |
---|
734 | EXCEPTION_HANDLER(#, 217) |
---|
735 | EXCEPTION_HANDLER(#, 218) |
---|
736 | EXCEPTION_HANDLER(#, 219) |
---|
737 | |
---|
738 | EXCEPTION_HANDLER(#, 220) |
---|
739 | EXCEPTION_HANDLER(#, 221) |
---|
740 | EXCEPTION_HANDLER(#, 222) |
---|
741 | EXCEPTION_HANDLER(#, 223) |
---|
742 | EXCEPTION_HANDLER(#, 224) |
---|
743 | EXCEPTION_HANDLER(#, 225) |
---|
744 | EXCEPTION_HANDLER(#, 226) |
---|
745 | EXCEPTION_HANDLER(#, 227) |
---|
746 | EXCEPTION_HANDLER(#, 228) |
---|
747 | EXCEPTION_HANDLER(#, 229) |
---|
748 | |
---|
749 | EXCEPTION_HANDLER(#, 230) |
---|
750 | EXCEPTION_HANDLER(#, 231) |
---|
751 | EXCEPTION_HANDLER(#, 232) |
---|
752 | EXCEPTION_HANDLER(#, 233) |
---|
753 | EXCEPTION_HANDLER(#, 234) |
---|
754 | EXCEPTION_HANDLER(#, 235) |
---|
755 | EXCEPTION_HANDLER(#, 236) |
---|
756 | EXCEPTION_HANDLER(#, 237) |
---|
757 | EXCEPTION_HANDLER(#, 238) |
---|
758 | EXCEPTION_HANDLER(#, 239) |
---|
759 | |
---|
760 | EXCEPTION_HANDLER(#, 240) |
---|
761 | EXCEPTION_HANDLER(#, 241) |
---|
762 | EXCEPTION_HANDLER(#, 242) |
---|
763 | EXCEPTION_HANDLER(#, 243) |
---|
764 | EXCEPTION_HANDLER(#, 244) |
---|
765 | EXCEPTION_HANDLER(#, 245) |
---|
766 | EXCEPTION_HANDLER(#, 246) |
---|
767 | EXCEPTION_HANDLER(#, 247) |
---|
768 | EXCEPTION_HANDLER(#, 248) |
---|
769 | EXCEPTION_HANDLER(#, 249) |
---|
770 | |
---|
771 | EXCEPTION_HANDLER(#, 250) |
---|
772 | EXCEPTION_HANDLER(#, 251) |
---|
773 | EXCEPTION_HANDLER(#, 252) |
---|
774 | EXCEPTION_HANDLER(#, 253) |
---|
775 | EXCEPTION_HANDLER(#, 254) |
---|
776 | EXCEPTION_HANDLER(#, 255) |
---|
777 | |
---|
778 | |
---|
779 | common_exception_handler: |
---|
780 | |
---|
781 | | |
---|
782 | | Need to put the format/vector above the PC and status register |
---|
783 | | |
---|
784 | |
---|
785 | move.l %d0,-(%sp) | free a register |
---|
786 | move.w 4(%sp),%d0 | get the format/vector id |
---|
787 | |
---|
788 | | |
---|
789 | | If a bus error or address error then trash the extra |
---|
790 | | data saved on the stack |
---|
791 | | |
---|
792 | |
---|
793 | cmp.w #0x0008,%d0 |
---|
794 | beq ceh_10 |
---|
795 | |
---|
796 | cmp.w #0x000C,%d0 |
---|
797 | beq ceh_10 |
---|
798 | |
---|
799 | bra ceh_20 |
---|
800 | |
---|
801 | ceh_10: |
---|
802 | |
---|
803 | move.w %d0,12(%sp) | need to move the format/id |
---|
804 | move.l (%sp)+,%d0 | recover d0 |
---|
805 | addq #8,%sp | trash the stack |
---|
806 | move.l %d0,-(%sp) | free a register, again |
---|
807 | move.w 4(%sp),%d0 | get the format/vector id |
---|
808 | |
---|
809 | ceh_20: |
---|
810 | |
---|
811 | move.w 6(%sp),4(%sp) |
---|
812 | move.w 8(%sp),6(%sp) |
---|
813 | move.w 10(%sp),8(%sp) |
---|
814 | move.w %d0,10(%sp) | put the format/vector id |
---|
815 | move.l (%sp)+,%d0 |
---|
816 | |
---|
817 | | |
---|
818 | | Save all the registers, pass control to a dump trace routine |
---|
819 | | |
---|
820 | |
---|
821 | movem.l %d0-%d7/%a0-%a7,%sp@- |
---|
822 | |
---|
823 | | |
---|
824 | | check to see if ROM is mapped to zero |
---|
825 | | |
---|
826 | |
---|
827 | move.l #trace_exception,%d1 | get the linked address |
---|
828 | and.l #(ROM_SIZE - 1),%d1 | obtain the offset into the ROM |
---|
829 | lea.l %pc@(0),%a0 | were are we currently |
---|
830 | move.l %a0,%d0 | need to use a data register |
---|
831 | and.l #~(ROM_SIZE - 1),%d0 | keep the top part of the address |
---|
832 | or.l %d1,%d0 | apply it to the trace exception offset |
---|
833 | move.l %d0,%a0 | need an address register for jumping |
---|
834 | jsr %a0@(0) |
---|
835 | |
---|
836 | ceh_30: |
---|
837 | jmp ceh_30 |
---|
838 | | |
---|
839 | | The RAM based vector table |
---|
840 | | |
---|
841 | |
---|
842 | .sect .vtable |
---|
843 | |
---|
844 | .global vector_table |
---|
845 | |
---|
846 | vector_table: |
---|
847 | .space (256 * 4),0 |
---|
848 | |
---|
849 | | |
---|
850 | | Initialised data |
---|
851 | | |
---|
852 | |
---|
853 | .sect .data |
---|
854 | |
---|
855 | .global start_frame |
---|
856 | |
---|
857 | start_frame: |
---|
858 | .space 4,0 |
---|
859 | |
---|
860 | .global stack_start |
---|
861 | |
---|
862 | stack_start: |
---|
863 | .space 4,0 |
---|
864 | |
---|
865 | | |
---|
866 | | Uninitialised data |
---|
867 | | |
---|
868 | |
---|
869 | .sect .bss |
---|
870 | |
---|
871 | .global environ |
---|
872 | .align 2 |
---|
873 | |
---|
874 | environ: |
---|
875 | .long 0 |
---|
876 | |
---|
877 | .global heap_size |
---|
878 | .set heap_size,0x2000 |
---|
879 | |
---|
880 | .global stack_size |
---|
881 | .set stack_size,0x1000 |
---|
882 | |
---|
883 | |
---|