sd2snes/src/startup.S
2010-09-06 23:53:07 +02:00

102 lines
2.5 KiB
ArmAsm

/* startup code for LPC17xx
*
* Written 2010 by Ingo Korb
*/
.syntax unified
.section .vectors
.macro except label
.weak \label
.set \label, __unhandled_exception
.word \label
.endm
/* Cortex M3 standard except vectors */
.word __stack
.word _start
except NMI_Handler
except HardFault_Handler
except MemManage_Handler
except BusFault_Handler
except UsageFault_Handler
.word 0
.word 0
.word 0
.word 0
except SVC_Handler
except DebugMon_Handler
.word 0
except PendSV_Handler
except SysTick_Handler
/* External interrupt vectors */
except WDT_IRQHandler
except TIMER0_IRQHandler
except TIMER1_IRQHandler
except TIMER2_IRQHandler
except TIMER3_IRQHandler
except UART0_IRQHandler
except UART1_IRQHandler
except UART2_IRQHandler
except UART3_IRQHandler
except PWM1_IRQHandler
except I2C0_IRQHandler
except I2C1_IRQHandler
except I2C2_IRQHandler
except SPI_IRQHandler
except SSP0_IRQHandler
except SSP1_IRQHandler
except PLL0_IRQHandler
except RTC_IRQHandler
except EINT0_IRQHandler
except EINT1_IRQHandler
except EINT2_IRQHandler
except EINT3_IRQHandler
except ADC_IRQHandler
except BOD_IRQHandler
except USB_IRQHandler
except CAN_IRQHandler
except DMA_IRQHandler
except I2S_IRQHandler
except ENET_IRQHandler
except RIT_IRQHandler
except MCPWM_IRQHandler
except QEI_IRQHandler
except PLL1_IRQHandler
.section .text
.global _start
.thumb_func
_start:
/* copy data section to ram */
ldr r0, =__data_load_start
ldr r1, =__data_load_end
ldr r2, =__data_start
dataloop:
ldr.w r3, [r0], #4
str.w r3, [r2], #4
cmp r0, r1
blo dataloop
/* clear bss section */
ldr r0, =__bss_start__
ldr r1, =__bss_end__
ldr r2, =0
bssloop:
str.w r2, [r0], #4
cmp r0, r1
blo bssloop
/* start main() */
b main
/* endless loop */
.weak __unhandled_exception
.thumb_func
__unhandled_exception:
b __unhandled_exception
.end