source: rtems/c/src/lib/libbsp/m68k/ods68302/start/reset.S @ 5e2dce0

4.104.114.84.95
Last change on this file since 5e2dce0 was 5e2dce0, checked in by Joel Sherrill <joel.sherrill@…>, on 11/27/01 at 23:38:03

2001-11-27 Joel Sherrill <joel@…>,

This was tracked as PR39.

  • include/bsp.h, start/cpuboot.c, start/reset.S, startup/debugger, startup/linkcmds, startup/rom: Eliminated required definition of macros in the custom file for the BSP to compile. The ROM and ROM address and size settings are now linker script items.
  • Property mode set to 100644
File size: 22.2 KB
Line 
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       
45M68Kvec:                                | standard location for vectors
46       
47|
48| Make relative, can have the code positioned any where
49|
50
51V___ISSP: .long  MC68302_BASE + MC68302_SYS_RAM_SIZE
52V____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
61exception_handler = unhandled_exception - V___ISSP
62#define MAKE_EXCEPTION_VECTOR(n) V___##n: .long (exception_handler + (n * 8))
63
64MAKE_EXCEPTION_VECTOR(2)
65MAKE_EXCEPTION_VECTOR(3)
66MAKE_EXCEPTION_VECTOR(4)
67MAKE_EXCEPTION_VECTOR(5)
68MAKE_EXCEPTION_VECTOR(6)
69MAKE_EXCEPTION_VECTOR(7)
70MAKE_EXCEPTION_VECTOR(8)
71MAKE_EXCEPTION_VECTOR(9)
72       
73MAKE_EXCEPTION_VECTOR(10)
74MAKE_EXCEPTION_VECTOR(11)
75MAKE_EXCEPTION_VECTOR(12)
76MAKE_EXCEPTION_VECTOR(13)
77MAKE_EXCEPTION_VECTOR(14)
78MAKE_EXCEPTION_VECTOR(15)
79MAKE_EXCEPTION_VECTOR(16)
80MAKE_EXCEPTION_VECTOR(17)
81MAKE_EXCEPTION_VECTOR(18)
82MAKE_EXCEPTION_VECTOR(19)
83
84MAKE_EXCEPTION_VECTOR(20)
85MAKE_EXCEPTION_VECTOR(21)
86MAKE_EXCEPTION_VECTOR(22)
87MAKE_EXCEPTION_VECTOR(23)
88MAKE_EXCEPTION_VECTOR(24)
89MAKE_EXCEPTION_VECTOR(25)
90MAKE_EXCEPTION_VECTOR(26)
91MAKE_EXCEPTION_VECTOR(27)
92MAKE_EXCEPTION_VECTOR(28)
93MAKE_EXCEPTION_VECTOR(29)
94       
95MAKE_EXCEPTION_VECTOR(30)
96MAKE_EXCEPTION_VECTOR(31)
97MAKE_EXCEPTION_VECTOR(32)
98MAKE_EXCEPTION_VECTOR(33)
99MAKE_EXCEPTION_VECTOR(34)
100MAKE_EXCEPTION_VECTOR(35)
101MAKE_EXCEPTION_VECTOR(36)
102MAKE_EXCEPTION_VECTOR(37)
103MAKE_EXCEPTION_VECTOR(38)
104MAKE_EXCEPTION_VECTOR(39)
105       
106MAKE_EXCEPTION_VECTOR(40)
107MAKE_EXCEPTION_VECTOR(41)
108MAKE_EXCEPTION_VECTOR(42)
109MAKE_EXCEPTION_VECTOR(43)
110MAKE_EXCEPTION_VECTOR(44)
111MAKE_EXCEPTION_VECTOR(45)
112MAKE_EXCEPTION_VECTOR(46)
113MAKE_EXCEPTION_VECTOR(47)
114MAKE_EXCEPTION_VECTOR(48)
115MAKE_EXCEPTION_VECTOR(49)
116       
117MAKE_EXCEPTION_VECTOR(50)
118MAKE_EXCEPTION_VECTOR(51)
119MAKE_EXCEPTION_VECTOR(52)
120MAKE_EXCEPTION_VECTOR(53)
121MAKE_EXCEPTION_VECTOR(54)
122MAKE_EXCEPTION_VECTOR(55)
123MAKE_EXCEPTION_VECTOR(56)
124MAKE_EXCEPTION_VECTOR(57)
125MAKE_EXCEPTION_VECTOR(58)
126MAKE_EXCEPTION_VECTOR(59)
127       
128MAKE_EXCEPTION_VECTOR(60)
129MAKE_EXCEPTION_VECTOR(61)
130MAKE_EXCEPTION_VECTOR(62)
131MAKE_EXCEPTION_VECTOR(63)
132MAKE_EXCEPTION_VECTOR(64)
133MAKE_EXCEPTION_VECTOR(65)
134MAKE_EXCEPTION_VECTOR(66)
135MAKE_EXCEPTION_VECTOR(67)
136MAKE_EXCEPTION_VECTOR(68)
137MAKE_EXCEPTION_VECTOR(69)
138       
139MAKE_EXCEPTION_VECTOR(70)
140MAKE_EXCEPTION_VECTOR(71)
141MAKE_EXCEPTION_VECTOR(72)
142MAKE_EXCEPTION_VECTOR(73)
143MAKE_EXCEPTION_VECTOR(74)
144MAKE_EXCEPTION_VECTOR(75)
145MAKE_EXCEPTION_VECTOR(76)
146MAKE_EXCEPTION_VECTOR(77)
147MAKE_EXCEPTION_VECTOR(78)
148MAKE_EXCEPTION_VECTOR(79)
149       
150MAKE_EXCEPTION_VECTOR(80)
151MAKE_EXCEPTION_VECTOR(81)
152MAKE_EXCEPTION_VECTOR(82)
153MAKE_EXCEPTION_VECTOR(83)
154MAKE_EXCEPTION_VECTOR(84)
155MAKE_EXCEPTION_VECTOR(85)
156MAKE_EXCEPTION_VECTOR(86)
157MAKE_EXCEPTION_VECTOR(87)
158MAKE_EXCEPTION_VECTOR(88)
159MAKE_EXCEPTION_VECTOR(89)
160       
161MAKE_EXCEPTION_VECTOR(90)
162MAKE_EXCEPTION_VECTOR(91)
163MAKE_EXCEPTION_VECTOR(92)
164MAKE_EXCEPTION_VECTOR(93)
165MAKE_EXCEPTION_VECTOR(94)
166MAKE_EXCEPTION_VECTOR(95)
167MAKE_EXCEPTION_VECTOR(96)
168MAKE_EXCEPTION_VECTOR(97)
169MAKE_EXCEPTION_VECTOR(98)
170MAKE_EXCEPTION_VECTOR(99)
171       
172MAKE_EXCEPTION_VECTOR(100)
173MAKE_EXCEPTION_VECTOR(101)
174MAKE_EXCEPTION_VECTOR(102)
175MAKE_EXCEPTION_VECTOR(103)
176MAKE_EXCEPTION_VECTOR(104)
177MAKE_EXCEPTION_VECTOR(105)
178MAKE_EXCEPTION_VECTOR(106)
179MAKE_EXCEPTION_VECTOR(107)
180MAKE_EXCEPTION_VECTOR(108)
181MAKE_EXCEPTION_VECTOR(109)
182       
183MAKE_EXCEPTION_VECTOR(110)
184MAKE_EXCEPTION_VECTOR(111)
185MAKE_EXCEPTION_VECTOR(112)
186MAKE_EXCEPTION_VECTOR(113)
187MAKE_EXCEPTION_VECTOR(114)
188MAKE_EXCEPTION_VECTOR(115)
189MAKE_EXCEPTION_VECTOR(116)
190MAKE_EXCEPTION_VECTOR(117)
191MAKE_EXCEPTION_VECTOR(118)
192MAKE_EXCEPTION_VECTOR(119)
193
194MAKE_EXCEPTION_VECTOR(120)
195MAKE_EXCEPTION_VECTOR(121)
196MAKE_EXCEPTION_VECTOR(122)
197MAKE_EXCEPTION_VECTOR(123)
198MAKE_EXCEPTION_VECTOR(124)
199MAKE_EXCEPTION_VECTOR(125)
200MAKE_EXCEPTION_VECTOR(126)
201MAKE_EXCEPTION_VECTOR(127)
202MAKE_EXCEPTION_VECTOR(128)
203MAKE_EXCEPTION_VECTOR(129)
204       
205MAKE_EXCEPTION_VECTOR(130)
206MAKE_EXCEPTION_VECTOR(131)
207MAKE_EXCEPTION_VECTOR(132)
208MAKE_EXCEPTION_VECTOR(133)
209MAKE_EXCEPTION_VECTOR(134)
210MAKE_EXCEPTION_VECTOR(135)
211MAKE_EXCEPTION_VECTOR(136)
212MAKE_EXCEPTION_VECTOR(137)
213MAKE_EXCEPTION_VECTOR(138)
214MAKE_EXCEPTION_VECTOR(139)
215                       
216MAKE_EXCEPTION_VECTOR(140)
217MAKE_EXCEPTION_VECTOR(141)
218MAKE_EXCEPTION_VECTOR(142)
219MAKE_EXCEPTION_VECTOR(143)
220MAKE_EXCEPTION_VECTOR(144)
221MAKE_EXCEPTION_VECTOR(145)
222MAKE_EXCEPTION_VECTOR(146)
223MAKE_EXCEPTION_VECTOR(147)
224MAKE_EXCEPTION_VECTOR(148)
225MAKE_EXCEPTION_VECTOR(149)
226       
227MAKE_EXCEPTION_VECTOR(150)
228MAKE_EXCEPTION_VECTOR(151)
229MAKE_EXCEPTION_VECTOR(152)
230MAKE_EXCEPTION_VECTOR(153)
231MAKE_EXCEPTION_VECTOR(154)
232MAKE_EXCEPTION_VECTOR(155)
233MAKE_EXCEPTION_VECTOR(156)
234MAKE_EXCEPTION_VECTOR(157)
235MAKE_EXCEPTION_VECTOR(158)
236MAKE_EXCEPTION_VECTOR(159)
237                       
238MAKE_EXCEPTION_VECTOR(160)
239MAKE_EXCEPTION_VECTOR(161)
240MAKE_EXCEPTION_VECTOR(162)
241MAKE_EXCEPTION_VECTOR(163)
242MAKE_EXCEPTION_VECTOR(164)
243MAKE_EXCEPTION_VECTOR(165)
244MAKE_EXCEPTION_VECTOR(166)
245MAKE_EXCEPTION_VECTOR(167)
246MAKE_EXCEPTION_VECTOR(168)
247MAKE_EXCEPTION_VECTOR(169)
248       
249MAKE_EXCEPTION_VECTOR(170)
250MAKE_EXCEPTION_VECTOR(171)
251MAKE_EXCEPTION_VECTOR(172)
252MAKE_EXCEPTION_VECTOR(173)
253MAKE_EXCEPTION_VECTOR(174)
254MAKE_EXCEPTION_VECTOR(175)
255MAKE_EXCEPTION_VECTOR(176)
256MAKE_EXCEPTION_VECTOR(177)
257MAKE_EXCEPTION_VECTOR(178)
258MAKE_EXCEPTION_VECTOR(179)
259                       
260MAKE_EXCEPTION_VECTOR(180)
261MAKE_EXCEPTION_VECTOR(181)
262MAKE_EXCEPTION_VECTOR(182)
263MAKE_EXCEPTION_VECTOR(183)
264MAKE_EXCEPTION_VECTOR(184)
265MAKE_EXCEPTION_VECTOR(185)
266MAKE_EXCEPTION_VECTOR(186)
267MAKE_EXCEPTION_VECTOR(187)
268MAKE_EXCEPTION_VECTOR(188)
269MAKE_EXCEPTION_VECTOR(189)
270       
271MAKE_EXCEPTION_VECTOR(190)
272MAKE_EXCEPTION_VECTOR(191)
273MAKE_EXCEPTION_VECTOR(192)
274MAKE_EXCEPTION_VECTOR(193)
275MAKE_EXCEPTION_VECTOR(194)
276MAKE_EXCEPTION_VECTOR(195)
277MAKE_EXCEPTION_VECTOR(196)
278MAKE_EXCEPTION_VECTOR(197)
279MAKE_EXCEPTION_VECTOR(198)
280MAKE_EXCEPTION_VECTOR(199)
281       
282MAKE_EXCEPTION_VECTOR(200)
283MAKE_EXCEPTION_VECTOR(201)
284MAKE_EXCEPTION_VECTOR(202)
285MAKE_EXCEPTION_VECTOR(203)
286MAKE_EXCEPTION_VECTOR(204)
287MAKE_EXCEPTION_VECTOR(205)
288MAKE_EXCEPTION_VECTOR(206)
289MAKE_EXCEPTION_VECTOR(207)
290MAKE_EXCEPTION_VECTOR(208)
291MAKE_EXCEPTION_VECTOR(209)
292                     
293MAKE_EXCEPTION_VECTOR(210)
294MAKE_EXCEPTION_VECTOR(211)
295MAKE_EXCEPTION_VECTOR(212)
296MAKE_EXCEPTION_VECTOR(213)
297MAKE_EXCEPTION_VECTOR(214)
298MAKE_EXCEPTION_VECTOR(215)
299MAKE_EXCEPTION_VECTOR(216)
300MAKE_EXCEPTION_VECTOR(217)
301MAKE_EXCEPTION_VECTOR(218)
302MAKE_EXCEPTION_VECTOR(219)
303                     
304MAKE_EXCEPTION_VECTOR(220)
305MAKE_EXCEPTION_VECTOR(221)
306MAKE_EXCEPTION_VECTOR(222)
307MAKE_EXCEPTION_VECTOR(223)
308MAKE_EXCEPTION_VECTOR(224)
309MAKE_EXCEPTION_VECTOR(225)
310MAKE_EXCEPTION_VECTOR(226)
311MAKE_EXCEPTION_VECTOR(227)
312MAKE_EXCEPTION_VECTOR(228)
313MAKE_EXCEPTION_VECTOR(229)
314                     
315MAKE_EXCEPTION_VECTOR(230)
316MAKE_EXCEPTION_VECTOR(231)
317MAKE_EXCEPTION_VECTOR(232)
318MAKE_EXCEPTION_VECTOR(233)
319MAKE_EXCEPTION_VECTOR(234)
320MAKE_EXCEPTION_VECTOR(235)
321MAKE_EXCEPTION_VECTOR(236)
322MAKE_EXCEPTION_VECTOR(237)
323MAKE_EXCEPTION_VECTOR(238)
324MAKE_EXCEPTION_VECTOR(239)
325                     
326MAKE_EXCEPTION_VECTOR(240)
327MAKE_EXCEPTION_VECTOR(241)
328MAKE_EXCEPTION_VECTOR(242)
329MAKE_EXCEPTION_VECTOR(243)
330MAKE_EXCEPTION_VECTOR(244)
331MAKE_EXCEPTION_VECTOR(245)
332MAKE_EXCEPTION_VECTOR(246)
333MAKE_EXCEPTION_VECTOR(247)
334MAKE_EXCEPTION_VECTOR(248)
335MAKE_EXCEPTION_VECTOR(249)
336                     
337MAKE_EXCEPTION_VECTOR(250)
338MAKE_EXCEPTION_VECTOR(251)
339MAKE_EXCEPTION_VECTOR(252)
340MAKE_EXCEPTION_VECTOR(253)
341MAKE_EXCEPTION_VECTOR(254)
342MAKE_EXCEPTION_VECTOR(255)                               
343
344|
345| Start
346|
347| Entered from a hardware reset.
348|
349       
350        .global start                           | Default entry point for GNU
351start:
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       
397copy_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       
427copy_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
447copy_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       
452copy_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
462zerobss:
463        moveal  #_clear_end,%a0                 | find end of .bss
464        moveal  #_clear_start,%a1               | find beginning of .bss
465        moveq   #0,%d0
466       
467zerobss_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
494unhandled_exception:
495               
496EXCEPTION_HANDLER(#, 0)
497EXCEPTION_HANDLER(#, 1)
498EXCEPTION_HANDLER(#, 2)
499EXCEPTION_HANDLER(#, 3)
500EXCEPTION_HANDLER(#, 4)
501EXCEPTION_HANDLER(#, 5)
502EXCEPTION_HANDLER(#, 6)
503EXCEPTION_HANDLER(#, 7)
504EXCEPTION_HANDLER(#, 8)
505EXCEPTION_HANDLER(#, 9)
506       
507EXCEPTION_HANDLER(#, 10)
508EXCEPTION_HANDLER(#, 11)
509EXCEPTION_HANDLER(#, 12)
510EXCEPTION_HANDLER(#, 13)
511EXCEPTION_HANDLER(#, 14)
512EXCEPTION_HANDLER(#, 15)
513EXCEPTION_HANDLER(#, 16)
514EXCEPTION_HANDLER(#, 17)
515EXCEPTION_HANDLER(#, 18)
516EXCEPTION_HANDLER(#, 19)
517
518EXCEPTION_HANDLER(#, 20)
519EXCEPTION_HANDLER(#, 21)
520EXCEPTION_HANDLER(#, 22)
521EXCEPTION_HANDLER(#, 23)
522EXCEPTION_HANDLER(#, 24)
523EXCEPTION_HANDLER(#, 25)
524EXCEPTION_HANDLER(#, 26)
525EXCEPTION_HANDLER(#, 27)
526EXCEPTION_HANDLER(#, 28)
527EXCEPTION_HANDLER(#, 29)
528       
529EXCEPTION_HANDLER(#, 30)
530EXCEPTION_HANDLER(#, 31)
531EXCEPTION_HANDLER(#, 32)
532EXCEPTION_HANDLER(#, 33)
533EXCEPTION_HANDLER(#, 34)
534EXCEPTION_HANDLER(#, 35)
535EXCEPTION_HANDLER(#, 36)
536EXCEPTION_HANDLER(#, 37)
537EXCEPTION_HANDLER(#, 38)
538EXCEPTION_HANDLER(#, 39)
539       
540EXCEPTION_HANDLER(#, 40)
541EXCEPTION_HANDLER(#, 41)
542EXCEPTION_HANDLER(#, 42)
543EXCEPTION_HANDLER(#, 43)
544EXCEPTION_HANDLER(#, 44)
545EXCEPTION_HANDLER(#, 45)
546EXCEPTION_HANDLER(#, 46)
547EXCEPTION_HANDLER(#, 47)
548EXCEPTION_HANDLER(#, 48)
549EXCEPTION_HANDLER(#, 49)
550       
551EXCEPTION_HANDLER(#, 50)
552EXCEPTION_HANDLER(#, 51)
553EXCEPTION_HANDLER(#, 52)
554EXCEPTION_HANDLER(#, 53)
555EXCEPTION_HANDLER(#, 54)
556EXCEPTION_HANDLER(#, 55)
557EXCEPTION_HANDLER(#, 56)
558EXCEPTION_HANDLER(#, 57)
559EXCEPTION_HANDLER(#, 58)
560EXCEPTION_HANDLER(#, 59)
561       
562EXCEPTION_HANDLER(#, 60)
563EXCEPTION_HANDLER(#, 61)
564EXCEPTION_HANDLER(#, 62)
565EXCEPTION_HANDLER(#, 63)
566EXCEPTION_HANDLER(#, 64)
567EXCEPTION_HANDLER(#, 65)
568EXCEPTION_HANDLER(#, 66)
569EXCEPTION_HANDLER(#, 67)
570EXCEPTION_HANDLER(#, 68)
571EXCEPTION_HANDLER(#, 69)
572       
573EXCEPTION_HANDLER(#, 70)
574EXCEPTION_HANDLER(#, 71)
575EXCEPTION_HANDLER(#, 72)
576EXCEPTION_HANDLER(#, 73)
577EXCEPTION_HANDLER(#, 74)
578EXCEPTION_HANDLER(#, 75)
579EXCEPTION_HANDLER(#, 76)
580EXCEPTION_HANDLER(#, 77)
581EXCEPTION_HANDLER(#, 78)
582EXCEPTION_HANDLER(#, 79)
583       
584EXCEPTION_HANDLER(#, 80)
585EXCEPTION_HANDLER(#, 81)
586EXCEPTION_HANDLER(#, 82)
587EXCEPTION_HANDLER(#, 83)
588EXCEPTION_HANDLER(#, 84)
589EXCEPTION_HANDLER(#, 85)
590EXCEPTION_HANDLER(#, 86)
591EXCEPTION_HANDLER(#, 87)
592EXCEPTION_HANDLER(#, 88)
593EXCEPTION_HANDLER(#, 89)
594       
595EXCEPTION_HANDLER(#, 90)
596EXCEPTION_HANDLER(#, 91)
597EXCEPTION_HANDLER(#, 92)
598EXCEPTION_HANDLER(#, 93)
599EXCEPTION_HANDLER(#, 94)
600EXCEPTION_HANDLER(#, 95)
601EXCEPTION_HANDLER(#, 96)
602EXCEPTION_HANDLER(#, 97)
603EXCEPTION_HANDLER(#, 98)
604EXCEPTION_HANDLER(#, 99)
605       
606EXCEPTION_HANDLER(#, 100)
607EXCEPTION_HANDLER(#, 101)
608EXCEPTION_HANDLER(#, 102)
609EXCEPTION_HANDLER(#, 103)
610EXCEPTION_HANDLER(#, 104)
611EXCEPTION_HANDLER(#, 105)
612EXCEPTION_HANDLER(#, 106)
613EXCEPTION_HANDLER(#, 107)
614EXCEPTION_HANDLER(#, 108)
615EXCEPTION_HANDLER(#, 109)
616       
617EXCEPTION_HANDLER(#, 110)
618EXCEPTION_HANDLER(#, 111)
619EXCEPTION_HANDLER(#, 112)
620EXCEPTION_HANDLER(#, 113)
621EXCEPTION_HANDLER(#, 114)
622EXCEPTION_HANDLER(#, 115)
623EXCEPTION_HANDLER(#, 116)
624EXCEPTION_HANDLER(#, 117)
625EXCEPTION_HANDLER(#, 118)
626EXCEPTION_HANDLER(#, 119)
627
628EXCEPTION_HANDLER(#, 120)
629EXCEPTION_HANDLER(#, 121)
630EXCEPTION_HANDLER(#, 122)
631EXCEPTION_HANDLER(#, 123)
632EXCEPTION_HANDLER(#, 124)
633EXCEPTION_HANDLER(#, 125)
634EXCEPTION_HANDLER(#, 126)
635EXCEPTION_HANDLER(#, 127)
636EXCEPTION_HANDLER(#, 128)
637EXCEPTION_HANDLER(#, 129)
638       
639EXCEPTION_HANDLER(#, 130)
640EXCEPTION_HANDLER(#, 131)
641EXCEPTION_HANDLER(#, 132)
642EXCEPTION_HANDLER(#, 133)
643EXCEPTION_HANDLER(#, 134)
644EXCEPTION_HANDLER(#, 135)
645EXCEPTION_HANDLER(#, 136)
646EXCEPTION_HANDLER(#, 137)
647EXCEPTION_HANDLER(#, 138)
648EXCEPTION_HANDLER(#, 139)
649                       
650EXCEPTION_HANDLER(#, 140)
651EXCEPTION_HANDLER(#, 141)
652EXCEPTION_HANDLER(#, 142)
653EXCEPTION_HANDLER(#, 143)
654EXCEPTION_HANDLER(#, 144)
655EXCEPTION_HANDLER(#, 145)
656EXCEPTION_HANDLER(#, 146)
657EXCEPTION_HANDLER(#, 147)
658EXCEPTION_HANDLER(#, 148)
659EXCEPTION_HANDLER(#, 149)
660       
661EXCEPTION_HANDLER(#, 150)
662EXCEPTION_HANDLER(#, 151)
663EXCEPTION_HANDLER(#, 152)
664EXCEPTION_HANDLER(#, 153)
665EXCEPTION_HANDLER(#, 154)
666EXCEPTION_HANDLER(#, 155)
667EXCEPTION_HANDLER(#, 156)
668EXCEPTION_HANDLER(#, 157)
669EXCEPTION_HANDLER(#, 158)
670EXCEPTION_HANDLER(#, 159)
671                       
672EXCEPTION_HANDLER(#, 160)
673EXCEPTION_HANDLER(#, 161)
674EXCEPTION_HANDLER(#, 162)
675EXCEPTION_HANDLER(#, 163)
676EXCEPTION_HANDLER(#, 164)
677EXCEPTION_HANDLER(#, 165)
678EXCEPTION_HANDLER(#, 166)
679EXCEPTION_HANDLER(#, 167)
680EXCEPTION_HANDLER(#, 168)
681EXCEPTION_HANDLER(#, 169)
682       
683EXCEPTION_HANDLER(#, 170)
684EXCEPTION_HANDLER(#, 171)
685EXCEPTION_HANDLER(#, 172)
686EXCEPTION_HANDLER(#, 173)
687EXCEPTION_HANDLER(#, 174)
688EXCEPTION_HANDLER(#, 175)
689EXCEPTION_HANDLER(#, 176)
690EXCEPTION_HANDLER(#, 177)
691EXCEPTION_HANDLER(#, 178)
692EXCEPTION_HANDLER(#, 179)
693                       
694EXCEPTION_HANDLER(#, 180)
695EXCEPTION_HANDLER(#, 181)
696EXCEPTION_HANDLER(#, 182)
697EXCEPTION_HANDLER(#, 183)
698EXCEPTION_HANDLER(#, 184)
699EXCEPTION_HANDLER(#, 185)
700EXCEPTION_HANDLER(#, 186)
701EXCEPTION_HANDLER(#, 187)
702EXCEPTION_HANDLER(#, 188)
703EXCEPTION_HANDLER(#, 189)
704       
705EXCEPTION_HANDLER(#, 190)
706EXCEPTION_HANDLER(#, 191)
707EXCEPTION_HANDLER(#, 192)
708EXCEPTION_HANDLER(#, 193)
709EXCEPTION_HANDLER(#, 194)
710EXCEPTION_HANDLER(#, 195)
711EXCEPTION_HANDLER(#, 196)
712EXCEPTION_HANDLER(#, 197)
713EXCEPTION_HANDLER(#, 198)
714EXCEPTION_HANDLER(#, 199)
715       
716EXCEPTION_HANDLER(#, 200)
717EXCEPTION_HANDLER(#, 201)
718EXCEPTION_HANDLER(#, 202)
719EXCEPTION_HANDLER(#, 203)
720EXCEPTION_HANDLER(#, 204)
721EXCEPTION_HANDLER(#, 205)
722EXCEPTION_HANDLER(#, 206)
723EXCEPTION_HANDLER(#, 207)
724EXCEPTION_HANDLER(#, 208)
725EXCEPTION_HANDLER(#, 209)
726                     
727EXCEPTION_HANDLER(#, 210)
728EXCEPTION_HANDLER(#, 211)
729EXCEPTION_HANDLER(#, 212)
730EXCEPTION_HANDLER(#, 213)
731EXCEPTION_HANDLER(#, 214)
732EXCEPTION_HANDLER(#, 215)
733EXCEPTION_HANDLER(#, 216)
734EXCEPTION_HANDLER(#, 217)
735EXCEPTION_HANDLER(#, 218)
736EXCEPTION_HANDLER(#, 219)
737                     
738EXCEPTION_HANDLER(#, 220)
739EXCEPTION_HANDLER(#, 221)
740EXCEPTION_HANDLER(#, 222)
741EXCEPTION_HANDLER(#, 223)
742EXCEPTION_HANDLER(#, 224)
743EXCEPTION_HANDLER(#, 225)
744EXCEPTION_HANDLER(#, 226)
745EXCEPTION_HANDLER(#, 227)
746EXCEPTION_HANDLER(#, 228)
747EXCEPTION_HANDLER(#, 229)
748                     
749EXCEPTION_HANDLER(#, 230)
750EXCEPTION_HANDLER(#, 231)
751EXCEPTION_HANDLER(#, 232)
752EXCEPTION_HANDLER(#, 233)
753EXCEPTION_HANDLER(#, 234)
754EXCEPTION_HANDLER(#, 235)
755EXCEPTION_HANDLER(#, 236)
756EXCEPTION_HANDLER(#, 237)
757EXCEPTION_HANDLER(#, 238)
758EXCEPTION_HANDLER(#, 239)
759                     
760EXCEPTION_HANDLER(#, 240)
761EXCEPTION_HANDLER(#, 241)
762EXCEPTION_HANDLER(#, 242)
763EXCEPTION_HANDLER(#, 243)
764EXCEPTION_HANDLER(#, 244)
765EXCEPTION_HANDLER(#, 245)
766EXCEPTION_HANDLER(#, 246)
767EXCEPTION_HANDLER(#, 247)
768EXCEPTION_HANDLER(#, 248)
769EXCEPTION_HANDLER(#, 249)
770                     
771EXCEPTION_HANDLER(#, 250)
772EXCEPTION_HANDLER(#, 251)
773EXCEPTION_HANDLER(#, 252)
774EXCEPTION_HANDLER(#, 253)
775EXCEPTION_HANDLER(#, 254)
776EXCEPTION_HANDLER(#, 255)                               
777
778
779common_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
801ceh_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
809ceh_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
836ceh_30:                 
837        jmp     ceh_30
838|
839| The RAM based vector table
840|
841
842        .sect   .vtable
843
844        .global vector_table
845
846vector_table:   
847        .space  (256 * 4),0
848
849|               
850| Initialised data
851|
852
853        .sect   .data
854       
855        .global start_frame
856       
857start_frame:
858        .space  4,0
859
860        .global stack_start
861       
862stack_start:
863        .space  4,0
864
865|
866| Uninitialised data
867|
868
869        .sect   .bss
870       
871        .global environ
872        .align  2
873       
874environ:
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
Note: See TracBrowser for help on using the repository browser.