summaryrefslogtreecommitdiff
path: root/arm9/lib/src
diff options
context:
space:
mode:
authorRevo <projectrevotpp@hotmail.com>2020-05-01 16:04:18 -0400
committerGitHub <noreply@github.com>2020-05-01 16:04:18 -0400
commitce558d0870e8b8ceb626ee8a6f165e8be9869ede (patch)
treea002ab92671fdf9736179b9b1d818b6da9c398d2 /arm9/lib/src
parentdb2a8afd2f3c5e2a38083a3dc47d65e7848f0fd2 (diff)
parent527b257015fa32ac4007b1d7e9198ac37d8e1542 (diff)
Merge pull request #52 from red031000/master
remove include/nitro and shift everything to arm9/lib
Diffstat (limited to 'arm9/lib/src')
-rw-r--r--arm9/lib/src/OS_init.c38
-rw-r--r--arm9/lib/src/OS_system.c71
2 files changed, 109 insertions, 0 deletions
diff --git a/arm9/lib/src/OS_init.c b/arm9/lib/src/OS_init.c
new file mode 100644
index 00000000..90b01ffa
--- /dev/null
+++ b/arm9/lib/src/OS_init.c
@@ -0,0 +1,38 @@
+//
+// Created by mart on 4/12/20.
+//
+
+#include "function_target.h"
+#include "OS_init.h"
+
+extern void PXI_Init();
+extern void OS_InitLock();
+extern void OS_InitIrqTable();
+extern void OS_SetIrqStackChecker();
+extern void OS_InitException();
+extern void MI_Init();
+extern void OS_InitVAlarm();
+extern void OSi_InitVramExclusive();
+extern void OS_InitThread();
+extern void OS_InitReset();
+extern void CTRDG_Init();
+extern void CARD_Init();
+extern void PM_Init();
+
+ARM_FUNC void OS_Init(void) {
+ OS_InitArena();
+ PXI_Init();
+ OS_InitLock();
+ OS_InitArenaEx();
+ OS_InitIrqTable();
+ OS_SetIrqStackChecker();
+ OS_InitException();
+ MI_Init();
+ OS_InitVAlarm();
+ OSi_InitVramExclusive();
+ OS_InitThread();
+ OS_InitReset();
+ CTRDG_Init();
+ CARD_Init();
+ PM_Init();
+}
diff --git a/arm9/lib/src/OS_system.c b/arm9/lib/src/OS_system.c
new file mode 100644
index 00000000..c2b08681
--- /dev/null
+++ b/arm9/lib/src/OS_system.c
@@ -0,0 +1,71 @@
+//
+// Created by mart on 4/23/20.
+//
+
+#include "function_target.h"
+#include "OS_system.h"
+
+ARM_FUNC asm OSIntrMode OS_EnableInterrupts() {
+ mrs r0, cpsr
+ bic r1, r0, #HW_PSR_DISABLE_IRQ
+ msr cpsr_c, r1
+ and r0, r0, #HW_PSR_DISABLE_IRQ
+ bx lr
+}
+
+ARM_FUNC asm OSIntrMode OS_DisableInterrupts() {
+ mrs r0, cpsr
+ orr r1, r0, #HW_PSR_DISABLE_IRQ
+ msr cpsr_c, r1
+ and r0, r0, #HW_PSR_DISABLE_IRQ
+ bx lr
+}
+
+ARM_FUNC asm OSIntrMode OS_RestoreInterrupts(OSIntrMode state) {
+ mrs r1, cpsr
+ bic r2, r1, #HW_PSR_DISABLE_IRQ
+ orr r2, r2, r0
+ msr cpsr_c, r2
+ and r0, r1, #HW_PSR_DISABLE_IRQ
+ bx lr
+}
+
+ARM_FUNC asm OSIntrMode OS_DisableInterrupts_IrqAndFiq() {
+ mrs r0, cpsr
+ orr r1, r0, #HW_PSR_DISABLE_IRQ_FIQ
+ msr cpsr_c, r1
+ and r0, r0, #HW_PSR_DISABLE_IRQ_FIQ
+ bx lr
+}
+
+ARM_FUNC asm OSIntrMode OS_RestoreInterrupts_IrqAndFiq(OSIntrMode state) {
+ mrs r1, cpsr
+ bic r2, r1, #HW_PSR_DISABLE_IRQ_FIQ
+ orr r2, r2, r0
+ msr cpsr_c, r2
+ and r0, r1, #HW_PSR_DISABLE_IRQ_FIQ
+ bx lr
+}
+
+ARM_FUNC asm OSIntrMode OS_GetCpsrIrq() {
+ mrs r0, cpsr
+ and r0, r0, #HW_PSR_DISABLE_IRQ
+ bx lr
+}
+
+ARM_FUNC asm OSProcMode OS_GetProcMode() {
+ mrs r0, cpsr
+ and r0, r0, #HW_PSR_CPU_MODE_MASK
+ bx lr
+}
+
+ARM_FUNC asm void OS_SpinWait() {
+ subs r0, r0, #0x4
+ bhs OS_SpinWait
+ bx lr
+}
+
+ARM_FUNC void OS_WaitVBlankIntr() {
+ SVC_WaitByLoop(0x1);
+ OS_WaitIrq(TRUE, OS_IE_V_BLANK);
+}