source: rtems/c/src/lib/libbsp/m68k/ods68302/start/reset.S @ 0473224e

Last change on this file since 0473224e was 0473224e, checked in by Joel Sherrill <joel.sherrill@…>, on 09/04/03 at 17:30:47

2003-09-04 Joel Sherrill <joel@…>

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