source: rtems/c/src/lib/libbsp/m68k/mcf5206elite/start/start.S @ f05b2ac

4.104.114.84.95
Last change on this file since f05b2ac was f05b2ac, checked in by Ralf Corsepius <ralf.corsepius@…>, on 04/21/04 at 16:01:48

Remove duplicate white lines.

  • Property mode set to 100644
File size: 9.2 KB
Line 
1/*
2 *  MCF5206eLITE startup code
3 *
4 *  This file contains the entry point for the application.
5 *  The name of this entry point is compiler dependent.
6 *  It jumps to the BSP which is responsible for performing
7 *  all initialization.
8 *
9 *  Copyright (C) 2000 OKTET Ltd., St.-Petersburg, Russia
10 *  Author: Victor V. Vengerov <vvv@oktet.ru>
11 *
12 *  Based on work:
13 *  Author:
14 *    David Fiddes, D.J@fiddes.surfaid.org
15 *    http://www.calm.hw.ac.uk/davidf/coldfire/
16 *
17 *  COPYRIGHT (c) 1989-1998.
18 *  On-Line Applications Research Corporation (OAR).
19 *
20 *  The license and distribution terms for this file may be
21 *  found in the file LICENSE in this distribution or at
22 *
23 *  http://www.rtems.com/license/LICENSE.
24 *
25 *  $Id$
26 */
27
28#include <rtems/asm.h>
29#include "bsp.h"
30
31BEGIN_CODE
32
33/* Initial stack situated in on-chip static memory */
34#define INITIAL_STACK BSP_MEM_ADDR_SRAM+BSP_MEM_SIZE_SRAM-4
35
36        PUBLIC  (INTERRUPT_VECTOR)
37SYM(INTERRUPT_VECTOR):
38        .long   INITIAL_STACK           | 00: initial SSP
39        .long   start                   | 01: Initial PC
40        .long   _unexp_exception        | 02: Access Error
41        .long   _unexp_exception        | 03: Address Error
42        .long   _unexp_exception        | 04: Illegal Instruction
43        .long   _reserved_int           | 05: Reserved
44        .long   _reserved_int           | 06: Reserved
45        .long   _reserved_int           | 07: Reserved
46        .long   _unexp_exception        | 08: Priveledge Violation
47        .long   _unexp_exception        | 09: Trace
48        .long   _unexp_exception        | 0A: Unimplemented A-Line
49        .long   _unexp_exception        | 0B: Unimplemented F-Line
50        .long   _unexp_exception        | 0C: Debug interrupt
51        .long   _reserved_int           | 0D: Reserved
52        .long   _unexp_exception        | 0E: Format error
53        .long   _unexp_exception        | 0F: Uninitialized interrupt
54        .long   _reserved_int           | 10: Reserved
55        .long   _reserved_int           | 11: Reserved
56        .long   _reserved_int           | 12: Reserved
57        .long   _reserved_int           | 13: Reserved
58        .long   _reserved_int           | 14: Reserved
59        .long   _reserved_int           | 15: Reserved
60        .long   _reserved_int           | 16: Reserved
61        .long   _reserved_int           | 17: Reserved
62        .long   _spurious_int           | 18: Spurious interrupt
63        .long   _avec1_int              | 19: Autovector Level 1
64        .long   _avec2_int              | 1A: Autovector Level 2
65        .long   _avec3_int              | 1B: Autovector Level 3
66        .long   _avec4_int              | 1C: Autovector Level 4
67        .long   _avec5_int              | 1D: Autovector Level 5
68        .long   _avec6_int              | 1E: Autovector Level 6
69        .long   _avec7_int              | 1F: Autovector Level 7
70        .long   _unexp_exception        | 20: TRAP #0
71        .long   _unexp_exception        | 21: TRAP #1
72        .long   _unexp_exception        | 22: TRAP #2
73        .long   _unexp_exception        | 23: TRAP #3
74        .long   _unexp_exception        | 24: TRAP #4
75        .long   _unexp_exception        | 25: TRAP #5
76        .long   _unexp_exception        | 26: TRAP #6
77        .long   _unexp_exception        | 27: TRAP #7
78        .long   _unexp_exception        | 28: TRAP #8
79        .long   _unexp_exception        | 29: TRAP #9
80        .long   _unexp_exception        | 2A: TRAP #10
81        .long   _unexp_exception        | 2B: TRAP #11
82        .long   _unexp_exception        | 2C: TRAP #12
83        .long   _unexp_exception        | 2D: TRAP #13
84        .long   _unexp_exception        | 2E: TRAP #14
85        .long   _unexp_exception        | 2F: TRAP #15
86        .long   _reserved_int           | 30: Reserved
87        .long   _reserved_int           | 31: Reserved
88        .long   _reserved_int           | 32: Reserved
89        .long   _reserved_int           | 33: Reserved
90        .long   _reserved_int           | 34: Reserved
91        .long   _reserved_int           | 35: Reserved
92        .long   _reserved_int           | 36: Reserved
93        .long   _reserved_int           | 37: Reserved
94        .long   _reserved_int           | 38: Reserved
95        .long   _reserved_int           | 39: Reserved
96        .long   _reserved_int           | 3A: Reserved
97        .long   _reserved_int           | 3B: Reserved
98        .long   _reserved_int           | 3C: Reserved
99        .long   _reserved_int           | 3D: Reserved
100        .long   _reserved_int           | 3E: Reserved
101        .long   _reserved_int           | 3F: Reserved
102
103        .long   _unexp_int              | 40-FF: User defined interrupts
104        .long   _unexp_int
105        .long   _unexp_int
106        .long   _unexp_int
107        .long   _unexp_int
108        .long   _unexp_int
109        .long   _unexp_int
110        .long   _unexp_int
111        .long   _unexp_int
112        .long   _unexp_int
113        .long   _unexp_int
114        .long   _unexp_int
115        .long   _unexp_int
116        .long   _unexp_int
117        .long   _unexp_int
118        .long   _unexp_int
119
120        .long   _unexp_int              | 50:
121        .long   _unexp_int
122        .long   _unexp_int
123        .long   _unexp_int
124        .long   _unexp_int
125        .long   _unexp_int
126        .long   _unexp_int
127        .long   _unexp_int
128        .long   _unexp_int
129        .long   _unexp_int
130        .long   _unexp_int
131        .long   _unexp_int
132        .long   _unexp_int
133        .long   _unexp_int
134        .long   _unexp_int
135        .long   _unexp_int
136
137        .long   _unexp_int              | 60:
138        .long   _unexp_int
139        .long   _unexp_int
140        .long   _unexp_int
141        .long   _unexp_int
142        .long   _unexp_int
143        .long   _unexp_int
144        .long   _unexp_int
145        .long   _unexp_int
146        .long   _unexp_int
147        .long   _unexp_int
148        .long   _unexp_int
149        .long   _unexp_int
150        .long   _unexp_int
151        .long   _unexp_int
152        .long   _unexp_int
153
154        .long   _unexp_int              | 70:
155        .long   _unexp_int
156        .long   _unexp_int
157        .long   _unexp_int
158        .long   _unexp_int
159        .long   _unexp_int
160        .long   _unexp_int
161        .long   _unexp_int
162        .long   _unexp_int
163        .long   _unexp_int
164        .long   _unexp_int
165        .long   _unexp_int
166        .long   _unexp_int
167        .long   _unexp_int
168        .long   _unexp_int
169        .long   _unexp_int
170
171        .long   _unexp_int              | 80:
172        .long   _unexp_int
173        .long   _unexp_int
174        .long   _unexp_int
175        .long   _unexp_int
176        .long   _unexp_int
177        .long   _unexp_int
178        .long   _unexp_int
179        .long   _unexp_int
180        .long   _unexp_int
181        .long   _unexp_int
182        .long   _unexp_int
183        .long   _unexp_int
184        .long   _unexp_int
185        .long   _unexp_int
186        .long   _unexp_int
187
188        .long   _unexp_int              | 90:
189        .long   _unexp_int
190        .long   _unexp_int
191        .long   _unexp_int
192        .long   _unexp_int
193        .long   _unexp_int
194        .long   _unexp_int
195        .long   _unexp_int
196        .long   _unexp_int
197        .long   _unexp_int
198        .long   _unexp_int
199        .long   _unexp_int
200        .long   _unexp_int
201        .long   _unexp_int
202        .long   _unexp_int
203        .long   _unexp_int
204
205        .long   _unexp_int              | A0:
206        .long   _unexp_int
207        .long   _unexp_int
208        .long   _unexp_int
209        .long   _unexp_int
210        .long   _unexp_int
211        .long   _unexp_int
212        .long   _unexp_int
213        .long   _unexp_int
214        .long   _unexp_int
215        .long   _unexp_int
216        .long   _unexp_int
217        .long   _unexp_int
218        .long   _unexp_int
219        .long   _unexp_int
220        .long   _unexp_int
221
222        .long   _unexp_int              | B0:
223        .long   _unexp_int
224        .long   _unexp_int
225        .long   _unexp_int
226        .long   _unexp_int
227        .long   _unexp_int
228        .long   _unexp_int
229        .long   _unexp_int
230        .long   _unexp_int
231        .long   _unexp_int
232        .long   _unexp_int
233        .long   _unexp_int
234        .long   _unexp_int
235        .long   _unexp_int
236        .long   _unexp_int
237        .long   _unexp_int
238
239        .long   _unexp_int              | C0:
240        .long   _unexp_int
241        .long   _unexp_int
242        .long   _unexp_int
243        .long   _unexp_int
244        .long   _unexp_int
245        .long   _unexp_int
246        .long   _unexp_int
247        .long   _unexp_int
248        .long   _unexp_int
249        .long   _unexp_int
250        .long   _unexp_int
251        .long   _unexp_int
252        .long   _unexp_int
253        .long   _unexp_int
254        .long   _unexp_int
255
256        .long   _unexp_int              | D0:
257        .long   _unexp_int
258        .long   _unexp_int
259        .long   _unexp_int
260        .long   _unexp_int
261        .long   _unexp_int
262        .long   _unexp_int
263        .long   _unexp_int
264        .long   _unexp_int
265        .long   _unexp_int
266        .long   _unexp_int
267        .long   _unexp_int
268        .long   _unexp_int
269        .long   _unexp_int
270        .long   _unexp_int
271        .long   _unexp_int
272
273        .long   _unexp_int              | E0:
274        .long   _unexp_int
275        .long   _unexp_int
276        .long   _unexp_int
277        .long   _unexp_int
278        .long   _unexp_int
279        .long   _unexp_int
280        .long   _unexp_int
281        .long   _unexp_int
282        .long   _unexp_int
283        .long   _unexp_int
284        .long   _unexp_int
285        .long   _unexp_int
286        .long   _unexp_int
287        .long   _unexp_int
288        .long   _unexp_int
289
290        .long   _unexp_int              | F0:
291        .long   _unexp_int
292        .long   _unexp_int
293        .long   _unexp_int
294        .long   _unexp_int
295        .long   _unexp_int
296        .long   _unexp_int
297        .long   _unexp_int
298        .long   _unexp_int
299        .long   _unexp_int
300        .long   _unexp_int
301        .long   _unexp_int
302        .long   _unexp_int
303        .long   _unexp_int
304        .long   _unexp_int
305        .long   _unexp_int
306
307        PUBLIC(start)
308SYM(start):
309        move.w  #0x2700,sr              | First turn off all interrupts!
310
311        move.l  #(BSP_MEM_ADDR_SRAM + MCF5206E_RAMBAR_V),d0
312        movec   d0,rambar0              | ...so we have a stack
313
314        move.l  #(INITIAL_STACK),sp     | Set up stack again (may be we are
315                                        | going here from monitor or with
316                                        | BDM interface assistance)
317
318        /*
319         * Remainder of the startup code is handled by C code
320         */
321        jmp     SYM(Init5206e)          | Start C code (which never returns)
322
323/***************************************************************************
324   Function : CopyDataClearBSSAndStart
325
326   Description : Copy DATA segment, clear BSS segment, initialize heap,
327   initialise real stack, start C program. Assume that DATA and BSS sizes
328   are multiples of 4.
329 ***************************************************************************/
330        PUBLIC (CopyDataClearBSSAndStart)
331SYM(CopyDataClearBSSAndStart):
332        lea     copy_start,a0           | Get start of DATA in RAM
333        lea     SYM(etext),a2           | Get start of DATA in ROM
334        cmpl    a0,a2                   | Are they the same?
335        beq.s   NOCOPY                  | Yes, no copy necessary
336        lea     copy_end,a1             | Get end of DATA in RAM
337        bra.s   COPYLOOPTEST            | Branch into copy loop
338COPYLOOP:
339        movel   a2@+,a0@+               | Copy word from ROM to RAM
340COPYLOOPTEST:
341        cmpl    a1,a0                   | Done?
342        bcs.s   COPYLOOP                | No, skip
343NOCOPY:
344
345        lea     clear_start,a0          | Get start of BSS
346        lea     clear_end,a1            | Get end of BSS
347        clrl    d0                      | Value to set
348        bra.s   ZEROLOOPTEST            | Branch into clear loop
349ZEROLOOP:
350        movel   d0,a0@+                 | Clear a word
351ZEROLOOPTEST:
352        cmpl    a1,a0                   | Done?
353        bcs.s   ZEROLOOP                | No, skip
354        move    4(a7),d0
355        move    d0,_M68k_Ramsize        | Set Ram Size
356
357        /*
358         * Right : Now we're ready to boot RTEMS
359         */
360        clrl    d0                      | Pass in null to all boot_card() params
361        movel   d0,a7@-                 | environp
362        movel   d0,a7@-                 | argv
363        movel   d0,a7@-                 | argc
364        jsr     SYM(boot_card)          | Call C boot_card function to startup RTEMS
365
366# Wait forever
367_stop:
368        nop
369        stop    #0x2700
370        jmp     _stop
371
372# The following labelled nops is a placeholders for breakpoints
373_unexp_exception:
374        nop
375        jmp     _stop
376
377_unexp_int:
378        nop
379        jmp     _stop
380
381_reserved_int:
382        nop
383        jmp     _stop
384
385_spurious_int:
386        nop
387        jmp     _stop
388
389_avec1_int:
390        nop
391        jmp     _unexp_int
392
393_avec2_int:
394        nop
395        jmp     _unexp_int
396
397_avec3_int:
398        nop
399        jmp     _unexp_int
400
401_avec4_int:
402        nop
403        jmp     _unexp_int
404
405_avec5_int:
406        nop
407        jmp     _unexp_int
408
409_avec6_int:
410        nop
411        jmp     _unexp_int
412
413_avec7_int:
414        nop
415        jmp     _unexp_int
416
417END_CODE
418
419END
Note: See TracBrowser for help on using the repository browser.