forked from Imagelibrary/rtems
397 lines
12 KiB
ArmAsm
397 lines
12 KiB
ArmAsm
/* SPDX-License-Identifier: BSD-2-Clause */
|
|
|
|
/*
|
|
* mcf52235 startup code
|
|
*
|
|
* 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-1998.
|
|
* On-Line Applications Research Corporation (OAR).
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#include <rtems/asm.h>
|
|
|
|
BEGIN_CODE
|
|
|
|
PUBLIC (_INTERRUPT_VECTOR)
|
|
SYM(_INTERRUPT_VECTOR):
|
|
|
|
.long _ISR_Stack_area_end /* 00 Initial 'SSP' */
|
|
.long SYM(start) /* 01 Initial PC */
|
|
.long SYM(_uhoh) /* 02 Access Error */
|
|
.long SYM(_uhoh) /* 03 Address Error */
|
|
.long SYM(_uhoh) /* 04 Illegal Instruction */
|
|
.long SYM(_uhoh) /* 05 Divide by Zero */
|
|
.long SYM(_uhoh) /* 06 Reserved */
|
|
.long SYM(_uhoh) /* 07 Reserved */
|
|
.long SYM(_uhoh) /* 08 Privilege Violation */
|
|
.long SYM(_uhoh) /* 09 Trace */
|
|
.long SYM(_uhoh) /* 10 Unimplemented A-Line */
|
|
.long SYM(_uhoh) /* 11 Unimplemented F-Line */
|
|
.long SYM(_uhoh) /* 12 Debug Interrupt */
|
|
.long SYM(_uhoh) /* 13 Reserved */
|
|
.long SYM(_uhoh) /* 14 Format Error */
|
|
.long SYM(_uhoh) /* 15 Reserved */
|
|
.long SYM(_uhoh) /* 16 Reserved */
|
|
.long SYM(_uhoh) /* 17 Reserved */
|
|
.long SYM(_uhoh) /* 18 Reserved */
|
|
.long SYM(_uhoh) /* 19 Reserved */
|
|
.long SYM(_uhoh) /* 20 Reserved */
|
|
.long SYM(_uhoh) /* 21 Reserved */
|
|
.long SYM(_uhoh) /* 22 Reserved */
|
|
.long SYM(_uhoh) /* 23 Reserved */
|
|
.long SYM(_spuriousInterrupt) /* 24 Spurious Interrupt */
|
|
.long SYM(_uhoh) /* Reserved */
|
|
.long SYM(_uhoh) /* Reserved */
|
|
.long SYM(_uhoh) /* Reserved */
|
|
.long SYM(_uhoh) /* Reserved */
|
|
.long SYM(_uhoh) /* Reserved */
|
|
.long SYM(_uhoh) /* Reserved */
|
|
.long SYM(_uhoh) /* Reserved */
|
|
.long SYM(_uhoh) /* 32 TRAP #0 */
|
|
.long SYM(_uhoh) /* 33 TRAP #1 */
|
|
.long SYM(_uhoh) /* 34 TRAP #2 */
|
|
.long SYM(_uhoh) /* 35 TRAP #3 */
|
|
.long SYM(_uhoh) /* 36 TRAP #4 */
|
|
.long SYM(_uhoh) /* 37 TRAP #5 */
|
|
.long SYM(_uhoh) /* 38 TRAP #6 */
|
|
.long SYM(_uhoh) /* 39 TRAP #7 */
|
|
.long SYM(_uhoh) /* 40 TRAP #8 */
|
|
.long SYM(_uhoh) /* 41 TRAP #9 */
|
|
.long SYM(_uhoh) /* 42 TRAP #10 */
|
|
.long SYM(_uhoh) /* 43 TRAP #11 */
|
|
.long SYM(_uhoh) /* 44 TRAP #12 */
|
|
.long SYM(_uhoh) /* 45 TRAP #13 */
|
|
.long SYM(_uhoh) /* 46 TRAP #14 */
|
|
.long SYM(_uhoh) /* 47 TRAP #15 */
|
|
.long SYM(_uhoh) /* 48 Reserved */
|
|
.long SYM(_uhoh) /* 49 Reserved */
|
|
.long SYM(_uhoh) /* 50 Reserved */
|
|
.long SYM(_uhoh) /* 51 Reserved */
|
|
.long SYM(_uhoh) /* 52 Reserved */
|
|
.long SYM(_uhoh) /* 53 Reserved */
|
|
.long SYM(_uhoh) /* 54 Reserved */
|
|
.long SYM(_uhoh) /* 55 Reserved */
|
|
.long SYM(_uhoh) /* 56 Reserved */
|
|
.long SYM(_uhoh) /* 57 Reserved */
|
|
.long SYM(_uhoh) /* 58 Reserved */
|
|
.long SYM(_uhoh) /* 59 Reserved */
|
|
.long SYM(_uhoh) /* 60 Reserved */
|
|
.long SYM(_uhoh) /* 61 Reserved */
|
|
.long SYM(_uhoh) /* 62 Reserved */
|
|
.long SYM(_uhoh) /* 63 Reserved */
|
|
|
|
/* INTC0 */
|
|
|
|
.long SYM(_uhoh) /* 64*/
|
|
.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*/
|
|
|
|
/* INTC1 */
|
|
|
|
.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
|
|
*/
|
|
.align 4
|
|
PUBLIC (_uhoh)
|
|
SYM(_uhoh):
|
|
nop | Leave spot for breakpoint
|
|
stop #0x2700 | Stop with interrupts disabled
|
|
bra.w SYM(_uhoh) | Stuck forever
|
|
|
|
/*
|
|
* Spurious Interrupt Handler
|
|
*/
|
|
.align 4
|
|
PUBLIC (_spuriousInterrupt)
|
|
SYM(_spuriousInterrupt):
|
|
addql #1, SYM(_M68kSpuriousInterruptCount)
|
|
rte
|
|
|
|
/*
|
|
* Write VBR Register
|
|
*/
|
|
.align 4
|
|
PUBLIC (_wr_vbr)
|
|
SYM(_wr_vbr):
|
|
move.l 4(sp), d0
|
|
movec d0, vbr
|
|
nop
|
|
rts
|
|
|
|
/*
|
|
* Board startup
|
|
* Disable watchdog, interrupts
|
|
* Enable sram
|
|
*/
|
|
.align 4
|
|
PUBLIC (start)
|
|
SYM(start):
|
|
|
|
/* Mask off interupts */
|
|
move.w #0x2700,sr
|
|
|
|
/* Save off reset values of D0 and D1 */
|
|
move.l d0,d6
|
|
move.l d1,d7
|
|
|
|
/* Initialize RAMBAR1: locate SRAM and validate it */
|
|
move.l #_CoreSRamBase,d0
|
|
add.l #0x221,d0
|
|
movec d0,%rambar
|
|
|
|
/* Save off intial D0 and D1 to RAM */
|
|
move.l d6, SYM(_d0_reset)
|
|
move.l d7, SYM(_d1_reset)
|
|
|
|
/* Locate Stack Pointer */
|
|
move.l #_ISR_Stack_area_end,sp
|
|
|
|
/*
|
|
* Remainder of the startup code is handled by C code
|
|
* This never returns
|
|
*/
|
|
jmp SYM(Init5329)
|
|
|
|
END_CODE
|
|
|
|
|
|
BEGIN_DATA_DCL
|
|
|
|
.align 4
|
|
|
|
PUBLIC (_M68kSpuriousInterruptCount)
|
|
SYM (_M68kSpuriousInterruptCount):
|
|
.long 0
|
|
|
|
PUBLIC (_d0_reset)
|
|
SYM (_d0_reset):
|
|
.long 0
|
|
|
|
PUBLIC (_d1_reset)
|
|
SYM (_d1_reset):
|
|
.long 0
|
|
|
|
END_DATA_DCL
|
|
|
|
END
|
|
|