.EXTERN main .EXTERN portSWI .TEXT .GLOBAL _start .set __stack_end__, 0x589000 .set SVC_STACK_SIZE, 0x00000400 .set MODE_SVC, 0x13 /* Supervisor Mode */ .set MODE_USR, 0x10 /* User Mode */ .set MODE_SYS, 0x1F /*System Mode */ .equ I_BIT, 0x80 /* when I bit is set, IRQ is disabled */ .equ F_BIT, 0x40 /* when F bit is set, FIQ is disabled */ _start: b _reset b _ud_h b _SWI_h b _pre_h b _abort_h nop b _irq b _fiq _reset: ldr r0, = __stack_end__ msr CPSR_c, #MODE_SVC /* Supervisor Mode */ mov sp, r0 /*update stack pointer supervisor mode*/ sub r0, r0, #SVC_STACK_SIZE /*stack end for user mode*/ msr CPSR_c, #MODE_USR /* System Mode */ mov sp,r0 /*update stack pointer user mode*/ /*mov ip,sp */ bl main b _exit _exit: b _exit _ud_h: b _ud_h _SWI_h: /*STMFD SP!, {r0-r13} MRS r2, SPSR STMFD SP!, {r2} STMFD SP!, {lr} MOV r1, sp */ STMFD SP!, {ip} b portSWI /*_SWI_h*/ _pre_h: b _pre_h _abort_h: b _abort_h _irq: b _irq _fiq: b _fiq