File indexing completed on 2025-05-11 08:23:45
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #include <rtems/asm.h>
0020
0021 BEGIN_CODE
0022
0023
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
0285
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
0294
0295 PUBLIC (_spuriousInterrupt)
0296 _spuriousInterrupt:
0297 addql #1,_M68kSpuriousInterruptCount
0298 rte
0299
0300
0301
0302
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
0313
0314 .globl start
0315 start:
0316
0317
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
0327
0328 lea Entry,a0 | Get base of vector table
0329 movec a0,vbr | Set up the VBR
0330
0331
0332
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
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
0356
0357 jmp _Init68360 | Start C code (which never returns)
0358
0359
0360
0361
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