diff options
author | red031000 <rubenru09@aol.com> | 2021-07-23 01:11:15 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2021-07-23 01:12:27 +0100 |
commit | 5bf13c7f48fe91c7902ce50250bc1a5a2398a2ae (patch) | |
tree | 2e91e60bdb7a9174b16d8ca1b532809d4ae2e5b6 /arm9/lib/src/OS_irqHandler.c | |
parent | c2d91a2d997afd01fa4f40e1e16d5ee85557c9a8 (diff) |
separate out libs to libc, libnns and NitroSDK
Diffstat (limited to 'arm9/lib/src/OS_irqHandler.c')
-rw-r--r-- | arm9/lib/src/OS_irqHandler.c | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/arm9/lib/src/OS_irqHandler.c b/arm9/lib/src/OS_irqHandler.c deleted file mode 100644 index b4e2d232..00000000 --- a/arm9/lib/src/OS_irqHandler.c +++ /dev/null @@ -1,143 +0,0 @@ -#include "function_target.h" -#include "OS_irqHandler.h" -#include "OS_system.h" -#include "OS_thread.h" -#include "sections.h" -#include "CP_context.h" - -OSThreadQueue OSi_IrqThreadQueue = { NULL, NULL }; - -#pragma section ITCM begin -ARM_FUNC asm void OS_IrqHandler(void) -{ - stmfd sp!, {lr} - mov ip, #0x04000000 - add ip, ip, #0x210 - ldr r1, [ip, #-8] - cmp r1, #0 - ldmeqfd sp!, {pc} - ldmia ip, {r1, r2} - ands r1, r1, r2 - ldmeqfd sp!, {pc} - mov r3, #0x80000000 -_01FF8028: - clz r0, r1 - bics r1, r1, r3, lsr r0 - bne _01FF8028 - mov r1, r3, lsr r0 - str r1, [ip, #0x4] - rsbs r0, r0, #0x1f - ldr r1, =OS_IRQTable - ldr r0, [r1, r0, lsl #2] - ldr lr, =OS_IrqHandler_ThreadSwitch - bx r0 -} - -ARM_FUNC asm void OS_IrqHandler_ThreadSwitch(void) -{ - ldr ip, =OSi_IrqThreadQueue - mov r3, #0x0 - ldr ip, [ip] - mov r2, #0x1 - cmp ip, #0x0 - beq _01FF80A8 -_01FF8070: - str r2, [ip, #0x64] - str r3, [ip, #0x78] - str r3, [ip, #0x7c] - ldr r0, [ip, #0x80] - str r3, [ip, #0x80] - mov ip, r0 - cmp ip, #0x0 - bne _01FF8070 - ldr ip, =OSi_IrqThreadQueue - str r3, [ip] - str r3, [ip, #0x4] - ldr ip, =OSi_ThreadInfo - mov r1, #0x1 - strh r1, [ip] -_01FF80A8: - ldr ip, =OSi_ThreadInfo - ldrh r1, [ip] - cmp r1, #0x0 - ldreq pc, [sp], #0x4 - mov r1, #0x0 - strh r1, [ip] - mov r3, #0xd2 - msr CPSR_c, r3 - add r2, ip, #0x8 - ldr r1, [r2] -_01FF80D0: - cmp r1, #0x0 - ldrneh r0, [r1, #0x64] - cmpne r0, #0x1 - ldrne r1, [r1, #0x68] - bne _01FF80D0 - cmp r1, #0x0 - bne _01FF80F8 -_01FF80EC: - mov r3, #0x92 - msr CPSR_c, r3 - ldr pc, [sp], #0x4 -_01FF80F8: - ldr r0, [ip, #0x4] - cmp r1, r0 - beq _01FF80EC - ldr r3, [ip, #0xC] - cmp r3, #0x0 - beq _01FF8120 - stmdb sp!, {r0, r1, ip} - mov lr, pc - bx r3 - ldmia sp!, {r0, r1, ip} -_01FF8120: - str r1, [ip, #0x4] - mrs r2, SPSR - str r2, [r0, #0x0]! - stmdb sp!, {r0, r1} - add r0, r0, #0x0 - add r0, r0, #0x48 - ldr r1, =CP_SaveContext - blx r1 - ldmia sp!, {r0, r1} - ldmib sp!, {r2, r3} - stmib r0!, {r2, r3} - ldmib sp!, {r2, r3, ip, lr} - stmib r0!, {r2-r14}^ - stmib r0!, {lr} - mov r3, #0xd3 - msr CPSR_c, r3 - stmib r0!, {sp} - stmfd sp!, {r1} - add r0, r1, #0x0 - add r0, r0, #0x48 - ldr r1, =CPi_RestoreContext - blx r1 - ldmfd sp!, {r1} - ldr sp, [r1, #0x44] - mov r3, #0xd2 - msr CPSR_c, r3 - ldr r2, [r1, #0x0]! - msr SPSR_fc, r2 - ldr lr, [r1, #0x40] - ldmib r1!, {r0-r14}^ - nop - stmda sp!, {r0, r1, r2, r3, ip, lr} - ldmfd sp!, {pc} -} -#pragma section ITCM end - -ARM_FUNC void OS_WaitIrq(BOOL clear, OSIrqMask irqFlags) -{ - OSIntrMode lastIntrMode = OS_DisableInterrupts(); - if (clear) - { - OS_ClearIrqCheckFlag(irqFlags); - } - (void)OS_RestoreInterrupts(lastIntrMode); - - while (!(OS_GetIrqCheckFlag() & irqFlags)) - { - OS_SleepThread(&OSi_IrqThreadQueue); - } -} |