summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorred031000 <rubenru09@aol.com>2020-06-03 19:26:33 +0100
committerred031000 <rubenru09@aol.com>2020-06-03 19:26:59 +0100
commit89fa3666e18a80632238471840de1df792409fcb (patch)
tree3c63952247f6223cf9a5f48f4ae8f0b5702137a4
parente61df40bf88246093b97e265aa54b7dad0a101e6 (diff)
split valarm and decomp system
-rw-r--r--arm7/arm7.lsf2
-rw-r--r--arm7/asm/OS_valarm.s475
-rw-r--r--arm7/asm/dtcm.s530
-rw-r--r--arm7/lib/include/OS_init.h9
-rw-r--r--arm7/lib/include/OS_system.h37
-rw-r--r--arm7/lib/include/types.h50
-rw-r--r--arm7/lib/src/OS_system.c65
-rw-r--r--arm9/lib/include/OS_init.h10
-rw-r--r--arm9/lib/include/OS_system.h10
-rw-r--r--arm9/lib/include/types.h6
10 files changed, 644 insertions, 550 deletions
diff --git a/arm7/arm7.lsf b/arm7/arm7.lsf
index bec96da5..8eb35da5 100644
--- a/arm7/arm7.lsf
+++ b/arm7/arm7.lsf
@@ -29,6 +29,8 @@ Autoload WRAM
Object OS_timer.o
Object OS_tick.o
Object OS_alarm.o
+ Object OS_valarm.o
+ Object OS_system.o
Object dtcm.o
Object libsyscall.o
Object dtcm2.o
diff --git a/arm7/asm/OS_valarm.s b/arm7/asm/OS_valarm.s
new file mode 100644
index 00000000..d538ad83
--- /dev/null
+++ b/arm7/asm/OS_valarm.s
@@ -0,0 +1,475 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start OSi_GetVFrame
+OSi_GetVFrame: ; 0x037FAA0C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ bl OS_DisableInterrupts
+ ldr r1, _037FAA50 ; =_03807940
+ ldr r1, [r1]
+ cmp r4, r1
+ ldrlt r1, _037FAA54 ; =_03807944
+ ldrlt r2, [r1]
+ addlt r2, r2, #1
+ strlt r2, [r1]
+ ldr r1, _037FAA50 ; =_03807940
+ str r4, [r1]
+ bl OS_RestoreInterrupts
+ ldr r0, _037FAA54 ; =_03807944
+ ldr r0, [r0]
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FAA50: .word _03807940
+_037FAA54: .word _03807944
+
+ arm_func_start OSi_CompareVCount
+OSi_CompareVCount: ; 0x037FAA58
+ ldr r3, [r0, #12]
+ subs r3, r1, r3
+ ldrsh r1, [r0, #16]
+ sub r2, r2, r1
+ bmi _037FAA7C
+ cmp r3, #0
+ bne _037FAA84
+ cmp r2, #0
+ bge _037FAA84
+_037FAA7C:
+ mov r0, #0
+ bx lr
+_037FAA84:
+ cmp r2, #0
+ ldrlt r1, _037FAAA4 ; =0x00000107
+ addlt r2, r2, r1
+ ldrsh r0, [r0, #18]
+ cmp r2, r0
+ movle r0, #1
+ movgt r0, #2
+ bx lr
+_037FAAA4: .word 0x00000107
+
+ arm_func_start OSi_VAlarmHandler
+OSi_VAlarmHandler: ; 0x037FAAA8
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov r0, #4
+ bl OS_DisableIrqMask
+ ldr r2, _037FAC1C ; =0x04000004
+ ldrh r0, [r2]
+ bic r0, r0, #32
+ strh r0, [r2]
+ ldr r1, _037FAC20 ; =0x0380FFF8
+ ldr r0, [r1]
+ orr r0, r0, #4
+ str r0, [r1]
+ ldrh r2, [r2]
+ mov r0, r2, asr #8
+ and r1, r0, #255 ; 0xff
+ mov r0, r2, lsl #1
+ and r0, r0, #256 ; 0x100
+ orr r0, r1, r0
+ sub r0, r0, #1
+ bl OSi_GetVFrame
+ ldr r9, _037FAC24 ; =0x04000006
+ mov r6, #4
+ ldr r5, _037FAC1C ; =0x04000004
+ mov r4, #0
+ ldr fp, _037FAC28 ; =_03807944
+ b _037FAC00
+_037FAB10:
+ ldrh r8, [r9]
+ mov r0, r8
+ bl OSi_GetVFrame
+ mov r7, r0
+ mov r0, sl
+ mov r1, r7
+ mov r2, r8
+ bl OSi_CompareVCount
+ cmp r0, #0
+ beq _037FAB4C
+ cmp r0, #1
+ beq _037FAB8C
+ cmp r0, #2
+ beq _037FABE4
+ b _037FAC00
+_037FAB4C:
+ mov r0, sl
+ bl OSi_SetNextVAlarm
+ ldrh r1, [r9]
+ ldrsh r0, [sl, #16]
+ cmp r0, r1
+ bne _037FAC10
+ ldr r0, [sl, #12]
+ cmp r0, r7
+ bne _037FAC10
+ mov r0, r6
+ bl OS_DisableIrqMask
+ ldrh r0, [r5]
+ bic r0, r0, #32
+ strh r0, [r5]
+ mov r0, r6
+ bl OS_ResetRequestIrqMask
+_037FAB8C:
+ ldr r7, [sl]
+ mov r0, sl
+ bl FUN_037FAECC
+ str r4, [sl]
+ cmp r7, #0
+ beq _037FABB0
+ ldr r0, [sl, #4]
+ mov lr, pc
+ bx r7
+_037FABB0:
+ ldr r0, [sl, #28]
+ cmp r0, #0
+ beq _037FAC00
+ ldr r0, [sl, #36] ; 0x24
+ cmp r0, #0
+ bne _037FAC00
+ str r7, [sl]
+ ldr r0, [fp]
+ add r0, r0, #1
+ str r0, [sl, #12]
+ mov r0, sl
+ bl OSi_AppendVAlarm
+ b _037FAC00
+_037FABE4:
+ mov r0, sl
+ bl FUN_037FAECC
+ mov r0, sl
+ bl OSi_AppendVAlarm
+ ldr r0, [fp]
+ add r0, r0, #1
+ str r0, [sl, #12]
+_037FAC00:
+ ldr r0, _037FAC2C ; =_03807948
+ ldr sl, [r0]
+ cmp sl, #0
+ bne _037FAB10
+_037FAC10:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_037FAC1C: .word 0x04000004
+_037FAC20: .word 0x0380FFF8
+_037FAC24: .word 0x04000006
+_037FAC28: .word _03807944
+_037FAC2C: .word _03807948
+
+ arm_func_start OS_CancelVAlarms
+OS_CancelVAlarms: ; 0x037FAC30
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ bl OS_DisableInterrupts
+ mov r5, r0
+ cmp r7, #0
+ bne _037FAC50
+ bl FUN_037FB1F0
+_037FAC50:
+ ldr r0, _037FACA8 ; =_03807948
+ ldr r0, [r0]
+ cmp r0, #0
+ ldrne r6, [r0, #24]
+ moveq r6, #0
+ mov r4, #0
+ b _037FAC8C
+_037FAC6C:
+ ldr r1, [r0, #8]
+ cmp r1, r7
+ bne _037FAC7C
+ bl OS_CancelVAlarm
+_037FAC7C:
+ mov r0, r6
+ cmp r6, #0
+ ldrne r6, [r6, #24]
+ moveq r6, r4
+_037FAC8C:
+ cmp r0, #0
+ bne _037FAC6C
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FACA8: .word _03807948
+
+ arm_func_start OS_CancelVAlarm
+OS_CancelVAlarm: ; 0x037FACAC
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r1, #1
+ str r1, [r5, #36] ; 0x24
+ ldr r1, [r5]
+ cmp r1, #0
+ bne _037FACDC
+ bl OS_RestoreInterrupts
+ b _037FACF4
+_037FACDC:
+ mov r0, r5
+ bl FUN_037FAECC
+ mov r0, #0
+ str r0, [r5]
+ mov r0, r4
+ bl OS_RestoreInterrupts
+_037FACF4:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start OS_SetVAlarmTag
+OS_SetVAlarmTag: ; 0x037FAD00
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ movs r4, r1
+ bne _037FAD18
+ bl FUN_037FB1F0
+_037FAD18:
+ cmp r5, #0
+ strne r4, [r5, #8]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start OSi_SetNextVAlarm
+OSi_SetNextVAlarm: ; 0x037FAD2C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #4
+ ldr r1, _037FAD80 ; =OSi_VAlarmHandler
+ bl OS_SetIrqFunction
+ ldrsh ip, [r4, #16]
+ and r3, ip, #256 ; 0x100
+ ldr r1, _037FAD84 ; =0x04000004
+ ldrh r0, [r1]
+ and r2, r0, #63 ; 0x3f
+ and r0, ip, #255 ; 0xff
+ orr r0, r2, r0, lsl #8
+ orr r0, r0, r3, asr #1
+ strh r0, [r1]
+ ldrh r0, [r1]
+ orr r0, r0, #32
+ strh r0, [r1]
+ mov r0, #4
+ bl OS_EnableIrqMask
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FAD80: .word OSi_VAlarmHandler
+_037FAD84: .word 0x04000004
+
+ arm_func_start OS_SetPeriodicVAlarm
+OS_SetPeriodicVAlarm: ; 0x037FAD88
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ bl OS_DisableInterrupts
+ mov r4, r0
+ cmp r8, #0
+ beq _037FADBC
+ ldr r0, [r8]
+ cmp r0, #0
+ beq _037FADC0
+_037FADBC:
+ bl FUN_037FB1F0
+_037FADC0:
+ ldr r0, _037FAE1C ; =0x04000006
+ ldrh r9, [r0]
+ mov r0, r9
+ bl OSi_GetVFrame
+ mov r1, #1
+ str r1, [r8, #28]
+ strh r7, [r8, #16]
+ cmp r7, r9
+ addle r0, r0, #1
+ str r0, [r8, #12]
+ strh r6, [r8, #18]
+ str r5, [r8]
+ ldr r0, [sp, #32]
+ str r0, [r8, #4]
+ mov r0, #0
+ str r0, [r8, #36] ; 0x24
+ mov r0, r8
+ bl OSi_InsertVAlarm
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037FAE1C: .word 0x04000006
+
+ arm_func_start OS_SetVAlarm
+OS_SetVAlarm: ; 0x037FAE20
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ bl OS_DisableInterrupts
+ mov r4, r0
+ cmp r8, #0
+ beq _037FAE54
+ ldr r0, [r8]
+ cmp r0, #0
+ beq _037FAE58
+_037FAE54:
+ bl FUN_037FB1F0
+_037FAE58:
+ ldr r0, _037FAEB4 ; =0x04000006
+ ldrh r9, [r0]
+ mov r0, r9
+ bl OSi_GetVFrame
+ mov r1, #0
+ str r1, [r8, #28]
+ strh r7, [r8, #16]
+ cmp r7, r9
+ addle r0, r0, #1
+ str r0, [r8, #12]
+ strh r6, [r8, #18]
+ str r5, [r8]
+ ldr r0, [sp, #32]
+ str r0, [r8, #4]
+ mov r0, #0
+ str r0, [r8, #36] ; 0x24
+ mov r0, r8
+ bl OSi_InsertVAlarm
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037FAEB4: .word 0x04000006
+
+ arm_func_start OS_CreateVAlarm
+OS_CreateVAlarm: ; 0x037FAEB8
+ mov r1, #0
+ str r1, [r0]
+ str r1, [r0, #8]
+ str r1, [r0, #32]
+ bx lr
+
+ arm_func_start FUN_037FAECC
+FUN_037FAECC: ; 0x037FAECC
+ cmp r0, #0
+ bxeq lr
+ ldr r2, [r0, #20]
+ ldr r1, [r0, #24]
+ cmp r1, #0
+ strne r2, [r1, #20]
+ ldreq r0, _037FAF00 ; =_03807948
+ streq r2, [r0, #4]
+ cmp r2, #0
+ strne r1, [r2, #24]
+ ldreq r0, _037FAF00 ; =_03807948
+ streq r1, [r0]
+ bx lr
+_037FAF00: .word _03807948
+
+ arm_func_start OSi_AppendVAlarm
+OSi_AppendVAlarm: ; 0x037FAF04
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _037FAF44 ; =_03807948
+ ldr r3, [r1, #4]
+ str r3, [r0, #20]
+ mov r2, #0
+ str r2, [r0, #24]
+ str r0, [r1, #4]
+ cmp r3, #0
+ strne r0, [r3, #24]
+ bne _037FAF38
+ str r0, [r1]
+ bl OSi_SetNextVAlarm
+_037FAF38:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FAF44: .word _03807948
+
+ arm_func_start OSi_InsertVAlarm
+OSi_InsertVAlarm: ; 0x037FAF48
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _037FAFCC ; =_03807948
+ ldr r3, [r1]
+ b _037FAFB4
+_037FAF5C:
+ ldr r2, [r0, #12]
+ ldr r1, [r3, #12]
+ cmp r1, r2
+ bcc _037FAFB0
+ cmp r1, r2
+ bne _037FAF84
+ ldrsh r2, [r3, #16]
+ ldrsh r1, [r0, #16]
+ cmp r2, r1
+ ble _037FAFB0
+_037FAF84:
+ ldr r1, [r3, #20]
+ str r1, [r0, #20]
+ str r3, [r0, #24]
+ str r0, [r3, #20]
+ cmp r1, #0
+ strne r0, [r1, #24]
+ bne _037FAFC0
+ ldr r1, _037FAFCC ; =_03807948
+ str r0, [r1]
+ bl OSi_SetNextVAlarm
+ b _037FAFC0
+_037FAFB0:
+ ldr r3, [r3, #24]
+_037FAFB4:
+ cmp r3, #0
+ bne _037FAF5C
+ bl OSi_AppendVAlarm
+_037FAFC0:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FAFCC: .word _03807948
+
+ arm_func_start OS_IsVAlarmAvailable
+OS_IsVAlarmAvailable: ; 0x037FAFD0
+ ldr r0, _037FAFDC ; =_0380793C
+ ldrh r0, [r0]
+ bx lr
+_037FAFDC: .word _0380793C
+
+ arm_func_start OS_InitVAlarm
+OS_InitVAlarm: ; 0x037FAFE0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _037FB038 ; =_0380793C
+ ldrh r1, [r0]
+ cmp r1, #0
+ bne _037FB02C
+ mov r1, #1
+ strh r1, [r0]
+ mov r1, #0
+ ldr r0, _037FB03C ; =_03807948
+ str r1, [r0]
+ str r1, [r0, #4]
+ mov r0, #4
+ bl OS_DisableIrqMask
+ mov r1, #0
+ ldr r0, _037FB040 ; =_03807944
+ str r1, [r0]
+ ldr r0, _037FB044 ; =_03807940
+ str r1, [r0]
+_037FB02C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FB038: .word _0380793C
+_037FB03C: .word _03807948
+_037FB040: .word _03807944
+_037FB044: .word _03807940
diff --git a/arm7/asm/dtcm.s b/arm7/asm/dtcm.s
index a78cefc2..53b17162 100644
--- a/arm7/asm/dtcm.s
+++ b/arm7/asm/dtcm.s
@@ -2,536 +2,6 @@
.include "global.inc"
.section .text
- arm_func_start FUN_037FAA0C
-FUN_037FAA0C: ; 0x037FAA0C
- stmdb sp!, {r4, lr}
- mov r4, r0
- bl OS_DisableInterrupts
- ldr r1, _037FAA50 ; =_03807940
- ldr r1, [r1]
- cmp r4, r1
- ldrlt r1, _037FAA54 ; =_03807944
- ldrlt r2, [r1]
- addlt r2, r2, #1
- strlt r2, [r1]
- ldr r1, _037FAA50 ; =_03807940
- str r4, [r1]
- bl OS_RestoreInterrupts
- ldr r0, _037FAA54 ; =_03807944
- ldr r0, [r0]
- ldmia sp!, {r4, lr}
- bx lr
-_037FAA50: .word _03807940
-_037FAA54: .word _03807944
-
- arm_func_start FUN_037FAA58
-FUN_037FAA58: ; 0x037FAA58
- ldr r3, [r0, #12]
- subs r3, r1, r3
- ldrsh r1, [r0, #16]
- sub r2, r2, r1
- bmi _037FAA7C
- cmp r3, #0
- bne _037FAA84
- cmp r2, #0
- bge _037FAA84
-_037FAA7C:
- mov r0, #0
- bx lr
-_037FAA84:
- cmp r2, #0
- ldrlt r1, _037FAAA4 ; =0x00000107
- addlt r2, r2, r1
- ldrsh r0, [r0, #18]
- cmp r2, r0
- movle r0, #1
- movgt r0, #2
- bx lr
-_037FAAA4: .word 0x00000107
-
- arm_func_start FUN_037FAAA8
-FUN_037FAAA8: ; 0x037FAAA8
- stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- sub sp, sp, #4
- mov r0, #4
- bl OS_DisableIrqMask
- ldr r2, _037FAC1C ; =0x04000004
- ldrh r0, [r2]
- bic r0, r0, #32
- strh r0, [r2]
- ldr r1, _037FAC20 ; =0x0380FFF8
- ldr r0, [r1]
- orr r0, r0, #4
- str r0, [r1]
- ldrh r2, [r2]
- mov r0, r2, asr #8
- and r1, r0, #255 ; 0xff
- mov r0, r2, lsl #1
- and r0, r0, #256 ; 0x100
- orr r0, r1, r0
- sub r0, r0, #1
- bl FUN_037FAA0C
- ldr r9, _037FAC24 ; =0x04000006
- mov r6, #4
- ldr r5, _037FAC1C ; =0x04000004
- mov r4, #0
- ldr fp, _037FAC28 ; =_03807944
- b _037FAC00
-_037FAB10:
- ldrh r8, [r9]
- mov r0, r8
- bl FUN_037FAA0C
- mov r7, r0
- mov r0, sl
- mov r1, r7
- mov r2, r8
- bl FUN_037FAA58
- cmp r0, #0
- beq _037FAB4C
- cmp r0, #1
- beq _037FAB8C
- cmp r0, #2
- beq _037FABE4
- b _037FAC00
-_037FAB4C:
- mov r0, sl
- bl FUN_037FAD2C
- ldrh r1, [r9]
- ldrsh r0, [sl, #16]
- cmp r0, r1
- bne _037FAC10
- ldr r0, [sl, #12]
- cmp r0, r7
- bne _037FAC10
- mov r0, r6
- bl OS_DisableIrqMask
- ldrh r0, [r5]
- bic r0, r0, #32
- strh r0, [r5]
- mov r0, r6
- bl OS_ResetRequestIrqMask
-_037FAB8C:
- ldr r7, [sl]
- mov r0, sl
- bl FUN_037FAECC
- str r4, [sl]
- cmp r7, #0
- beq _037FABB0
- ldr r0, [sl, #4]
- mov lr, pc
- bx r7
-_037FABB0:
- ldr r0, [sl, #28]
- cmp r0, #0
- beq _037FAC00
- ldr r0, [sl, #36] ; 0x24
- cmp r0, #0
- bne _037FAC00
- str r7, [sl]
- ldr r0, [fp]
- add r0, r0, #1
- str r0, [sl, #12]
- mov r0, sl
- bl FUN_037FAF04
- b _037FAC00
-_037FABE4:
- mov r0, sl
- bl FUN_037FAECC
- mov r0, sl
- bl FUN_037FAF04
- ldr r0, [fp]
- add r0, r0, #1
- str r0, [sl, #12]
-_037FAC00:
- ldr r0, _037FAC2C ; =_03807948
- ldr sl, [r0]
- cmp sl, #0
- bne _037FAB10
-_037FAC10:
- add sp, sp, #4
- ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- bx lr
-_037FAC1C: .word 0x04000004
-_037FAC20: .word 0x0380FFF8
-_037FAC24: .word 0x04000006
-_037FAC28: .word _03807944
-_037FAC2C: .word _03807948
-
- arm_func_start OS_CancelVAlarms
-OS_CancelVAlarms: ; 0x037FAC30
- stmdb sp!, {r4, r5, r6, r7, lr}
- sub sp, sp, #4
- mov r7, r0
- bl OS_DisableInterrupts
- mov r5, r0
- cmp r7, #0
- bne _037FAC50
- bl FUN_037FB1F0
-_037FAC50:
- ldr r0, _037FACA8 ; =_03807948
- ldr r0, [r0]
- cmp r0, #0
- ldrne r6, [r0, #24]
- moveq r6, #0
- mov r4, #0
- b _037FAC8C
-_037FAC6C:
- ldr r1, [r0, #8]
- cmp r1, r7
- bne _037FAC7C
- bl OS_CancelVAlarm
-_037FAC7C:
- mov r0, r6
- cmp r6, #0
- ldrne r6, [r6, #24]
- moveq r6, r4
-_037FAC8C:
- cmp r0, #0
- bne _037FAC6C
- mov r0, r5
- bl OS_RestoreInterrupts
- add sp, sp, #4
- ldmia sp!, {r4, r5, r6, r7, lr}
- bx lr
-_037FACA8: .word _03807948
-
- arm_func_start OS_CancelVAlarm
-OS_CancelVAlarm: ; 0x037FACAC
- stmdb sp!, {r4, r5, lr}
- sub sp, sp, #4
- mov r5, r0
- bl OS_DisableInterrupts
- mov r4, r0
- mov r1, #1
- str r1, [r5, #36] ; 0x24
- ldr r1, [r5]
- cmp r1, #0
- bne _037FACDC
- bl OS_RestoreInterrupts
- b _037FACF4
-_037FACDC:
- mov r0, r5
- bl FUN_037FAECC
- mov r0, #0
- str r0, [r5]
- mov r0, r4
- bl OS_RestoreInterrupts
-_037FACF4:
- add sp, sp, #4
- ldmia sp!, {r4, r5, lr}
- bx lr
-
- arm_func_start OS_SetVAlarmTag
-OS_SetVAlarmTag: ; 0x037FAD00
- stmdb sp!, {r4, r5, lr}
- sub sp, sp, #4
- mov r5, r0
- movs r4, r1
- bne _037FAD18
- bl FUN_037FB1F0
-_037FAD18:
- cmp r5, #0
- strne r4, [r5, #8]
- add sp, sp, #4
- ldmia sp!, {r4, r5, lr}
- bx lr
-
- arm_func_start FUN_037FAD2C
-FUN_037FAD2C: ; 0x037FAD2C
- stmdb sp!, {r4, lr}
- mov r4, r0
- mov r0, #4
- ldr r1, _037FAD80 ; =FUN_037FAAA8
- bl OS_SetIrqFunction
- ldrsh ip, [r4, #16]
- and r3, ip, #256 ; 0x100
- ldr r1, _037FAD84 ; =0x04000004
- ldrh r0, [r1]
- and r2, r0, #63 ; 0x3f
- and r0, ip, #255 ; 0xff
- orr r0, r2, r0, lsl #8
- orr r0, r0, r3, asr #1
- strh r0, [r1]
- ldrh r0, [r1]
- orr r0, r0, #32
- strh r0, [r1]
- mov r0, #4
- bl OS_EnableIrqMask
- ldmia sp!, {r4, lr}
- bx lr
-_037FAD80: .word FUN_037FAAA8
-_037FAD84: .word 0x04000004
-
- arm_func_start OS_SetPeriodicVAlarm
-OS_SetPeriodicVAlarm: ; 0x037FAD88
- stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
- sub sp, sp, #4
- mov r8, r0
- mov r7, r1
- mov r6, r2
- mov r5, r3
- bl OS_DisableInterrupts
- mov r4, r0
- cmp r8, #0
- beq _037FADBC
- ldr r0, [r8]
- cmp r0, #0
- beq _037FADC0
-_037FADBC:
- bl FUN_037FB1F0
-_037FADC0:
- ldr r0, _037FAE1C ; =0x04000006
- ldrh r9, [r0]
- mov r0, r9
- bl FUN_037FAA0C
- mov r1, #1
- str r1, [r8, #28]
- strh r7, [r8, #16]
- cmp r7, r9
- addle r0, r0, #1
- str r0, [r8, #12]
- strh r6, [r8, #18]
- str r5, [r8]
- ldr r0, [sp, #32]
- str r0, [r8, #4]
- mov r0, #0
- str r0, [r8, #36] ; 0x24
- mov r0, r8
- bl FUN_037FAF48
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #4
- ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
- bx lr
-_037FAE1C: .word 0x04000006
-
- arm_func_start OS_SetVAlarm
-OS_SetVAlarm: ; 0x037FAE20
- stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
- sub sp, sp, #4
- mov r8, r0
- mov r7, r1
- mov r6, r2
- mov r5, r3
- bl OS_DisableInterrupts
- mov r4, r0
- cmp r8, #0
- beq _037FAE54
- ldr r0, [r8]
- cmp r0, #0
- beq _037FAE58
-_037FAE54:
- bl FUN_037FB1F0
-_037FAE58:
- ldr r0, _037FAEB4 ; =0x04000006
- ldrh r9, [r0]
- mov r0, r9
- bl FUN_037FAA0C
- mov r1, #0
- str r1, [r8, #28]
- strh r7, [r8, #16]
- cmp r7, r9
- addle r0, r0, #1
- str r0, [r8, #12]
- strh r6, [r8, #18]
- str r5, [r8]
- ldr r0, [sp, #32]
- str r0, [r8, #4]
- mov r0, #0
- str r0, [r8, #36] ; 0x24
- mov r0, r8
- bl FUN_037FAF48
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #4
- ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
- bx lr
-_037FAEB4: .word 0x04000006
-
- arm_func_start OS_CreateVAlarm
-OS_CreateVAlarm: ; 0x037FAEB8
- mov r1, #0
- str r1, [r0]
- str r1, [r0, #8]
- str r1, [r0, #32]
- bx lr
-
- arm_func_start FUN_037FAECC
-FUN_037FAECC: ; 0x037FAECC
- cmp r0, #0
- bxeq lr
- ldr r2, [r0, #20]
- ldr r1, [r0, #24]
- cmp r1, #0
- strne r2, [r1, #20]
- ldreq r0, _037FAF00 ; =_03807948
- streq r2, [r0, #4]
- cmp r2, #0
- strne r1, [r2, #24]
- ldreq r0, _037FAF00 ; =_03807948
- streq r1, [r0]
- bx lr
-_037FAF00: .word _03807948
-
- arm_func_start FUN_037FAF04
-FUN_037FAF04: ; 0x037FAF04
- stmfd sp!, {lr}
- sub sp, sp, #4
- ldr r1, _037FAF44 ; =_03807948
- ldr r3, [r1, #4]
- str r3, [r0, #20]
- mov r2, #0
- str r2, [r0, #24]
- str r0, [r1, #4]
- cmp r3, #0
- strne r0, [r3, #24]
- bne _037FAF38
- str r0, [r1]
- bl FUN_037FAD2C
-_037FAF38:
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_037FAF44: .word _03807948
-
- arm_func_start FUN_037FAF48
-FUN_037FAF48: ; 0x037FAF48
- stmfd sp!, {lr}
- sub sp, sp, #4
- ldr r1, _037FAFCC ; =_03807948
- ldr r3, [r1]
- b _037FAFB4
-_037FAF5C:
- ldr r2, [r0, #12]
- ldr r1, [r3, #12]
- cmp r1, r2
- bcc _037FAFB0
- cmp r1, r2
- bne _037FAF84
- ldrsh r2, [r3, #16]
- ldrsh r1, [r0, #16]
- cmp r2, r1
- ble _037FAFB0
-_037FAF84:
- ldr r1, [r3, #20]
- str r1, [r0, #20]
- str r3, [r0, #24]
- str r0, [r3, #20]
- cmp r1, #0
- strne r0, [r1, #24]
- bne _037FAFC0
- ldr r1, _037FAFCC ; =_03807948
- str r0, [r1]
- bl FUN_037FAD2C
- b _037FAFC0
-_037FAFB0:
- ldr r3, [r3, #24]
-_037FAFB4:
- cmp r3, #0
- bne _037FAF5C
- bl FUN_037FAF04
-_037FAFC0:
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_037FAFCC: .word _03807948
-
- arm_func_start OS_IsVAlarmAvailable
-OS_IsVAlarmAvailable: ; 0x037FAFD0
- ldr r0, _037FAFDC ; =_0380793C
- ldrh r0, [r0]
- bx lr
-_037FAFDC: .word _0380793C
-
- arm_func_start OS_InitVAlarm
-OS_InitVAlarm: ; 0x037FAFE0
- stmfd sp!, {lr}
- sub sp, sp, #4
- ldr r0, _037FB038 ; =_0380793C
- ldrh r1, [r0]
- cmp r1, #0
- bne _037FB02C
- mov r1, #1
- strh r1, [r0]
- mov r1, #0
- ldr r0, _037FB03C ; =_03807948
- str r1, [r0]
- str r1, [r0, #4]
- mov r0, #4
- bl OS_DisableIrqMask
- mov r1, #0
- ldr r0, _037FB040 ; =_03807944
- str r1, [r0]
- ldr r0, _037FB044 ; =_03807940
- str r1, [r0]
-_037FB02C:
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_037FB038: .word _0380793C
-_037FB03C: .word _03807948
-_037FB040: .word _03807944
-_037FB044: .word _03807940
-
- arm_func_start OS_EnableInterrupts
-OS_EnableInterrupts: ; 0x037FB048
- mrs r0, CPSR
- bic r1, r0, #128 ; 0x80
- msr CPSR_c, r1
- and r0, r0, #128 ; 0x80
- bx lr
-
- arm_func_start OS_DisableInterrupts
-OS_DisableInterrupts: ; 0x037FB05C
- mrs r0, CPSR
- orr r1, r0, #128 ; 0x80
- msr CPSR_c, r1
- and r0, r0, #128 ; 0x80
- bx lr
-
- arm_func_start OS_RestoreInterrupts
-OS_RestoreInterrupts: ; 0x037FB070
- mrs r1, CPSR
- bic r2, r1, #128 ; 0x80
- orr r2, r2, r0
- msr CPSR_c, r2
- and r0, r1, #128 ; 0x80
- bx lr
-
- arm_func_start OS_DisableInterrupts_IrqAndFiq
-OS_DisableInterrupts_IrqAndFiq: ; 0x037FB088
- mrs r0, CPSR
- orr r1, r0, #192 ; 0xc0
- msr CPSR_c, r1
- and r0, r0, #192 ; 0xc0
- bx lr
-
- arm_func_start OS_RestoreInterrupts_IrqAndFiq
-OS_RestoreInterrupts_IrqAndFiq: ; 0x037FB09C
- mrs r1, CPSR
- bic r2, r1, #192 ; 0xc0
- orr r2, r2, r0
- msr CPSR_c, r2
- and r0, r1, #192 ; 0xc0
- bx lr
-
- arm_func_start OS_GetProcMode
-OS_GetProcMode: ; 0x037FB0B4
- mrs r0, CPSR
- and r0, r0, #31
- bx lr
-
- arm_func_start OS_SpinWait
-OS_SpinWait: ; 0x037FB0C0
- stmfd sp!, {lr}
- sub sp, sp, #4
- mov r1, #4
- bl _s32_div_f
- bl FUN_037F8CB4
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-
arm_func_start OS_ResetSystem
OS_ResetSystem: ; 0x037FB0E0
stmfd sp!, {lr}
diff --git a/arm7/lib/include/OS_init.h b/arm7/lib/include/OS_init.h
index 5b3dfcc1..1416fe8c 100644
--- a/arm7/lib/include/OS_init.h
+++ b/arm7/lib/include/OS_init.h
@@ -1,6 +1,9 @@
-#ifndef POKEDIAMOND_OS_INIT_H
-#define POKEDIAMOND_OS_INIT_H
+#ifndef POKEDIAMOND_ARM7_OS_INIT_H
+#define POKEDIAMOND_ARM7_OS_INIT_H
+
+#include "types.h"
+#include "OS_system.h"
void OS_Init(void);
-#endif //POKEDIAMOND_OS_INIT_H
+#endif //POKEDIAMOND_ARM7_OS_INIT_H
diff --git a/arm7/lib/include/OS_system.h b/arm7/lib/include/OS_system.h
new file mode 100644
index 00000000..b6c81ab4
--- /dev/null
+++ b/arm7/lib/include/OS_system.h
@@ -0,0 +1,37 @@
+#ifndef POKEDIAMOND_ARM7_OS_SYSTEM_H
+#define POKEDIAMOND_ARM7_OS_SYSTEM_H
+
+#include "types.h"
+
+//todo consts.h
+#define HW_PSR_CPU_MODE_MASK 0x1f // CPU mode
+
+#define HW_PSR_DISABLE_FIQ 0x40 // Disable FIQ
+#define HW_PSR_DISABLE_IRQ 0x80 // Disable IRQ
+#define HW_PSR_DISABLE_IRQ_FIQ 0xc0 // Disable FIQ and IRQ
+
+typedef enum {
+ OS_PROCMODE_USER=16,
+ OS_PROCMODE_FIQ=17,
+ OS_PROCMODE_IRQ=18,
+ OS_PROCMODE_SVC=19,
+ OS_PROCMODE_ABORT=23,
+ OS_PROCMODE_UNDEF=27,
+ OS_PROCMODE_SYS=31
+} OSProcMode;
+
+typedef enum {
+ OS_INTRMODE_DISABLE_IRQ = HW_PSR_DISABLE_IRQ,
+ OS_INTRMODE_DISABLE_FIQ = HW_PSR_DISABLE_FIQ,
+ OS_INTRMODE_ENABLE = 0
+} OSIntrMode;
+
+OSIntrMode OS_EnableInterrupts(void);
+OSIntrMode OS_DisableInterrupts(void);
+OSIntrMode OS_RestoreInterrupts(register OSIntrMode state);
+OSIntrMode OS_DisableInterrupts_IrqAndFiq(void);
+OSIntrMode OS_RestoreInterrupts_IrqAndFiq(register OSIntrMode state);
+OSProcMode OS_GetProcMode(void);
+void OS_SpinWait(u32 cycle);
+
+#endif //POKEDIAMOND_ARM7_OS_SYSTEM_H
diff --git a/arm7/lib/include/types.h b/arm7/lib/include/types.h
new file mode 100644
index 00000000..3a497c56
--- /dev/null
+++ b/arm7/lib/include/types.h
@@ -0,0 +1,50 @@
+#ifndef POKEDIAMOND_ARM7_TYPES_H
+#define POKEDIAMOND_ARM7_TYPES_H
+
+typedef unsigned char u8;
+typedef unsigned short int u16;
+typedef unsigned long u32;
+
+typedef signed char s8;
+typedef signed short int s16;
+typedef signed long s32;
+
+typedef unsigned long long int u64;
+typedef signed long long int s64;
+
+typedef volatile u8 vu8;
+typedef volatile u16 vu16;
+typedef volatile u32 vu32;
+typedef volatile u64 vu64;
+
+typedef volatile s8 vs8;
+typedef volatile s16 vs16;
+typedef volatile s32 vs32;
+typedef volatile s64 vs64;
+
+typedef float f32;
+typedef volatile f32 vf32;
+
+typedef u8 REGType8;
+typedef u16 REGType16;
+typedef u32 REGType32;
+typedef u64 REGType64;
+
+typedef vu8 REGType8v;
+typedef vu16 REGType16v;
+typedef vu32 REGType32v;
+typedef vu64 REGType64v;
+
+typedef int BOOL;
+#define TRUE 1
+#define FALSE 0
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else // __cplusplus
+#define NULL ((void *)0)
+#endif // __cplusplus
+#endif
+
+#endif //POKEDIAMOND_NITRO_TYPES_H
diff --git a/arm7/lib/src/OS_system.c b/arm7/lib/src/OS_system.c
new file mode 100644
index 00000000..120eddbf
--- /dev/null
+++ b/arm7/lib/src/OS_system.c
@@ -0,0 +1,65 @@
+#include "function_target.h"
+#include "OS_system.h"
+
+#pragma optimize_for_size on
+
+extern void FUN_037F8CB4(s32 count);
+
+ARM_FUNC asm OSIntrMode OS_EnableInterrupts(void)
+{
+ 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(void)
+{
+ 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(register 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(void)
+{
+ 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(register 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 OSProcMode OS_GetProcMode(void)
+{
+ mrs r0, CPSR
+ and r0, r0, #HW_PSR_CPU_MODE_MASK
+ bx lr
+}
+
+ARM_FUNC void OS_SpinWait(u32 cycle)
+{
+ FUN_037F8CB4((s32)cycle / 4);
+}
diff --git a/arm9/lib/include/OS_init.h b/arm9/lib/include/OS_init.h
index 88c696cd..6792c900 100644
--- a/arm9/lib/include/OS_init.h
+++ b/arm9/lib/include/OS_init.h
@@ -1,9 +1,5 @@
-//
-// Created by mart on 4/12/20.
-//
-
-#ifndef POKEDIAMOND_OS_INIT_H
-#define POKEDIAMOND_OS_INIT_H
+#ifndef POKEDIAMOND_ARM9_OS_INIT_H
+#define POKEDIAMOND_ARM9_OS_INIT_H
#include "types.h"
#include "consts.h"
@@ -29,4 +25,4 @@
void OS_Init(void);
-#endif //POKEDIAMOND_OS_INIT_H
+#endif //POKEDIAMOND_ARM9_OS_INIT_H
diff --git a/arm9/lib/include/OS_system.h b/arm9/lib/include/OS_system.h
index c2b8572a..a5426c17 100644
--- a/arm9/lib/include/OS_system.h
+++ b/arm9/lib/include/OS_system.h
@@ -1,9 +1,5 @@
-//
-// Created by mart on 4/23/20.
-//
-
-#ifndef POKEDIAMOND_OS_SYSTEM_H
-#define POKEDIAMOND_OS_SYSTEM_H
+#ifndef POKEDIAMOND_ARM9_OS_SYSTEM_H
+#define POKEDIAMOND_ARM9_OS_SYSTEM_H
#include "function_target.h"
#include "consts.h"
@@ -36,4 +32,4 @@ OSProcMode OS_GetProcMode(void);
void OS_SpinWait(u32 cycles);
void OS_WaitVBlankIntr(void);
-#endif //POKEDIAMOND_OS_SYSTEM_H
+#endif //POKEDIAMOND_ARM9_OS_SYSTEM_H
diff --git a/arm9/lib/include/types.h b/arm9/lib/include/types.h
index 40f8207d..ca11e244 100644
--- a/arm9/lib/include/types.h
+++ b/arm9/lib/include/types.h
@@ -1,5 +1,5 @@
-#ifndef POKEDIAMOND_NITRO_TYPES_H
-#define POKEDIAMOND_NITRO_TYPES_H
+#ifndef POKEDIAMOND_ARM9_TYPES_H
+#define POKEDIAMOND_ARM9_TYPES_H
typedef unsigned char u8;
typedef unsigned short int u16;
@@ -47,4 +47,4 @@ typedef int BOOL;
#endif // __cplusplus
#endif
-#endif //POKEDIAMOND_NITRO_TYPES_H
+#endif //POKEDIAMOND_ARM9_TYPES_H