.global main .global _etext .global _data .global _edata .global __bss_start .global __bss_end__ .global _stack .set UND_STACK_SIZE, 0x00000004 .set ABT_STACK_SIZE, 0x00000004 .set FIQ_STACK_SIZE, 0x00000004 .set IRQ_STACK_SIZE, 0X00000080 .set SVC_STACK_SIZE, 0x00000004 .set MODE_USR, 0x10 .set MODE_FIQ, 0x11 .set MODE_IRQ, 0x12 .set MODE_SVC, 0x13 .set MODE_ABT, 0x17 .set MODE_UND, 0x1B .set MODE_SYS, 0x1F .equ I_BIT, 0x80 .equ F_BIT, 0x40 .text .code 32 .align 2 .global _boot .func _boot _boot: Vectors: b _start ldr pc,_undf ldr pc,_swi ldr pc,_pabt ldr pc,_dabt nop ldr pc,[pc,#-0xFF0] ldr pc,_fiq #if 0 _undf: .word _reset _swi: .word _reset _pabt: .word _reset _dabt: .word _reset _irq: .word _reset _fiq: .word _reset #else _undf: .word __undf _swi: .word __swi _pabt: .word __pabt _dabt: .word __dabt _irq: .word __irq _fiq: .word __fiq __undf: b . __swi: b . __pabt: b . __dabt: b . __irq: b . __fiq: b . #endif .size _boot, . - _boot .endfunc .global _start, start, _mainCRTStartup .func _start _start: start: _mainCRTStartup: ldr r0,=_stack msr CPSR_c,#MODE_UND|I_BIT|F_BIT mov sp,r0 sub r0,r0,#UND_STACK_SIZE msr CPSR_c,#MODE_ABT|I_BIT|F_BIT mov sp,r0 sub r0,r0,#ABT_STACK_SIZE msr CPSR_c,#MODE_FIQ|I_BIT|F_BIT mov sp,r0 sub r0,r0,#FIQ_STACK_SIZE msr CPSR_c,#MODE_IRQ|I_BIT|F_BIT mov sp,r0 sub r0,r0,#IRQ_STACK_SIZE msr CPSR_c,#MODE_SVC|I_BIT|F_BIT mov sp,r0 sub r0,r0,#SVC_STACK_SIZE msr CPSR_c,#MODE_SYS|I_BIT|F_BIT mov sp,r0 #ifdef ROM_RUN ldr r1,=_etext ldr r2,=_data ldr r3,=_edata 1: cmp r2,r3 ldrlo r0,[r1],#4 strlo r0,[r2],#4 blo 1b #endif mov r0,#0 ldr r1,=__bss_start ldr r2,=__bss_end__ 2: cmp r1,r2 strlo r0,[r1],#4 blo 2b mov r0,#0 mov r1,r0 mov r2,r0 mov fp,r0 mov r7,r0 ldr r10,=main mov lr,pc bx r10 .size _start, . - _start .endfunc .global _reset, reset, exit, abort .func _reset _reset: reset: exit: abort: #if 0 mrs r0,cpsr orr r0,r0,#I_BIT|F_BIT msr cpsr,r0 ldr r1,=(PS_BASE) ldr r0,=(PS_PIO) str r0,[r1,#PS_PCER_OFF] ldr r1,=(PIO_BASE) ldr r0,=(1<<23) str r0,[r1,#PIO_PER_OFF] str r0,[r1,#PIO_CODR_OFF] str r0,[r1,#PIO_OER_OFF] #endif b . .size _reset, . - _reset .endfunc .end