#define nop andeq r0, r0 .text b resetBase b undefBase b swiBase b pabtBase b dabtBase nop b irqBase b fiqBase resetBase: mov pc, #0x8000000 swiBase: cmp sp, #0 moveq sp, #0x04000000 subeq sp, #0x20 stmfd sp!, {lr} ldrb r0, [lr, #-2] cmp r0, #4 bleq IntrWait cmp r0, #5 bleq IntrWait ldmfd sp!, {lr} movs pc, lr irqBase: stmfd sp!, {r0-r3, r12, lr} mov r0, #0x04000000 add lr, pc, #0 ldr pc, [r0, #-4] ldmfd sp!, {r0-r3, r12, lr} subs pc, lr, #4 IntrWait: stmfd sp!, {r4, lr} add sp, #-4 strh r1, [sp, #0] mov r4, #0x04000000 add r4, #0x200 ldrh r0, [r4, #0] strh r0, [sp, #2] ldrh r1, [sp, #0] orr r0, r1 strh r0, [r4, #0x0] mov r4, #0x04000000 IntrWaitLoop: mov r0, #0x1F msr cpsr, r0 mov r0, #0 strb r0, [r4, #0x301] mov r0, #0xD3 msr cpsr, r0 ldrh r0, [r4, #-8] ldrh r1, [sp, #0] ands r1, r0 eorne r1, r0 strneh r1, [r4, #-8] beq IntrWaitLoop mov r4, #0x04000000 add r4, #0x200 ldrh r0, [sp, #2] strh r0, [r4, #0] add sp, #4 ldmfd sp!, {r4, pc}