Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:45

0001 /*
0002  *
0003  *  This file contains the entry point for the application.
0004  *  It jumps to the BSP which is responsible for performing
0005  *  all initialization.
0006  */
0007 
0008 /*
0009  * Copyright (c) 1996 Eric Norum <eric@norum.ca>
0010 
0011  * COPYRIGHT (c) 1989-1999.
0012  * On-Line Applications Research Corporation (OAR).
0013  *
0014  * The license and distribution terms for this file may in
0015  * the file LICENSE in this distribution or at
0016  * http://www.rtems.org/license/LICENSE.
0017  */
0018 
0019 #include <rtems/asm.h>
0020 
0021 BEGIN_CODE
0022     /*
0023      * Step 1: Decide on Reset Stack Pointer and Initial Program Counter
0024      */
0025 Entry:
0026     .long   m360+1024       |   0: Initial SSP
0027     .long   start           |   1: Initial PC
0028     .long   _uhoh           |   2: Bus error
0029     .long   _uhoh           |   3: Address error
0030     .long   _uhoh           |   4: Illegal instruction
0031     .long   _uhoh           |   5: Zero division
0032     .long   _uhoh           |   6: CHK, CHK2 instruction
0033     .long   _uhoh           |   7: TRAPcc, TRAPV instructions
0034     .long   _uhoh           |   8: Privilege violation
0035     .long   _uhoh           |   9: Trace
0036     .long   _uhoh           |  10: Line 1010 emulator
0037     .long   _uhoh           |  11: Line 1111 emulator
0038     .long   _uhoh           |  12: Hardware breakpoint
0039     .long   _uhoh           |  13: Reserved for coprocessor violation
0040     .long   _uhoh           |  14: Format error
0041     .long   _uhoh           |  15: Uninitialized interrupt
0042     .long   _uhoh           |  16: Unassigned, reserved
0043     .long   _uhoh           |  17:
0044     .long   _uhoh           |  18:
0045     .long   _uhoh           |  19:
0046     .long   _uhoh           |  20:
0047     .long   _uhoh           |  21:
0048     .long   _uhoh           |  22:
0049     .long   _uhoh           |  23:
0050     .long   _spuriousInterrupt  |  24: Spurious interrupt
0051     .long   _uhoh           |  25: Level 1 interrupt autovector
0052     .long   _uhoh           |  26: Level 2 interrupt autovector
0053     .long   _uhoh           |  27: Level 3 interrupt autovector
0054     .long   _uhoh           |  28: Level 4 interrupt autovector
0055     .long   _uhoh           |  29: Level 5 interrupt autovector
0056     .long   _uhoh           |  30: Level 6 interrupt autovector
0057     .long   _uhoh           |  31: Level 7 interrupt autovector
0058     .long   _uhoh           |  32: Trap instruction (0-15)
0059     .long   _uhoh           |  33:
0060     .long   _uhoh           |  34:
0061     .long   _uhoh           |  35:
0062     .long   _uhoh           |  36:
0063     .long   _uhoh           |  37:
0064     .long   _uhoh           |  38:
0065     .long   _uhoh           |  39:
0066     .long   _uhoh           |  40:
0067     .long   _uhoh           |  41:
0068     .long   _uhoh           |  42:
0069     .long   _uhoh           |  43:
0070     .long   _uhoh           |  44:
0071     .long   _uhoh           |  45:
0072     .long   _uhoh           |  46:
0073     .long   _uhoh           |  47:
0074     .long   _uhoh           |  48: Reserved for coprocessor
0075     .long   _uhoh           |  49:
0076     .long   _uhoh           |  50:
0077     .long   _uhoh           |  51:
0078     .long   _uhoh           |  52:
0079     .long   _uhoh           |  53:
0080     .long   _uhoh           |  54:
0081     .long   _uhoh           |  55:
0082     .long   _uhoh           |  56:
0083     .long   _uhoh           |  57:
0084     .long   _uhoh           |  58:
0085     .long   _uhoh           |  59: Unassigned, reserved
0086     .long   _uhoh           |  60:
0087     .long   _uhoh           |  61:
0088     .long   _uhoh           |  62:
0089     .long   _uhoh           |  63:
0090     .long   _uhoh           |  64: User defined vectors (192)
0091     .long   _uhoh           |  65:
0092     .long   _uhoh           |  66:
0093     .long   _uhoh           |  67:
0094     .long   _uhoh           |  68:
0095     .long   _uhoh           |  69:
0096     .long   _uhoh           |  70:
0097     .long   _uhoh           |  71:
0098     .long   _uhoh           |  72:
0099     .long   _uhoh           |  73:
0100     .long   _uhoh           |  74:
0101     .long   _uhoh           |  75:
0102     .long   _uhoh           |  76:
0103     .long   _uhoh           |  77:
0104     .long   _uhoh           |  78:
0105     .long   _uhoh           |  79:
0106     .long   _uhoh           |  80:
0107     .long   _uhoh           |  81:
0108     .long   _uhoh           |  82:
0109     .long   _uhoh           |  83:
0110     .long   _uhoh           |  84:
0111     .long   _uhoh           |  85:
0112     .long   _uhoh           |  86:
0113     .long   _uhoh           |  87:
0114     .long   _uhoh           |  88:
0115     .long   _uhoh           |  89:
0116     .long   _uhoh           |  90:
0117     .long   _uhoh           |  91:
0118     .long   _uhoh           |  92:
0119     .long   _uhoh           |  93:
0120     .long   _uhoh           |  94:
0121     .long   _uhoh           |  95:
0122     .long   _uhoh           |  96:
0123     .long   _uhoh           |  97:
0124     .long   _uhoh           |  98:
0125     .long   _uhoh           |  99:
0126     .long   _uhoh           | 100:
0127     .long   _uhoh           | 101:
0128     .long   _uhoh           | 102:
0129     .long   _uhoh           | 103:
0130     .long   _uhoh           | 104:
0131     .long   _uhoh           | 105:
0132     .long   _uhoh           | 106:
0133     .long   _uhoh           | 107:
0134     .long   _uhoh           | 108:
0135     .long   _uhoh           | 109:
0136     .long   _uhoh           | 110:
0137     .long   _uhoh           | 111:
0138     .long   _uhoh           | 112:
0139     .long   _uhoh           | 113:
0140     .long   _uhoh           | 114:
0141     .long   _uhoh           | 115:
0142     .long   _uhoh           | 116:
0143     .long   _uhoh           | 117:
0144     .long   _uhoh           | 118:
0145     .long   _uhoh           | 119:
0146     .long   _uhoh           | 120:
0147     .long   _uhoh           | 121:
0148     .long   _uhoh           | 122:
0149     .long   _uhoh           | 123:
0150     .long   _uhoh           | 124:
0151     .long   _uhoh           | 125:
0152     .long   _uhoh           | 126:
0153     .long   _uhoh           | 127:
0154     .long   _uhoh           | 128:
0155     .long   _uhoh           | 129:
0156     .long   _uhoh           | 130:
0157     .long   _uhoh           | 131:
0158     .long   _uhoh           | 132:
0159     .long   _uhoh           | 133:
0160     .long   _uhoh           | 134:
0161     .long   _uhoh           | 135:
0162     .long   _uhoh           | 136:
0163     .long   _uhoh           | 137:
0164     .long   _uhoh           | 138:
0165     .long   _uhoh           | 139:
0166     .long   _uhoh           | 140:
0167     .long   _uhoh           | 141:
0168     .long   _uhoh           | 142:
0169     .long   _uhoh           | 143:
0170     .long   _uhoh           | 144:
0171     .long   _uhoh           | 145:
0172     .long   _uhoh           | 146:
0173     .long   _uhoh           | 147:
0174     .long   _uhoh           | 148:
0175     .long   _uhoh           | 149:
0176     .long   _uhoh           | 150:
0177     .long   _uhoh           | 151:
0178     .long   _uhoh           | 152:
0179     .long   _uhoh           | 153:
0180     .long   _uhoh           | 154:
0181     .long   _uhoh           | 155:
0182     .long   _uhoh           | 156:
0183     .long   _uhoh           | 157:
0184     .long   _uhoh           | 158:
0185     .long   _uhoh           | 159:
0186     .long   _uhoh           | 160:
0187     .long   _uhoh           | 161:
0188     .long   _uhoh           | 162:
0189     .long   _uhoh           | 163:
0190     .long   _uhoh           | 164:
0191     .long   _uhoh           | 165:
0192     .long   _uhoh           | 166:
0193     .long   _uhoh           | 167:
0194     .long   _uhoh           | 168:
0195     .long   _uhoh           | 169:
0196     .long   _uhoh           | 170:
0197     .long   _uhoh           | 171:
0198     .long   _uhoh           | 172:
0199     .long   _uhoh           | 173:
0200     .long   _uhoh           | 174:
0201     .long   _uhoh           | 175:
0202     .long   _uhoh           | 176:
0203     .long   _uhoh           | 177:
0204     .long   _uhoh           | 178:
0205     .long   _uhoh           | 179:
0206     .long   _uhoh           | 180:
0207     .long   _uhoh           | 181:
0208     .long   _uhoh           | 182:
0209     .long   _uhoh           | 183:
0210     .long   _uhoh           | 184:
0211     .long   _uhoh           | 185:
0212     .long   _uhoh           | 186:
0213     .long   _uhoh           | 187:
0214     .long   _uhoh           | 188:
0215     .long   _uhoh           | 189:
0216     .long   _uhoh           | 190:
0217     .long   _uhoh           | 191:
0218     .long   _uhoh           | 192:
0219     .long   _uhoh           | 193:
0220     .long   _uhoh           | 194:
0221     .long   _uhoh           | 195:
0222     .long   _uhoh           | 196:
0223     .long   _uhoh           | 197:
0224     .long   _uhoh           | 198:
0225     .long   _uhoh           | 199:
0226     .long   _uhoh           | 200:
0227     .long   _uhoh           | 201:
0228     .long   _uhoh           | 202:
0229     .long   _uhoh           | 203:
0230     .long   _uhoh           | 204:
0231     .long   _uhoh           | 205:
0232     .long   _uhoh           | 206:
0233     .long   _uhoh           | 207:
0234     .long   _uhoh           | 208:
0235     .long   _uhoh           | 209:
0236     .long   _uhoh           | 210:
0237     .long   _uhoh           | 211:
0238     .long   _uhoh           | 212:
0239     .long   _uhoh           | 213:
0240     .long   _uhoh           | 214:
0241     .long   _uhoh           | 215:
0242     .long   _uhoh           | 216:
0243     .long   _uhoh           | 217:
0244     .long   _uhoh           | 218:
0245     .long   _uhoh           | 219:
0246     .long   _uhoh           | 220:
0247     .long   _uhoh           | 221:
0248     .long   _uhoh           | 222:
0249     .long   _uhoh           | 223:
0250     .long   _uhoh           | 224:
0251     .long   _uhoh           | 225:
0252     .long   _uhoh           | 226:
0253     .long   _uhoh           | 227:
0254     .long   _uhoh           | 228:
0255     .long   _uhoh           | 229:
0256     .long   _uhoh           | 230:
0257     .long   _uhoh           | 231:
0258     .long   _uhoh           | 232:
0259     .long   _uhoh           | 233:
0260     .long   _uhoh           | 234:
0261     .long   _uhoh           | 235:
0262     .long   _uhoh           | 236:
0263     .long   _uhoh           | 237:
0264     .long   _uhoh           | 238:
0265     .long   _uhoh           | 239:
0266     .long   _uhoh           | 240:
0267     .long   _uhoh           | 241:
0268     .long   _uhoh           | 242:
0269     .long   _uhoh           | 243:
0270     .long   _uhoh           | 244:
0271     .long   _uhoh           | 245:
0272     .long   _uhoh           | 246:
0273     .long   _uhoh           | 247:
0274     .long   _uhoh           | 248:
0275     .long   _uhoh           | 249:
0276     .long   _uhoh           | 250:
0277     .long   _uhoh           | 251:
0278     .long   _uhoh           | 252:
0279     .long   _uhoh           | 253:
0280     .long   _uhoh           | 254:
0281     .long   _uhoh           | 255:
0282 
0283 /*
0284  * Default trap handler
0285  * With an oscilloscope you can see AS* stop
0286  */
0287     PUBLIC (_uhoh)
0288 _uhoh:  nop             | Leave spot for breakpoint
0289     stop    #0x2700         | Stop with interrupts disabled
0290     bra.l   _uhoh           | Stuck forever
0291 
0292 /*
0293  * Log, but otherwise ignore, spurious interrupts
0294  */
0295     PUBLIC (_spuriousInterrupt)
0296 _spuriousInterrupt:
0297     addql   #1,_M68kSpuriousInterruptCount
0298     rte
0299 
0300 /*
0301  * Place the low-order 3 octets of the board's ethernet address at
0302  * a `well-known' fixed location relative to the startup location.
0303  */
0304     .align 2
0305     .word   0           | Padding
0306 ethernet_address_buffer:
0307     .word   0x08F3          | Default address
0308     .word   0xDEAD
0309     .word   0xCAFE
0310 
0311 /*
0312  * Initial PC
0313  */
0314 .globl start
0315 start:
0316     /*
0317      * Step 2: Stay in Supervisor Mode
0318      */
0319 #if ( M68K_HAS_SEPARATE_STACKS == 1 )
0320     oriw    #0x3000,sr      | Switch to Master Stack Pointer
0321     lea SYM(m360)+1024-64,a7    | Put stack in dual-port ram
0322                     | a little below the interrupt stack
0323 #endif
0324 
0325     /*
0326      * Step 3: Write the VBR
0327      */
0328     lea Entry,a0        | Get base of vector table
0329     movec   a0,vbr          | Set up the VBR
0330 
0331     /*
0332      * Step 4: Write the MBAR
0333      */
0334     movec   dfc,d1          | Save destination register
0335     moveq   #7,d0           | CPU-space funcction code
0336     movec   d0,dfc          | Set destination function code register
0337     movel   #m360+0x101,d0      | MBAR value (mask CPU space accesses)
0338     movesl  d0,0x3FF00      | Set MBAR
0339     movec   d1,dfc          | Restore destination register
0340 
0341     /*
0342      * Step 5: Verify a dual-port RAM location
0343      */
0344     lea m360,a0         | Point a0 to first DPRAM location
0345     moveb   #0x33,d0        | Set the test value
0346     moveb   d0,a0@          | Set the memory location
0347     cmpb    a0@,d0          | Does it read back?
0348     bne _uhoh           | If not, bad news!
0349     notb    d0          | Flip bits
0350     moveb   d0,a0@          | Set the memory location
0351     cmpb    a0@,d0          | Does it read back?
0352     bne _uhoh           | If not, bad news!
0353 
0354     /*
0355      * Remaining steps are handled by C code
0356      */
0357     jmp _Init68360      | Start C code (which never returns)
0358 
0359 /*
0360  * Copy DATA segment, clear BSS segment, set up real stack, start C program.
0361  * Assume that DATA and BSS sizes are multiples of 4.
0362  */
0363     PUBLIC (_CopyDataClearBSSAndStart)
0364 _CopyDataClearBSSAndStart:
0365     lea _copy_start,a0      | Get start of DATA in RAM
0366     lea etext,a2        | Get start of DATA in ROM
0367     cmpl    a0,a2           | Are they the same?
0368     beq.s   NOCOPY          | Yes, no copy necessary
0369     lea _copy_end,a1        | Get end of DATA in RAM
0370     bra.s   COPYLOOPTEST        | Branch into copy loop
0371 COPYLOOP:
0372     movel   a2@+,a0@+       | Copy word from ROM to RAM
0373 COPYLOOPTEST:
0374     cmpl    a1,a0           | Done?
0375     bcs.s   COPYLOOP        | No, skip
0376 NOCOPY:
0377 
0378     lea _clear_start,a0     | Get start of BSS
0379     lea _clear_end,a1       | Get end of BSS
0380     clrl    d0          | Value to set
0381     bra.s   ZEROLOOPTEST        | Branch into clear loop
0382 ZEROLOOP:
0383     movel   d0,a0@+         | Clear a word
0384 ZEROLOOPTEST:
0385     cmpl    a1,a0           | Done?
0386     bcs.s   ZEROLOOP        | No, skip
0387 
0388     movel   #_ISR_Stack_area_end,a7 | set master stack pointer
0389     movel   d0,a7@-         | command line
0390     jsr boot_card       | Call C main
0391 
0392     PUBLIC (_mainDone)
0393 _mainDone:
0394     nop             | Leave spot for breakpoint
0395     movew   #1,a7           | Force a double bus error
0396     movel   d0,a7@-         | This should cause a RESET
0397     stop    #0x2700         | Stop with interrupts disabled
0398     bra.l   _mainDone       | Stuck forever
0399 
0400         .align 2
0401 END_CODE
0402 
0403 BEGIN_DATA_DCL
0404         .align 2
0405     PUBLIC (environ)
0406 environ:
0407     .long   0
0408     PUBLIC (_M68kSpuriousInterruptCount)
0409 _M68kSpuriousInterruptCount:
0410     .long   0
0411 END_DATA_DCL
0412 
0413 END