File size: 1,056 Bytes
89610f7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #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}
|