📄 start.s
字号:
/* * This file contains the entry point for the application. * The name of this entry point is compiler dependent. * It jumps to the BSP which is responsible for performing * all initialization. * * COPYRIGHT (c) 1989-1999. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may in * the file LICENSE in this distribution or at * http://www.rtems.com/license/LICENSE. * * Based on the `gen68360' board support package, and covered by the * original distribution terms. * * Geoffroy Montel * France Telecom - CNET/DSM/TAM/CAT * 4, rue du Clos Courtel * 35512 CESSON-SEVIGNE * FRANCE * * e-mail: g_montel@yahoo.com * * $Id: start.S,v 1.6.8.1 2003/09/04 18:44:25 joel Exp $ */#include "asm.h"#include <m68349.inc>#define _OLD_ASTECC 1 /* old addresses for AST68340 only, undefine for AST68349 */BEGIN_CODE /* * Step 1: Decide on Reset Stack Pointer and Initial Program Counter */Entry: .long SYM(m340)+1024 | 0: Initial SSP .long start | 1: Initial PC .long SYM(_uhoh) | 2: Bus error .long SYM(_uhoh) | 3: Address error .long SYM(_uhoh) | 4: Illegal instruction .long SYM(_uhoh) | 5: Zero division .long SYM(_uhoh) | 6: CHK, CHK2 instruction .long SYM(_uhoh) | 7: TRAPcc, TRAPV instructions .long SYM(_uhoh) | 8: Privilege violation .long SYM(_uhoh) | 9: Trace .long SYM(_uhoh) | 10: Line 1010 emulator .long SYM(_uhoh) | 11: Line 1111 emulator .long SYM(_uhoh) | 12: Hardware breakpoint .long SYM(_uhoh) | 13: Reserved for coprocessor violation .long SYM(_uhoh) | 14: Format error .long SYM(_uhoh) | 15: Uninitialized interrupt .long SYM(_uhoh) | 16: Unassigned, reserved .long SYM(_uhoh) | 17: .long SYM(_uhoh) | 18: .long SYM(_uhoh) | 19: .long SYM(_uhoh) | 20: .long SYM(_uhoh) | 21: .long SYM(_uhoh) | 22: .long SYM(_uhoh) | 23: .long SYM(_spuriousInterrupt) | 24: Spurious interrupt .long SYM(_uhoh) | 25: Level 1 interrupt autovector .long SYM(_uhoh) | 26: Level 2 interrupt autovector .long SYM(_uhoh) | 27: Level 3 interrupt autovector .long SYM(_uhoh) | 28: Level 4 interrupt autovector .long SYM(_uhoh) | 29: Level 5 interrupt autovector .long SYM(_uhoh) | 30: Level 6 interrupt autovector .long SYM(_uhoh) | 31: Level 7 interrupt autovector .long SYM(_uhoh) | 32: Trap instruction (0-15) .long SYM(_uhoh) | 33: .long SYM(_uhoh) | 34: .long SYM(_uhoh) | 35: .long SYM(_uhoh) | 36: .long SYM(_uhoh) | 37: .long SYM(_uhoh) | 38: .long SYM(_uhoh) | 39: .long SYM(_uhoh) | 40: .long SYM(_uhoh) | 41: .long SYM(_uhoh) | 42: .long SYM(_uhoh) | 43: .long SYM(_uhoh) | 44: .long SYM(_uhoh) | 45: .long SYM(_uhoh) | 46: .long SYM(_uhoh) | 47: .long SYM(_uhoh) | 48: Reserved for coprocessor .long SYM(_uhoh) | 49: .long SYM(_uhoh) | 50: .long SYM(_uhoh) | 51: .long SYM(_uhoh) | 52: .long SYM(_uhoh) | 53: .long SYM(_uhoh) | 54: .long SYM(_uhoh) | 55: .long SYM(_uhoh) | 56: .long SYM(_uhoh) | 57: .long SYM(_uhoh) | 58: .long SYM(_uhoh) | 59: Unassigned, reserved .long SYM(_uhoh) | 60: .long SYM(_uhoh) | 61: .long SYM(_uhoh) | 62: .long SYM(_uhoh) | 63: .long SYM(_uhoh) | 64: User defined vectors (192) .long SYM(_uhoh) | 65: .long SYM(_uhoh) | 66: .long SYM(_uhoh) | 67: .long SYM(_uhoh) | 68: .long SYM(_uhoh) | 69: .long SYM(_uhoh) | 70: .long SYM(_uhoh) | 71: .long SYM(_uhoh) | 72: .long SYM(_uhoh) | 73: .long SYM(_uhoh) | 74: .long SYM(_uhoh) | 75: .long SYM(_uhoh) | 76: .long SYM(_uhoh) | 77: .long SYM(_uhoh) | 78: .long SYM(_uhoh) | 79: .long SYM(_uhoh) | 80: .long SYM(_uhoh) | 81: .long SYM(_uhoh) | 82: .long SYM(_uhoh) | 83: .long SYM(_uhoh) | 84: .long SYM(_uhoh) | 85: .long SYM(_uhoh) | 86: .long SYM(_uhoh) | 87: .long SYM(_uhoh) | 88: .long SYM(_uhoh) | 89: .long SYM(_uhoh) | 90: .long SYM(_uhoh) | 91: .long SYM(_uhoh) | 92: .long SYM(_uhoh) | 93: .long SYM(_uhoh) | 94: .long SYM(_uhoh) | 95: .long SYM(_uhoh) | 96: .long SYM(_uhoh) | 97: .long SYM(_uhoh) | 98: .long SYM(_uhoh) | 99: .long SYM(_uhoh) | 100: .long SYM(_uhoh) | 101: .long SYM(_uhoh) | 102: .long SYM(_uhoh) | 103: .long SYM(_uhoh) | 104: .long SYM(_uhoh) | 105: .long SYM(_uhoh) | 106: .long SYM(_uhoh) | 107: .long SYM(_uhoh) | 108: .long SYM(_uhoh) | 109: .long SYM(_uhoh) | 110: .long SYM(_uhoh) | 111: .long SYM(_uhoh) | 112: .long SYM(_uhoh) | 113: .long SYM(_uhoh) | 114: .long SYM(_uhoh) | 115: .long SYM(_uhoh) | 116: .long SYM(_uhoh) | 117: .long SYM(_uhoh) | 118: .long SYM(_uhoh) | 119: .long SYM(_uhoh) | 120: .long SYM(_uhoh) | 121: .long SYM(_uhoh) | 122: .long SYM(_uhoh) | 123: .long SYM(_uhoh) | 124: .long SYM(_uhoh) | 125: .long SYM(_uhoh) | 126: .long SYM(_uhoh) | 127: .long SYM(_uhoh) | 128: .long SYM(_uhoh) | 129: .long SYM(_uhoh) | 130: .long SYM(_uhoh) | 131: .long SYM(_uhoh) | 132: .long SYM(_uhoh) | 133: .long SYM(_uhoh) | 134: .long SYM(_uhoh) | 135: .long SYM(_uhoh) | 136: .long SYM(_uhoh) | 137: .long SYM(_uhoh) | 138: .long SYM(_uhoh) | 139: .long SYM(_uhoh) | 140: .long SYM(_uhoh) | 141: .long SYM(_uhoh) | 142: .long SYM(_uhoh) | 143: .long SYM(_uhoh) | 144: .long SYM(_uhoh) | 145: .long SYM(_uhoh) | 146: .long SYM(_uhoh) | 147: .long SYM(_uhoh) | 148: .long SYM(_uhoh) | 149: .long SYM(_uhoh) | 150: .long SYM(_uhoh) | 151: .long SYM(_uhoh) | 152: .long SYM(_uhoh) | 153: .long SYM(_uhoh) | 154: .long SYM(_uhoh) | 155: .long SYM(_uhoh) | 156: .long SYM(_uhoh) | 157: .long SYM(_uhoh) | 158: .long SYM(_uhoh) | 159: .long SYM(_uhoh) | 160: .long SYM(_uhoh) | 161: .long SYM(_uhoh) | 162: .long SYM(_uhoh) | 163: .long SYM(_uhoh) | 164: .long SYM(_uhoh) | 165: .long SYM(_uhoh) | 166: .long SYM(_uhoh) | 167: .long SYM(_uhoh) | 168: .long SYM(_uhoh) | 169: .long SYM(_uhoh) | 170: .long SYM(_uhoh) | 171: .long SYM(_uhoh) | 172: .long SYM(_uhoh) | 173: .long SYM(_uhoh) | 174: .long SYM(_uhoh) | 175: .long SYM(_uhoh) | 176: .long SYM(_uhoh) | 177: .long SYM(_uhoh) | 178: .long SYM(_uhoh) | 179: .long SYM(_uhoh) | 180: .long SYM(_uhoh) | 181: .long SYM(_uhoh) | 182: .long SYM(_uhoh) | 183: .long SYM(_uhoh) | 184: .long SYM(_uhoh) | 185: .long SYM(_uhoh) | 186: .long SYM(_uhoh) | 187: .long SYM(_uhoh) | 188: .long SYM(_uhoh) | 189: .long SYM(_uhoh) | 190: .long SYM(_uhoh) | 191: .long SYM(_uhoh) | 192: .long SYM(_uhoh) | 193: .long SYM(_uhoh) | 194: .long SYM(_uhoh) | 195: .long SYM(_uhoh) | 196: .long SYM(_uhoh) | 197: .long SYM(_uhoh) | 198: .long SYM(_uhoh) | 199: .long SYM(_uhoh) | 200: .long SYM(_uhoh) | 201: .long SYM(_uhoh) | 202: .long SYM(_uhoh) | 203: .long SYM(_uhoh) | 204: .long SYM(_uhoh) | 205: .long SYM(_uhoh) | 206: .long SYM(_uhoh) | 207: .long SYM(_uhoh) | 208: .long SYM(_uhoh) | 209: .long SYM(_uhoh) | 210: .long SYM(_uhoh) | 211: .long SYM(_uhoh) | 212: .long SYM(_uhoh) | 213: .long SYM(_uhoh) | 214: .long SYM(_uhoh) | 215: .long SYM(_uhoh) | 216: .long SYM(_uhoh) | 217: .long SYM(_uhoh) | 218: .long SYM(_uhoh) | 219: .long SYM(_uhoh) | 220: .long SYM(_uhoh) | 221: .long SYM(_uhoh) | 222: .long SYM(_uhoh) | 223: .long SYM(_uhoh) | 224: .long SYM(_uhoh) | 225: .long SYM(_uhoh) | 226: .long SYM(_uhoh) | 227: .long SYM(_uhoh) | 228: .long SYM(_uhoh) | 229: .long SYM(_uhoh) | 230: .long SYM(_uhoh) | 231: .long SYM(_uhoh) | 232: .long SYM(_uhoh) | 233: .long SYM(_uhoh) | 234: .long SYM(_uhoh) | 235: .long SYM(_uhoh) | 236: .long SYM(_uhoh) | 237: .long SYM(_uhoh) | 238: .long SYM(_uhoh) | 239: .long SYM(_uhoh) | 240: .long SYM(_uhoh) | 241: .long SYM(_uhoh) | 242: .long SYM(_uhoh) | 243: .long SYM(_uhoh) | 244: .long SYM(_uhoh) | 245: .long SYM(_uhoh) | 246: .long SYM(_uhoh) | 247: .long SYM(_uhoh) | 248: .long SYM(_uhoh) | 249: .long SYM(_uhoh) | 250: .long SYM(_uhoh) | 251: .long SYM(_uhoh) | 252: .long SYM(_uhoh) | 253: .long SYM(_uhoh) | 254: .long SYM(_uhoh) | 255:/* * Default trap handler * With an oscilloscope you can see AS* stop */ PUBLIC (_uhoh)SYM(_uhoh): nop | Leave spot for breakpoint/* stop #0x2700 | Stop with interrupts disabled */ move.w #0x2700,sr move.w (a7),_boot_panic_registers+4 | SR move.l 2(a7),_boot_panic_registers | PC move.w 6(a7),_boot_panic_registers+6 | format & vector movem.l d0-d7/a0-a7, _boot_panic_registers+8 movec sfc, d0 movem.l d0, _boot_panic_registers+72 movec dfc, d0 movem.l d0, _boot_panic_registers+76 movec vbr, d0 movem.l d0, _boot_panic_registers+80 jmp SYM(_dbug_dumpanic) bra.s _crt0_cold_start/* * Log, but otherwise ignore, spurious interrupts */ PUBLIC (_spuriousInterrupt)SYM(_spuriousInterrupt): addql #1,SYM(_M68kSpuriousInterruptCount) rte/* * Place the low-order 3 octets of the board's ethernet address at * a `well-known' fixed location relative to the startup location. */ .align 2 .word 0 | Paddingethernet_address_buffer: .word 0x08F3 | Default address .word 0xDEAD .word 0xCAFEBEGIN_DATA/* equates */.equ _CPU340, 0x0.equ _CPU349, 0x31#ifdef _OLD_ASTECC /* old addresses for AST68340 only */.equ _EPLD_CS_BASE, 0x1.equ _PROM_Start, 0x01000000 /* CS0 */.equ _FLEX_Start, 0x08000000 /* CS2 */.equ _I2C_Start, 0x0c000000 /* CS3 */.equ _BCCram_Start, 0x00000000 /* CS1 64 Kbytes */.equ _BCCram_Size, 0x00010000 /* CS1 64 Kbytes */.equ _ExtRam_Start, 0x10000000 /* SRAM */.equ _ExtRam_Size, 0x00400000 /* 4 Mbytes */.equ _FastRam_Start, 0x00000000 /* overlap /CS1 for the first 4 Kbytes */.equ _FastRam_Size, 0x00001000 /* 4 Kbytes */#else /* new addresses for AST68349 and 68340 */.equ _EPLD_CS_BASE, 0x5.equ _PROM_Start, 0x50000000 /* CS0 */.equ _FLEX_Start, 0x08000000 /* CS2 */.equ _I2C_Start, 0x0c000000 /* CS3 */.equ _BCCram_Start, 0x00000000 /* CS1 64 Kbytes */.equ _BCCram_Size, 0x00010000 /* CS1 64 Kbytes */.equ _ExtRam_Start, 0x80000000 /* DRAM */.equ _ExtRam_Size, 0x00400000 /* 4 Mbytes */.equ _FastRam_Start, 0x00000000 /* overlap /CS1 for the first 4 Kbytes */.equ _FastRam_Size, 0x00001000 /* 4 Kbytes */#endif.equ _SPEED349, 0xD680 /* 24 Mhz */.equ _SPEED340, 0xD700 /* 25 Mhz *//* .equ _SPEED340, 0xCE00 16 Mhz */#define crt0_boot_type d0 /* cold/warm start (must be D0) */#define crt0_temp d1#define crt0_cpu_type d2#define crt0_csswitch d3#define crt0_buswidth d4#define crt0_pdcs d5#define crt0_spare6 d6#define crt0_spare7 d7#define crt0_sim_base a0#define crt0_glue a1#define crt0_dram a2#define crt0_ptr3 a3#define crt0_ptr4 a4#define crt0_ptr5 a5#define crt0_ptr6 a6/* -- PDCS buffer equates -- */.equ pdcs_mask, 0x1F /* DRAM configuration */.equ pdcs_sw12, 7 /* switch 12 */.equ pdcs_sw11, 6 /* switch 11 */.equ pdcs_sw14, 5 /* switch 14 */.equ bit_cache, pdcs_sw12 /* enable cache if on */.equ bit_meminit, pdcs_sw11 /* init memory if on *//* -- Initialization stack and vars -- */_AsteccBusWidth: ds.b 1_AsteccCsSwitch: ds.b 1_AsteccCpuName: ds.l 1.align 4_crt0_init_stack: ds.l 500_crt0_init_stktop:/* -- Initialization code -- */BEGIN_CODE.align 4 dc.l _crt0_init_stktop /* reset SP */ dc.l _crt0_cold_start /* reset PC */ dc.l _crt0_warm_start .ascii "BOOT XHM68K/Spectra for ASTECC 68349 and 68340 boards" dc.w 0.align 4.globl startstart:_crt0_cold_start: moveq.l #0,crt0_boot_type | signal cold reset bra.s _crt0_common_start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -