source: rtems/c/src/lib/libbsp/m68k/gen68360/start/start.S @ 69537ca9

4.104.114.84.95
Last change on this file since 69537ca9 was 69537ca9, checked in by Joel Sherrill <joel.sherrill@…>, on 01/12/00 at 16:38:56

Patch rtems-rc-20000104-16.diff from Ralf Corsepius <corsepiu@…>
that converts the libbsp/i386 subdirectory to full automake.

  • Property mode set to 100644
File size: 11.4 KB
Line 
1/*
2 *
3 *  This file contains the entry point for the application.
4 *  The name of this entry point is compiler dependent.
5 *  It jumps to the BSP which is responsible for performing
6 *  all initialization.
7 *
8 *  COPYRIGHT (c) 1989-1999.
9 *  On-Line Applications Research Corporation (OAR).
10 *
11 *  The license and distribution terms for this file may in
12 *  the file LICENSE in this distribution or at
13 *  http://www.OARcorp.com/rtems/license.html.
14 *
15 * Based on the `gen68302' board support package, and covered by the
16 * original distribution terms.
17 *
18 * W. Eric Norum
19 * Saskatchewan Accelerator Laboratory
20 * University of Saskatchewan
21 * Saskatoon, Saskatchewan, CANADA
22 * eric@skatter.usask.ca
23 *
24 *  $Id$
25 */
26
27#include "asm.h"
28
29BEGIN_CODE
30        /*
31         * Step 1: Decide on Reset Stack Pointer and Initial Program Counter
32         */
33Entry:
34        .long   SYM(m360)+1024          |   0: Initial SSP
35        .long   start                   |   1: Initial PC
36        .long   SYM(_uhoh)              |   2: Bus error
37        .long   SYM(_uhoh)              |   3: Address error
38        .long   SYM(_uhoh)              |   4: Illegal instruction
39        .long   SYM(_uhoh)              |   5: Zero division
40        .long   SYM(_uhoh)              |   6: CHK, CHK2 instruction
41        .long   SYM(_uhoh)              |   7: TRAPcc, TRAPV instructions
42        .long   SYM(_uhoh)              |   8: Privilege violation
43        .long   SYM(_uhoh)              |   9: Trace
44        .long   SYM(_uhoh)              |  10: Line 1010 emulator
45        .long   SYM(_uhoh)              |  11: Line 1111 emulator
46        .long   SYM(_uhoh)              |  12: Hardware breakpoint
47        .long   SYM(_uhoh)              |  13: Reserved for coprocessor violation
48        .long   SYM(_uhoh)              |  14: Format error
49        .long   SYM(_uhoh)              |  15: Uninitialized interrupt
50        .long   SYM(_uhoh)              |  16: Unassigned, reserved
51        .long   SYM(_uhoh)              |  17:
52        .long   SYM(_uhoh)              |  18:
53        .long   SYM(_uhoh)              |  19:
54        .long   SYM(_uhoh)              |  20:
55        .long   SYM(_uhoh)              |  21:
56        .long   SYM(_uhoh)              |  22:
57        .long   SYM(_uhoh)              |  23:
58        .long   SYM(_spuriousInterrupt) |  24: Spurious interrupt
59        .long   SYM(_uhoh)              |  25: Level 1 interrupt autovector
60        .long   SYM(_uhoh)              |  26: Level 2 interrupt autovector
61        .long   SYM(_uhoh)              |  27: Level 3 interrupt autovector
62        .long   SYM(_uhoh)              |  28: Level 4 interrupt autovector
63        .long   SYM(_uhoh)              |  29: Level 5 interrupt autovector
64        .long   SYM(_uhoh)              |  30: Level 6 interrupt autovector
65        .long   SYM(_uhoh)              |  31: Level 7 interrupt autovector
66        .long   SYM(_uhoh)              |  32: Trap instruction (0-15)
67        .long   SYM(_uhoh)              |  33:
68        .long   SYM(_uhoh)              |  34:
69        .long   SYM(_uhoh)              |  35:
70        .long   SYM(_uhoh)              |  36:
71        .long   SYM(_uhoh)              |  37:
72        .long   SYM(_uhoh)              |  38:
73        .long   SYM(_uhoh)              |  39:
74        .long   SYM(_uhoh)              |  40:
75        .long   SYM(_uhoh)              |  41:
76        .long   SYM(_uhoh)              |  42:
77        .long   SYM(_uhoh)              |  43:
78        .long   SYM(_uhoh)              |  44:
79        .long   SYM(_uhoh)              |  45:
80        .long   SYM(_uhoh)              |  46:
81        .long   SYM(_uhoh)              |  47:
82        .long   SYM(_uhoh)              |  48: Reserved for coprocessor
83        .long   SYM(_uhoh)              |  49:
84        .long   SYM(_uhoh)              |  50:
85        .long   SYM(_uhoh)              |  51:
86        .long   SYM(_uhoh)              |  52:
87        .long   SYM(_uhoh)              |  53:
88        .long   SYM(_uhoh)              |  54:
89        .long   SYM(_uhoh)              |  55:
90        .long   SYM(_uhoh)              |  56:
91        .long   SYM(_uhoh)              |  57:
92        .long   SYM(_uhoh)              |  58:
93        .long   SYM(_uhoh)              |  59: Unassigned, reserved
94        .long   SYM(_uhoh)              |  60:
95        .long   SYM(_uhoh)              |  61:
96        .long   SYM(_uhoh)              |  62:
97        .long   SYM(_uhoh)              |  63:
98        .long   SYM(_uhoh)              |  64: User defined vectors (192)
99        .long   SYM(_uhoh)              |  65:
100        .long   SYM(_uhoh)              |  66:
101        .long   SYM(_uhoh)              |  67:
102        .long   SYM(_uhoh)              |  68:
103        .long   SYM(_uhoh)              |  69:
104        .long   SYM(_uhoh)              |  70:
105        .long   SYM(_uhoh)              |  71:
106        .long   SYM(_uhoh)              |  72:
107        .long   SYM(_uhoh)              |  73:
108        .long   SYM(_uhoh)              |  74:
109        .long   SYM(_uhoh)              |  75:
110        .long   SYM(_uhoh)              |  76:
111        .long   SYM(_uhoh)              |  77:
112        .long   SYM(_uhoh)              |  78:
113        .long   SYM(_uhoh)              |  79:
114        .long   SYM(_uhoh)              |  80:
115        .long   SYM(_uhoh)              |  81:
116        .long   SYM(_uhoh)              |  82:
117        .long   SYM(_uhoh)              |  83:
118        .long   SYM(_uhoh)              |  84:
119        .long   SYM(_uhoh)              |  85:
120        .long   SYM(_uhoh)              |  86:
121        .long   SYM(_uhoh)              |  87:
122        .long   SYM(_uhoh)              |  88:
123        .long   SYM(_uhoh)              |  89:
124        .long   SYM(_uhoh)              |  90:
125        .long   SYM(_uhoh)              |  91:
126        .long   SYM(_uhoh)              |  92:
127        .long   SYM(_uhoh)              |  93:
128        .long   SYM(_uhoh)              |  94:
129        .long   SYM(_uhoh)              |  95:
130        .long   SYM(_uhoh)              |  96:
131        .long   SYM(_uhoh)              |  97:
132        .long   SYM(_uhoh)              |  98:
133        .long   SYM(_uhoh)              |  99:
134        .long   SYM(_uhoh)              | 100:
135        .long   SYM(_uhoh)              | 101:
136        .long   SYM(_uhoh)              | 102:
137        .long   SYM(_uhoh)              | 103:
138        .long   SYM(_uhoh)              | 104:
139        .long   SYM(_uhoh)              | 105:
140        .long   SYM(_uhoh)              | 106:
141        .long   SYM(_uhoh)              | 107:
142        .long   SYM(_uhoh)              | 108:
143        .long   SYM(_uhoh)              | 109:
144        .long   SYM(_uhoh)              | 110:
145        .long   SYM(_uhoh)              | 111:
146        .long   SYM(_uhoh)              | 112:
147        .long   SYM(_uhoh)              | 113:
148        .long   SYM(_uhoh)              | 114:
149        .long   SYM(_uhoh)              | 115:
150        .long   SYM(_uhoh)              | 116:
151        .long   SYM(_uhoh)              | 117:
152        .long   SYM(_uhoh)              | 118:
153        .long   SYM(_uhoh)              | 119:
154        .long   SYM(_uhoh)              | 120:
155        .long   SYM(_uhoh)              | 121:
156        .long   SYM(_uhoh)              | 122:
157        .long   SYM(_uhoh)              | 123:
158        .long   SYM(_uhoh)              | 124:
159        .long   SYM(_uhoh)              | 125:
160        .long   SYM(_uhoh)              | 126:
161        .long   SYM(_uhoh)              | 127:
162        .long   SYM(_uhoh)              | 128:
163        .long   SYM(_uhoh)              | 129:
164        .long   SYM(_uhoh)              | 130:
165        .long   SYM(_uhoh)              | 131:
166        .long   SYM(_uhoh)              | 132:
167        .long   SYM(_uhoh)              | 133:
168        .long   SYM(_uhoh)              | 134:
169        .long   SYM(_uhoh)              | 135:
170        .long   SYM(_uhoh)              | 136:
171        .long   SYM(_uhoh)              | 137:
172        .long   SYM(_uhoh)              | 138:
173        .long   SYM(_uhoh)              | 139:
174        .long   SYM(_uhoh)              | 140:
175        .long   SYM(_uhoh)              | 141:
176        .long   SYM(_uhoh)              | 142:
177        .long   SYM(_uhoh)              | 143:
178        .long   SYM(_uhoh)              | 144:
179        .long   SYM(_uhoh)              | 145:
180        .long   SYM(_uhoh)              | 146:
181        .long   SYM(_uhoh)              | 147:
182        .long   SYM(_uhoh)              | 148:
183        .long   SYM(_uhoh)              | 149:
184        .long   SYM(_uhoh)              | 150:
185        .long   SYM(_uhoh)              | 151:
186        .long   SYM(_uhoh)              | 152:
187        .long   SYM(_uhoh)              | 153:
188        .long   SYM(_uhoh)              | 154:
189        .long   SYM(_uhoh)              | 155:
190        .long   SYM(_uhoh)              | 156:
191        .long   SYM(_uhoh)              | 157:
192        .long   SYM(_uhoh)              | 158:
193        .long   SYM(_uhoh)              | 159:
194        .long   SYM(_uhoh)              | 160:
195        .long   SYM(_uhoh)              | 161:
196        .long   SYM(_uhoh)              | 162:
197        .long   SYM(_uhoh)              | 163:
198        .long   SYM(_uhoh)              | 164:
199        .long   SYM(_uhoh)              | 165:
200        .long   SYM(_uhoh)              | 166:
201        .long   SYM(_uhoh)              | 167:
202        .long   SYM(_uhoh)              | 168:
203        .long   SYM(_uhoh)              | 169:
204        .long   SYM(_uhoh)              | 170:
205        .long   SYM(_uhoh)              | 171:
206        .long   SYM(_uhoh)              | 172:
207        .long   SYM(_uhoh)              | 173:
208        .long   SYM(_uhoh)              | 174:
209        .long   SYM(_uhoh)              | 175:
210        .long   SYM(_uhoh)              | 176:
211        .long   SYM(_uhoh)              | 177:
212        .long   SYM(_uhoh)              | 178:
213        .long   SYM(_uhoh)              | 179:
214        .long   SYM(_uhoh)              | 180:
215        .long   SYM(_uhoh)              | 181:
216        .long   SYM(_uhoh)              | 182:
217        .long   SYM(_uhoh)              | 183:
218        .long   SYM(_uhoh)              | 184:
219        .long   SYM(_uhoh)              | 185:
220        .long   SYM(_uhoh)              | 186:
221        .long   SYM(_uhoh)              | 187:
222        .long   SYM(_uhoh)              | 188:
223        .long   SYM(_uhoh)              | 189:
224        .long   SYM(_uhoh)              | 190:
225        .long   SYM(_uhoh)              | 191:
226        .long   SYM(_uhoh)              | 192:
227        .long   SYM(_uhoh)              | 193:
228        .long   SYM(_uhoh)              | 194:
229        .long   SYM(_uhoh)              | 195:
230        .long   SYM(_uhoh)              | 196:
231        .long   SYM(_uhoh)              | 197:
232        .long   SYM(_uhoh)              | 198:
233        .long   SYM(_uhoh)              | 199:
234        .long   SYM(_uhoh)              | 200:
235        .long   SYM(_uhoh)              | 201:
236        .long   SYM(_uhoh)              | 202:
237        .long   SYM(_uhoh)              | 203:
238        .long   SYM(_uhoh)              | 204:
239        .long   SYM(_uhoh)              | 205:
240        .long   SYM(_uhoh)              | 206:
241        .long   SYM(_uhoh)              | 207:
242        .long   SYM(_uhoh)              | 208:
243        .long   SYM(_uhoh)              | 209:
244        .long   SYM(_uhoh)              | 210:
245        .long   SYM(_uhoh)              | 211:
246        .long   SYM(_uhoh)              | 212:
247        .long   SYM(_uhoh)              | 213:
248        .long   SYM(_uhoh)              | 214:
249        .long   SYM(_uhoh)              | 215:
250        .long   SYM(_uhoh)              | 216:
251        .long   SYM(_uhoh)              | 217:
252        .long   SYM(_uhoh)              | 218:
253        .long   SYM(_uhoh)              | 219:
254        .long   SYM(_uhoh)              | 220:
255        .long   SYM(_uhoh)              | 221:
256        .long   SYM(_uhoh)              | 222:
257        .long   SYM(_uhoh)              | 223:
258        .long   SYM(_uhoh)              | 224:
259        .long   SYM(_uhoh)              | 225:
260        .long   SYM(_uhoh)              | 226:
261        .long   SYM(_uhoh)              | 227:
262        .long   SYM(_uhoh)              | 228:
263        .long   SYM(_uhoh)              | 229:
264        .long   SYM(_uhoh)              | 230:
265        .long   SYM(_uhoh)              | 231:
266        .long   SYM(_uhoh)              | 232:
267        .long   SYM(_uhoh)              | 233:
268        .long   SYM(_uhoh)              | 234:
269        .long   SYM(_uhoh)              | 235:
270        .long   SYM(_uhoh)              | 236:
271        .long   SYM(_uhoh)              | 237:
272        .long   SYM(_uhoh)              | 238:
273        .long   SYM(_uhoh)              | 239:
274        .long   SYM(_uhoh)              | 240:
275        .long   SYM(_uhoh)              | 241:
276        .long   SYM(_uhoh)              | 242:
277        .long   SYM(_uhoh)              | 243:
278        .long   SYM(_uhoh)              | 244:
279        .long   SYM(_uhoh)              | 245:
280        .long   SYM(_uhoh)              | 246:
281        .long   SYM(_uhoh)              | 247:
282        .long   SYM(_uhoh)              | 248:
283        .long   SYM(_uhoh)              | 249:
284        .long   SYM(_uhoh)              | 250:
285        .long   SYM(_uhoh)              | 251:
286        .long   SYM(_uhoh)              | 252:
287        .long   SYM(_uhoh)              | 253:
288        .long   SYM(_uhoh)              | 254:
289        .long   SYM(_uhoh)              | 255:
290
291/*
292 * Default trap handler
293 * With an oscilloscope you can see AS* stop
294 */
295        PUBLIC (_uhoh)
296SYM(_uhoh):     nop                             | Leave spot for breakpoint
297        stop    #0x2700                 | Stop with interrupts disabled
298        bra.l   SYM(_uhoh)                      | Stuck forever
299
300/*
301 * Log, but otherwise ignore, spurious interrupts
302 */
303        PUBLIC (_spuriousInterrupt)
304SYM(_spuriousInterrupt):
305        addql   #1,SYM(_M68kSpuriousInterruptCount)
306        rte
307
308/*
309 * Place the low-order 3 octets of the board's ethernet address at
310 * a `well-known' fixed location relative to the startup location.
311 */
312        .align 2
313        .word   0                       | Padding
314ethernet_address_buffer:
315        .word   0x08F3                  | Default address
316        .word   0xDEAD
317        .word   0xCAFE
318
319/*
320 * Initial PC
321 */
322.globl start
323start:
324        /*
325         * Step 2: Stay in Supervisor Mode
326         */
327#if ( M68K_HAS_SEPARATE_STACKS == 1 )
328        oriw    #0x3000,sr              | Switch to Master Stack Pointer
329        lea     SYM(m360)+1024-64,a7    | Put stack in dual-port ram
330                                        | a little below the interrupt stack
331#endif
332
333        /*
334         * Step 3: Write the VBR
335         */
336        lea     Entry,a0                | Get base of vector table
337        movec   a0,vbr                  | Set up the VBR
338
339        /*
340         * Step 4: Write the MBAR
341         */
342        movec   dfc,d1                  | Save destination register
343        moveq   #7,d0                   | CPU-space funcction code
344        movec   d0,dfc                  | Set destination function code register
345        movel   #SYM(m360)+0x101,d0     | MBAR value (mask CPU space accesses)
346        movesl  d0,0x3FF00              | Set MBAR
347        movec   d1,dfc                  | Restore destination register
348
349        /*
350         * Step 5: Verify a dual-port RAM location
351         */
352        lea     SYM(m360),a0            | Point a0 to first DPRAM location
353        moveb   #0x33,d0                | Set the test value
354        moveb   d0,a0@                  | Set the memory location
355        cmpb    a0@,d0                  | Does it read back?
356        bne     SYM(_uhoh)                      | If not, bad news!
357        notb    d0                      | Flip bits
358        moveb   d0,a0@                  | Set the memory location
359        cmpb    a0@,d0                  | Does it read back?
360        bne     SYM(_uhoh)                      | If not, bad news!
361
362        /*
363         * Remaining steps are handled by C code
364         */
365        jmp     SYM(_Init68360)         | Start C code (which never returns)
366
367/*
368 * Copy DATA segment, clear BSS segment, set up real stack,
369 * initialize heap, start C program.
370 * Assume that DATA and BSS sizes are multiples of 4.
371 */
372        PUBLIC (_CopyDataClearBSSAndStart)
373SYM(_CopyDataClearBSSAndStart):
374        lea     copy_start,a0           | Get start of DATA in RAM
375        lea     SYM(etext),a2           | Get start of DATA in ROM
376        cmpl    a0,a2                   | Are they the same?
377        beq.s   NOCOPY                  | Yes, no copy necessary
378        lea     copy_end,a1             | Get end of DATA in RAM
379        bra.s   COPYLOOPTEST            | Branch into copy loop
380COPYLOOP:
381        movel   a2@+,a0@+               | Copy word from ROM to RAM
382COPYLOOPTEST:
383        cmpl    a1,a0                   | Done?
384        bcs.s   COPYLOOP                | No, skip
385NOCOPY:
386
387        lea     clear_start,a0          | Get start of BSS
388        lea     clear_end,a1            | Get end of BSS
389        clrl    d0                      | Value to set
390        bra.s   ZEROLOOPTEST            | Branch into clear loop
391ZEROLOOP:
392        movel   d0,a0@+                 | Clear a word
393ZEROLOOPTEST:
394        cmpl    a1,a0                   | Done?
395        bcs.s   ZEROLOOP                | No, skip
396
397        movel   #_stack_init,a7         | set master stack pointer
398        pea     env                     | envp
399        pea     arg                     | argv
400        movel   d0,a7@-                 | argc
401        jsr     SYM(boot_card)          | Call C main
402
403        PUBLIC (_mainDone)
404SYM(_mainDone):
405        nop                             | Leave spot for breakpoint
406        movew   #1,a7                   | Force a double bus error
407        movel   d0,a7@-                 | This should cause a RESET
408        stop    #0x2700                 | Stop with interrupts disabled
409        bra.l   SYM(_mainDone)          | Stuck forever
410
411        .align 2
412        PUBLIC (_HeapSize)
413SYM (_HeapSize):
414        .long  HeapSize
415        PUBLIC (_StackSize)
416SYM (_StackSize):
417        .long  StackSize
418END_CODE
419
420BEGIN_DATA_DCL
421        .align 2
422        PUBLIC (environ)
423SYM (environ):
424        .long   env
425        PUBLIC (_M68kSpuriousInterruptCount)
426SYM (_M68kSpuriousInterruptCount):
427        .long   0
428END_DATA_DCL
429
430BEGIN_BSS
431env:    .long   0
432arg:    .long   0
433END_BSS
434
435END
436
Note: See TracBrowser for help on using the repository browser.