summaryrefslogtreecommitdiff
path: root/arm9/lib/src/OS_system.c
diff options
context:
space:
mode:
authorMade-s <made111@gmx.de>2020-05-04 17:15:10 +0200
committerMade-s <made111@gmx.de>2020-05-04 17:15:10 +0200
commit88d142a33b9973f35c913b3fdad7f6a4394a05cd (patch)
treec6ad861213ccebb62919e27f6d7f3f1080e1ee76 /arm9/lib/src/OS_system.c
parentab28b0b37f2fd9fba6010e48e15bd31170d678d7 (diff)
parentc82690dca094b624944b155e5119631c185bca5c (diff)
Merge branch 'master' of https://github.com/martmists/pokediamond
Diffstat (limited to 'arm9/lib/src/OS_system.c')
-rw-r--r--arm9/lib/src/OS_system.c71
1 files changed, 71 insertions, 0 deletions
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);
+}