#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!, {r2,lr} add sp, #-4 strh r1, [sp, #0] IntrWaitLoop: mov r2, #0x04000000 add r2, #0x200 ldrh r0, [r2, #0] strh r0, [sp, #2] ldrh r1, [sp, #0] orr r1, r0, r1 strh r1, [r2, #0] mov r0, #0x1F msr cpsr, r0 swi #0x020000 mov r0, #0xD3 msr cpsr, r0 mov r0, #0x04000000 ldrh r2, [r0, #-8] ldrh r1, [sp, #0] ands r1, r2 eorne r1, r2 strneh r1, [r0, #-8] ldrh r0, [sp, #2] mov r1, #0x04000000 add r1, #0x200 strh r0, [r1, #0] beq IntrWaitLoop add sp, #4 ldmfd sp!, {r2,pc}