summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Calixte <remicalixte.rmc@gmail.com>2021-06-27 12:39:36 +0200
committerRémi Calixte <remicalixte.rmc@gmail.com>2021-06-27 12:39:36 +0200
commit9838c293c547d07bb96c1ad66e21e1c35bc1f56c (patch)
treea58fd6d6c9d9b10687c62800b0c21987f23f0455
parentc7b7cb66d44554ea4cd2873826deabbade5a52ae (diff)
parenteb0aacbbaf3876a597d26255a48def2cb43c1d2c (diff)
Merge branch 'master' into unk_020030E8
-rw-r--r--arm7/lib/include/SND_alarm.h12
-rw-r--r--arm7/lib/include/SND_exChannel.h8
-rw-r--r--arm7/lib/include/SND_work.h4
-rw-r--r--arm9/asm/scrcmd_10.s26
-rw-r--r--arm9/asm/unk_0201C6B4.s148
-rw-r--r--arm9/asm/unk_0202A1E0.s1053
-rw-r--r--arm9/asm/unk_020377F0.s4
-rw-r--r--arm9/asm/unk_02066840.s14
-rw-r--r--arm9/asm/unk_0208A338.s10
-rw-r--r--arm9/global.inc61
-rw-r--r--arm9/lib/include/CARD_rom.h1
-rw-r--r--arm9/lib/include/GX_g3x.h2
-rw-r--r--arm9/lib/include/MI_exMemory.h2
-rw-r--r--arm9/lib/include/OS_entropy.h3
-rw-r--r--arm9/lib/include/OS_interrupt.h2
-rw-r--r--arm9/lib/include/OS_irqHandler.h2
-rw-r--r--arm9/lib/include/OS_irqTable.h2
-rw-r--r--arm9/lib/include/OS_reset.h3
-rw-r--r--arm9/lib/include/PAD_pad.h2
-rw-r--r--arm9/lib/include/SND_alarm.h13
-rw-r--r--arm9/lib/include/SND_interface.h1
-rw-r--r--arm9/lib/include/SND_main.h163
-rw-r--r--arm9/lib/include/SND_work.h26
-rw-r--r--arm9/lib/include/consts.h3
-rw-r--r--arm9/lib/include/fx.h2
-rw-r--r--arm9/lib/include/systemWork.h1
-rw-r--r--arm9/lib/src/CARD_common.c1
-rw-r--r--arm9/lib/src/CARD_pullOut.c1
-rw-r--r--arm9/lib/src/CP_context.c2
-rw-r--r--arm9/lib/src/CTRDG_common.c1
-rw-r--r--arm9/lib/src/FX_cp.c4
-rw-r--r--arm9/lib/src/FX_vec.c4
-rw-r--r--arm9/lib/src/GX.c5
-rw-r--r--arm9/lib/src/MI_wram.c5
-rw-r--r--arm9/lib/src/OS_arena.c5
-rw-r--r--arm9/lib/src/OS_entropy.c7
-rw-r--r--arm9/lib/src/OS_exception.c4
-rw-r--r--arm9/lib/src/OS_interrupt.c6
-rw-r--r--arm9/lib/src/OS_ownerInfo.c4
-rw-r--r--arm9/lib/src/OS_reset.c3
-rw-r--r--arm9/lib/src/OS_spinLock.c3
-rw-r--r--arm9/lib/src/OS_thread.c3
-rw-r--r--arm9/lib/src/SND_command.c3
-rw-r--r--arm9/lib/src/custom_allocator.c4
-rw-r--r--arm9/modules/05/asm/mod05_021E1AD8.s4
-rw-r--r--arm9/modules/06/asm/module_06.s138
-rw-r--r--arm9/modules/21/src/mod21_02254A6C.c4
-rw-r--r--arm9/modules/54/asm/module_54.s2
-rw-r--r--arm9/modules/74/asm/module_74.s8
-rw-r--r--arm9/modules/82/asm/module_82.s10
-rw-r--r--arm9/src/bag_view.c5
-rw-r--r--arm9/src/save.c1
-rw-r--r--arm9/src/save_arrays.c5
-rw-r--r--arm9/src/timer3.c6
-rw-r--r--arm9/src/unk_0201C6B4.c80
-rw-r--r--arm9/src/unk_0202A1E0.c536
-rw-r--r--arm9/src/unk_0205FA2C.c97
-rw-r--r--include/global.h2
-rw-r--r--include/heap.h1
-rw-r--r--include/nitro/OS_alarm_shared.h1
-rw-r--r--include/nitro/OS_thread_shared.h3
-rw-r--r--include/nitro/SND_alarm_shared.h30
-rw-r--r--include/nitro/SND_main_shared.h176
-rw-r--r--include/nitro/SND_work_shared.h46
-rw-r--r--include/unk_0201C6B4.h10
-rw-r--r--include/unk_0202A1E0.h209
66 files changed, 1380 insertions, 1627 deletions
diff --git a/arm7/lib/include/SND_alarm.h b/arm7/lib/include/SND_alarm.h
new file mode 100644
index 00000000..195b90bb
--- /dev/null
+++ b/arm7/lib/include/SND_alarm.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_SND_ALARM_H
+#define GUARD_SND_ALARM_H
+
+#include "global.h"
+#include "SND_alarm_shared.h"
+
+void SND_StopAlarm(u32 idx);
+void SND_StartAlarm(u32 idx);
+void SND_SetupAlarm();
+void SND_AlarmInit();
+
+#endif //GUARD_SND_ALARM_H \ No newline at end of file
diff --git a/arm7/lib/include/SND_exChannel.h b/arm7/lib/include/SND_exChannel.h
new file mode 100644
index 00000000..05fbe3d7
--- /dev/null
+++ b/arm7/lib/include/SND_exChannel.h
@@ -0,0 +1,8 @@
+#ifndef GUARD_SND_EXCHANNEL_H
+#define GUARD_SND_EXCHANNEL_H
+
+#include "global.h"
+
+bool SND_IsChannelActive(u32 idx);
+
+#endif //GUARD_SND_EXCHANNEL_H \ No newline at end of file
diff --git a/arm7/lib/include/SND_work.h b/arm7/lib/include/SND_work.h
new file mode 100644
index 00000000..9b834c6c
--- /dev/null
+++ b/arm7/lib/include/SND_work.h
@@ -0,0 +1,4 @@
+#ifndef GUARD_SND_WORK_H
+#define GUARD_SND_WORK_H
+
+#endif //GUARD_SND_WORK_H \ No newline at end of file
diff --git a/arm9/asm/scrcmd_10.s b/arm9/asm/scrcmd_10.s
index e400a88b..87337ab8 100644
--- a/arm9/asm/scrcmd_10.s
+++ b/arm9/asm/scrcmd_10.s
@@ -243,12 +243,12 @@ _020424F6:
b _020426FA
_020424FC:
ldr r0, [r1, #0xc]
- bl FUN_0202A8CC
+ bl SaveStruct23_GetSubstruct1
bl MOD06_022433A8
b _020426FA
_02042508:
ldr r0, [r1, #0xc]
- bl FUN_0202A8CC
+ bl SaveStruct23_GetSubstruct1
bl MOD06_022433B0
strh r0, [r4, #0x0]
b _020426FA
@@ -717,7 +717,7 @@ ScrCmd_Unk01E3: ; 0x02042894
add r6, r0, #0x0
ldr r0, [r5, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_0202A8E4
+ bl SaveStruct23_GetSubstruct4
add r1, sp, #0x0
bl FUN_0202A864
add r0, sp, #0x0
@@ -743,8 +743,8 @@ ScrCmd_Unk01E4: ; 0x020428E0
add r4, r0, #0x0
ldr r0, [r5, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_0202A8E4
- bl FUN_0202A74C
+ bl SaveStruct23_GetSubstruct4
+ bl SaveStruct23_Substruct4_GetField_0xFF
strh r0, [r4, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
@@ -862,10 +862,10 @@ ScrCmd_Unk0297: ; 0x020429B8
bl GetVarPointer
add r5, r0, #0x0
add r0, r4, #0x0
- bl FUN_0202A8D8
+ bl SaveStruct23_GetSubstruct2
mov r1, #0x0
add r2, r1, #0x0
- bl FUN_0202A3B4
+ bl SaveStruct23_Substruct2_SetField_0x0
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
@@ -885,10 +885,10 @@ ScrCmd_Unk0298: ; 0x020429E8
bl VarGet
add r5, r0, #0x0
add r0, r4, #0x0
- bl FUN_0202A8D8
+ bl SaveStruct23_GetSubstruct2
add r1, r5, #0x0
mov r2, #0x5
- bl FUN_0202A3B4
+ bl SaveStruct23_Substruct2_SetField_0x0
mov r0, #0x0
pop {r3-r5, pc}
.balign 4
@@ -908,10 +908,10 @@ ScrCmd_Unk0299: ; 0x02042A18
bl VarGet
add r5, r0, #0x0
add r0, r4, #0x0
- bl FUN_0202A8D8
+ bl SaveStruct23_GetSubstruct2
add r1, r5, #0x0
mov r2, #0x6
- bl FUN_0202A3B4
+ bl SaveStruct23_Substruct2_SetField_0x0
mov r0, #0x0
pop {r3-r5, pc}
.balign 4
@@ -939,10 +939,10 @@ ScrCmd_Unk029A: ; 0x02042A48
bl GetVarPointer
add r4, r0, #0x0
add r0, r5, #0x0
- bl FUN_0202A8D8
+ bl SaveStruct23_GetSubstruct2
mov r1, #0x0
add r2, r1, #0x0
- bl FUN_0202A3B4
+ bl SaveStruct23_Substruct2_SetField_0x0
cmp r0, r6
bhs _02042A8E
mov r0, #0x0
diff --git a/arm9/asm/unk_0201C6B4.s b/arm9/asm/unk_0201C6B4.s
deleted file mode 100644
index 6ee6910b..00000000
--- a/arm9/asm/unk_0201C6B4.s
+++ /dev/null
@@ -1,148 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- thumb_func_start FUN_0201C6B4
-FUN_0201C6B4: ; 0x0201C6B4
- mov r2, #0x0
- ldrsb r1, [r0, r2]
- cmp r1, #0x0
- beq _0201C6C4
-_0201C6BC:
- add r2, r2, #0x1
- ldrsb r1, [r0, r2]
- cmp r1, #0x0
- bne _0201C6BC
-_0201C6C4:
- add r0, r2, #0x0
- bx lr
-
- thumb_func_start FUN_0201C6C8
-FUN_0201C6C8: ; 0x0201C6C8
- push {r4-r5}
- mov r4, #0x1
- mov r3, #0x0
- lsl r4, r4, #0x8
-_0201C6D0:
- ldrsb r5, [r0, r3]
- strb r5, [r1, r3]
- ldrsb r5, [r0, r3]
- cmp r2, r5
- beq _0201C6DE
- cmp r5, #0x0
- bne _0201C6FE
-_0201C6DE:
- mov r4, #0x0
- strb r4, [r1, r3]
- cmp r2, #0xd
- bne _0201C6F6
- add r1, r3, #0x1
- ldrsb r1, [r0, r1]
- cmp r1, #0xa
- bne _0201C6F6
- add r1, r3, #0x2
- add r0, r0, r1
- pop {r4-r5}
- bx lr
-_0201C6F6:
- add r1, r3, #0x1
- add r0, r0, r1
- pop {r4-r5}
- bx lr
-_0201C6FE:
- add r3, r3, #0x1
- cmp r3, r4
- blt _0201C6D0
- mov r0, #0x0
- pop {r4-r5}
- bx lr
- .balign 4
-
- thumb_func_start FUN_0201C70C
-FUN_0201C70C: ; 0x0201C70C
- push {r4-r6, lr}
- add r4, r0, #0x0
- bl FUN_0201C6B4
- mov r5, #0x1
- mov r6, #0x0
- sub r3, r0, #0x1
- bmi _0201C74A
- sub r1, r6, #0x1
- mov r0, #0xa
-_0201C720:
- ldrsb r2, [r4, r3]
- cmp r2, #0x30
- blt _0201C732
- cmp r2, #0x39
- bgt _0201C732
- sub r2, #0x30
- mul r2, r5
- add r6, r6, r2
- b _0201C744
-_0201C732:
- cmp r3, #0x0
- bne _0201C73E
- cmp r2, #0x2d
- bne _0201C744
- mul r6, r1
- b _0201C744
-_0201C73E:
- mov r0, #0x0
- mvn r0, r0
- pop {r4-r6, pc}
-_0201C744:
- mul r5, r0
- sub r3, r3, #0x1
- bpl _0201C720
-_0201C74A:
- add r0, r6, #0x0
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_0201C750
-FUN_0201C750: ; 0x0201C750
- push {r3-r5, lr}
- mov r2, #0x0
- add r4, r1, #0x0
- add r5, r0, #0x0
- add r1, r2, #0x0
-_0201C75A:
- lsl r0, r2, #0x2
- str r1, [r5, r0]
- add r0, r2, #0x1
- lsl r0, r0, #0x18
- lsr r2, r0, #0x18
- cmp r2, #0x4
- blo _0201C75A
- add r0, r4, #0x0
- bl FUN_0201C6B4
- lsl r0, r0, #0x18
- lsr r1, r0, #0x18
- ldr r2, _0201C788 ; =0x00000000
- beq _0201C784
-_0201C776:
- ldrsb r0, [r4, r2]
- strb r0, [r5, r2]
- add r0, r2, #0x1
- lsl r0, r0, #0x18
- lsr r2, r0, #0x18
- cmp r2, r1
- blo _0201C776
-_0201C784:
- pop {r3-r5, pc}
- nop
-_0201C788: .word 0x00000000
-
- thumb_func_start FUN_0201C78C
-FUN_0201C78C: ; 0x0201C78C
- ldr r1, _0201C79C ; =0x00000121
- cmp r0, r1
- bhs _0201C796
- mov r0, #0x1
- bx lr
-_0201C796:
- mov r0, #0x0
- bx lr
- nop
-_0201C79C: .word 0x00000121
diff --git a/arm9/asm/unk_0202A1E0.s b/arm9/asm/unk_0202A1E0.s
deleted file mode 100644
index d3555bd5..00000000
--- a/arm9/asm/unk_0202A1E0.s
+++ /dev/null
@@ -1,1053 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- thumb_func_start FUN_0202A1E0
-FUN_0202A1E0: ; 0x0202A1E0
- mov r0, #0xe4
- bx lr
-
- thumb_func_start FUN_0202A1E4
-FUN_0202A1E4: ; 0x0202A1E4
- ldr r3, _0202A1EC ; =MI_CpuFill8
- mov r1, #0x0
- mov r2, #0x3c
- bx r3
- .balign 4
-_0202A1EC: .word MI_CpuFill8
-
- thumb_func_start FUN_0202A1F0
-FUN_0202A1F0: ; 0x0202A1F0
- push {r4, lr}
- mov r2, #0x5a
- mov r1, #0x0
- lsl r2, r2, #0x2
- add r4, r0, #0x0
- bl MI_CpuFill8
- mov r0, #0x1
- strb r0, [r4, #0x3]
- pop {r4, pc}
-
- thumb_func_start FUN_0202A204
-FUN_0202A204: ; 0x0202A204
- push {r4, lr}
- add r4, r0, #0x0
- mov r1, #0x0
- bl MailMsg_init_fromTemplate
- add r0, r4, #0x0
- add r0, #0x8
- mov r1, #0x1
- bl MailMsg_init_fromTemplate
- add r0, r4, #0x0
- add r0, #0x10
- mov r1, #0x2
- bl MailMsg_init_fromTemplate
- add r4, #0x18
- add r0, r4, #0x0
- mov r1, #0x3
- bl MailMsg_init_fromTemplate
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_0202A230
-FUN_0202A230: ; 0x0202A230
- ldr r3, _0202A238 ; =MI_CpuFill8
- mov r1, #0x0
- ldr r2, _0202A23C ; =0x00000B3C
- bx r3
- .balign 4
-_0202A238: .word MI_CpuFill8
-_0202A23C: .word 0x00000B3C
-
- thumb_func_start FUN_0202A240
-FUN_0202A240: ; 0x0202A240
- push {r3, lr}
- cmp r1, #0xa
- bhi _0202A2BE
- add r1, r1, r1
- add r1, pc
- ldrh r1, [r1, #0x6]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add pc, r1
-_0202A252: ; jump table (using 16-bit offset)
- .short _0202A268 - _0202A252 - 2; case 0
- .short _0202A270 - _0202A252 - 2; case 1
- .short _0202A274 - _0202A252 - 2; case 2
- .short _0202A278 - _0202A252 - 2; case 3
- .short _0202A27C - _0202A252 - 2; case 4
- .short _0202A280 - _0202A252 - 2; case 5
- .short _0202A28E - _0202A252 - 2; case 6
- .short _0202A29C - _0202A252 - 2; case 7
- .short _0202A2A4 - _0202A252 - 2; case 8
- .short _0202A2B2 - _0202A252 - 2; case 9
- .short _0202A2BA - _0202A252 - 2; case 10
-_0202A268:
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x1d
- pop {r3, pc}
-_0202A270:
- ldrb r0, [r0, #0x2]
- pop {r3, pc}
-_0202A274:
- ldrb r0, [r0, #0x3]
- pop {r3, pc}
-_0202A278:
- ldrh r0, [r0, #0x4]
- pop {r3, pc}
-_0202A27C:
- ldrh r0, [r0, #0x6]
- pop {r3, pc}
-_0202A280:
- add r1, r2, #0x0
- add r0, #0x8
- mov r2, #0x4
- bl MI_CpuCopy8
- mov r0, #0x0
- pop {r3, pc}
-_0202A28E:
- add r1, r2, #0x0
- add r0, #0x2c
- mov r2, #0x10
- bl MI_CpuCopy8
- mov r0, #0x0
- pop {r3, pc}
-_0202A29C:
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x1f
- pop {r3, pc}
-_0202A2A4:
- add r1, r2, #0x0
- add r0, #0xc
- mov r2, #0x1c
- bl MI_CpuCopy8
- mov r0, #0x0
- pop {r3, pc}
-_0202A2B2:
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x18
- lsr r0, r0, #0x1d
- pop {r3, pc}
-_0202A2BA:
- ldr r0, [r0, #0x28]
- pop {r3, pc}
-_0202A2BE:
- mov r0, #0x0
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_0202A2C4
-FUN_0202A2C4: ; 0x0202A2C4
- push {r4, lr}
- add r3, r0, #0x0
- cmp r1, #0xa
- bhi _0202A36A
- add r0, r1, r1
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_0202A2D8: ; jump table (using 16-bit offset)
- .short _0202A2EE - _0202A2D8 - 2; case 0
- .short _0202A300 - _0202A2D8 - 2; case 1
- .short _0202A306 - _0202A2D8 - 2; case 2
- .short _0202A30C - _0202A2D8 - 2; case 3
- .short _0202A312 - _0202A2D8 - 2; case 4
- .short _0202A318 - _0202A2D8 - 2; case 5
- .short _0202A326 - _0202A2D8 - 2; case 6
- .short _0202A334 - _0202A2D8 - 2; case 7
- .short _0202A346 - _0202A2D8 - 2; case 8
- .short _0202A35A - _0202A2D8 - 2; case 9
- .short _0202A354 - _0202A2D8 - 2; case 10
-_0202A2EE:
- ldrb r1, [r3, #0x0]
- mov r0, #0x1c
- bic r1, r0
- ldrb r0, [r2, #0x0]
- lsl r0, r0, #0x1d
- lsr r0, r0, #0x1b
- orr r0, r1
- strb r0, [r3, #0x0]
- pop {r4, pc}
-_0202A300:
- ldrb r0, [r2, #0x0]
- strb r0, [r3, #0x2]
- pop {r4, pc}
-_0202A306:
- ldrb r0, [r2, #0x0]
- strb r0, [r3, #0x3]
- pop {r4, pc}
-_0202A30C:
- ldrh r0, [r2, #0x0]
- strh r0, [r3, #0x4]
- pop {r4, pc}
-_0202A312:
- ldrh r0, [r2, #0x0]
- strh r0, [r3, #0x6]
- pop {r4, pc}
-_0202A318:
- add r3, #0x8
- add r0, r2, #0x0
- add r1, r3, #0x0
- mov r2, #0x4
- bl MI_CpuCopy8
- pop {r4, pc}
-_0202A326:
- add r3, #0x2c
- add r0, r2, #0x0
- add r1, r3, #0x0
- mov r2, #0x10
- bl MI_CpuCopy8
- pop {r4, pc}
-_0202A334:
- ldrb r4, [r3, #0x0]
- ldrb r1, [r2, #0x0]
- mov r0, #0x1
- bic r4, r0
- mov r0, #0x1
- and r0, r1
- orr r0, r4
- strb r0, [r3, #0x0]
- pop {r4, pc}
-_0202A346:
- add r3, #0xc
- add r0, r2, #0x0
- add r1, r3, #0x0
- mov r2, #0x1c
- bl MI_CpuCopy8
- pop {r4, pc}
-_0202A354:
- ldr r0, [r2, #0x0]
- str r0, [r3, #0x28]
- pop {r4, pc}
-_0202A35A:
- ldrb r1, [r3, #0x0]
- mov r0, #0xe0
- bic r1, r0
- ldrb r0, [r2, #0x0]
- lsl r0, r0, #0x1d
- lsr r0, r0, #0x18
- orr r0, r1
- strb r0, [r3, #0x0]
-_0202A36A:
- pop {r4, pc}
-
- thumb_func_start FUN_0202A36C
-FUN_0202A36C: ; 0x0202A36C
- push {r3-r4}
- ldrb r4, [r0, #0x3]
- add r1, r4, r1
- cmp r1, #0xff
- bge _0202A378
- strb r1, [r0, #0x3]
-_0202A378:
- ldrh r1, [r0, #0x4]
- add r2, r1, r2
- ldr r1, _0202A394 ; =0x0000FFFF
- cmp r2, r1
- bge _0202A384
- strh r2, [r0, #0x4]
-_0202A384:
- ldrh r1, [r0, #0x6]
- add r2, r1, r3
- ldr r1, _0202A394 ; =0x0000FFFF
- cmp r2, r1
- bge _0202A390
- strh r2, [r0, #0x6]
-_0202A390:
- pop {r3-r4}
- bx lr
- .balign 4
-_0202A394: .word 0x0000FFFF
-
- thumb_func_start FUN_0202A398
-FUN_0202A398: ; 0x0202A398
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x1e
- lsr r0, r0, #0x1f
- bx lr
-
- thumb_func_start FUN_0202A3A0
-FUN_0202A3A0: ; 0x0202A3A0
- lsl r1, r1, #0x18
- lsr r1, r1, #0x18
- lsl r1, r1, #0x1f
- ldrb r3, [r0, #0x0]
- mov r2, #0x2
- lsr r1, r1, #0x1e
- bic r3, r2
- orr r1, r3
- strb r1, [r0, #0x0]
- bx lr
-
- thumb_func_start FUN_0202A3B4
-FUN_0202A3B4: ; 0x0202A3B4
- cmp r2, #0x6
- bhi _0202A402
- add r2, r2, r2
- add r2, pc
- ldrh r2, [r2, #0x6]
- lsl r2, r2, #0x10
- asr r2, r2, #0x10
- add pc, r2
-_0202A3C4: ; jump table (using 16-bit offset)
- .short _0202A402 - _0202A3C4 - 2; case 0
- .short _0202A3D2 - _0202A3C4 - 2; case 1
- .short _0202A402 - _0202A3C4 - 2; case 2
- .short _0202A402 - _0202A3C4 - 2; case 3
- .short _0202A402 - _0202A3C4 - 2; case 4
- .short _0202A3E0 - _0202A3C4 - 2; case 5
- .short _0202A3F2 - _0202A3C4 - 2; case 6
-_0202A3D2:
- ldr r2, _0202A408 ; =0x0000270F
- cmp r1, r2
- bls _0202A3DC
- strh r2, [r0, #0x0]
- b _0202A402
-_0202A3DC:
- strh r1, [r0, #0x0]
- b _0202A402
-_0202A3E0:
- ldrh r2, [r0, #0x0]
- add r2, r2, r1
- ldr r1, _0202A408 ; =0x0000270F
- cmp r2, r1
- ble _0202A3EE
- strh r1, [r0, #0x0]
- b _0202A402
-_0202A3EE:
- strh r2, [r0, #0x0]
- b _0202A402
-_0202A3F2:
- ldrh r2, [r0, #0x0]
- cmp r2, r1
- bhs _0202A3FE
- mov r1, #0x0
- strh r1, [r0, #0x0]
- b _0202A402
-_0202A3FE:
- sub r1, r2, r1
- strh r1, [r0, #0x0]
-_0202A402:
- ldrh r0, [r0, #0x0]
- bx lr
- nop
-_0202A408: .word 0x0000270F
-
- thumb_func_start FUN_0202A40C
-FUN_0202A40C: ; 0x0202A40C
- cmp r1, #0x2
- beq _0202A416
- cmp r1, #0x3
- beq _0202A424
- b _0202A440
-_0202A416:
- mov r1, #0x0
- strb r1, [r0, #0x2]
- ldrh r2, [r0, #0x8]
- mov r1, #0x10
- bic r2, r1
- strh r2, [r0, #0x8]
- b _0202A440
-_0202A424:
- ldrh r1, [r0, #0x8]
- lsl r1, r1, #0x1b
- lsr r1, r1, #0x1f
- beq _0202A434
- ldrb r1, [r0, #0x2]
- add r1, r1, #0x1
- strb r1, [r0, #0x2]
- b _0202A440
-_0202A434:
- mov r1, #0x1
- strb r1, [r0, #0x2]
- ldrh r2, [r0, #0x8]
- mov r1, #0x10
- orr r1, r2
- strh r1, [r0, #0x8]
-_0202A440:
- ldrb r0, [r0, #0x2]
- bx lr
-
- thumb_func_start FUN_0202A444
-FUN_0202A444: ; 0x0202A444
- cmp r1, #0x2
- beq _0202A452
- cmp r1, #0x3
- beq _0202A458
- cmp r1, #0x4
- beq _0202A464
- b _0202A46E
-_0202A452:
- mov r1, #0x1
- strb r1, [r0, #0x3]
- b _0202A46E
-_0202A458:
- ldrb r1, [r0, #0x3]
- cmp r1, #0xa
- bhs _0202A46E
- add r1, r1, #0x1
- strb r1, [r0, #0x3]
- b _0202A46E
-_0202A464:
- ldrb r1, [r0, #0x3]
- cmp r1, #0x1
- bls _0202A46E
- sub r1, r1, #0x1
- strb r1, [r0, #0x3]
-_0202A46E:
- ldrb r0, [r0, #0x3]
- bx lr
- .balign 4
-
- thumb_func_start FUN_0202A474
-FUN_0202A474: ; 0x0202A474
- push {r3, lr}
- add r3, r0, #0x0
- cmp r1, #0x0
- bne _0202A48A
- add r3, #0xc0
- add r0, r2, #0x0
- add r1, r3, #0x0
- mov r2, #0xa8
- bl MI_CpuCopy8
- pop {r3, pc}
-_0202A48A:
- add r3, #0x18
- add r0, r2, #0x0
- add r1, r3, #0x0
- mov r2, #0xa8
- bl MI_CpuCopy8
- pop {r3, pc}
-
- thumb_func_start FUN_0202A498
-FUN_0202A498: ; 0x0202A498
- push {r3, lr}
- cmp r1, #0x0
- bne _0202A4AA
- add r1, r2, #0x0
- add r0, #0xc0
- mov r2, #0xa8
- bl MI_CpuCopy8
- pop {r3, pc}
-_0202A4AA:
- add r1, r2, #0x0
- add r0, #0x18
- mov r2, #0xa8
- bl MI_CpuCopy8
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_0202A4B8
-FUN_0202A4B8: ; 0x0202A4B8
- push {r4-r6, lr}
- add r6, r0, #0x0
- ldrb r0, [r1, #0x2]
- mov r2, #0xfa
- lsl r2, r2, #0x2
- sub r0, r0, #0x1
- add r3, r0, #0x0
- mul r3, r2
- lsl r0, r3, #0x10
- lsr r4, r0, #0x10
- ldrh r3, [r1, #0x4]
- mov r0, #0xa
- ldrb r5, [r1, #0x3]
- mul r0, r3
- mov r3, #0x14
- mul r3, r5
- lsl r0, r0, #0x10
- lsl r3, r3, #0x10
- lsr r0, r0, #0x10
- lsr r3, r3, #0x10
- add r3, r0, r3
- add r0, r2, #0x0
- sub r0, #0x32
- cmp r3, r0
- ble _0202A4EE
- mov r5, #0x0
- b _0202A4F6
-_0202A4EE:
- sub r2, #0x32
- sub r0, r2, r3
- lsl r0, r0, #0x10
- lsr r5, r0, #0x10
-_0202A4F6:
- ldrh r1, [r1, #0x6]
- ldr r0, _0202A51C ; =0x000003CA
- cmp r1, r0
- bls _0202A502
- mov r1, #0x0
- b _0202A510
-_0202A502:
- add r0, #0x1e
- sub r0, r0, r1
- mov r1, #0x1e
- bl _s32_div_f
- lsl r0, r0, #0x10
- lsr r1, r0, #0x10
-_0202A510:
- add r0, r4, r5
- add r0, r1, r0
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- strh r0, [r6, #0x16]
- pop {r4-r6, pc}
- .balign 4
-_0202A51C: .word 0x000003CA
-
- thumb_func_start FUN_0202A520
-FUN_0202A520: ; 0x0202A520
- ldrh r0, [r0, #0x16]
- bx lr
-
- thumb_func_start FUN_0202A524
-FUN_0202A524: ; 0x0202A524
- push {r3, lr}
- ldrh r0, [r0, #0x16]
- mov r1, #0xfa
- lsl r1, r1, #0x2
- bl _s32_div_f
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_0202A538
-FUN_0202A538: ; 0x0202A538
- push {r4-r5}
- cmp r1, #0x5
- bne _0202A544
- mov r0, #0x0
- pop {r4-r5}
- bx lr
-_0202A544:
- cmp r2, #0x2
- beq _0202A54E
- cmp r2, #0x3
- beq _0202A558
- b _0202A56A
-_0202A54E:
- lsl r2, r1, #0x1
- mov r3, #0x0
- add r2, r0, r2
- strh r3, [r2, #0xc]
- b _0202A56A
-_0202A558:
- add r5, r0, #0x0
- add r5, #0xc
- lsl r4, r1, #0x1
- ldrh r3, [r5, r4]
- ldr r2, _0202A574 ; =0x0000FFFE
- cmp r3, r2
- bhs _0202A56A
- add r2, r3, #0x1
- strh r2, [r5, r4]
-_0202A56A:
- lsl r1, r1, #0x1
- add r0, r0, r1
- ldrh r0, [r0, #0xc]
- pop {r4-r5}
- bx lr
- .balign 4
-_0202A574: .word 0x0000FFFE
-
- thumb_func_start FUN_0202A578
-FUN_0202A578: ; 0x0202A578
- push {r3-r4}
- mov r3, #0x1
- mov r4, #0x0
- cmp r1, #0x0
- bls _0202A590
-_0202A582:
- add r4, r4, #0x1
- lsl r4, r4, #0x10
- lsl r3, r3, #0x11
- lsr r4, r4, #0x10
- lsr r3, r3, #0x10
- cmp r4, r1
- blo _0202A582
-_0202A590:
- cmp r2, #0x0
- beq _0202A5B4
- cmp r2, #0x1
- beq _0202A5AC
- cmp r2, #0x2
- bne _0202A5C2
- ldr r1, _0202A5C8 ; =0x0000FFFF
- eor r1, r3
- lsl r1, r1, #0x10
- lsr r2, r1, #0x10
- ldrh r1, [r0, #0x8]
- and r1, r2
- strh r1, [r0, #0x8]
- b _0202A5C2
-_0202A5AC:
- ldrh r1, [r0, #0x8]
- orr r1, r3
- strh r1, [r0, #0x8]
- b _0202A5C2
-_0202A5B4:
- ldrh r0, [r0, #0x8]
- add r2, r0, #0x0
- asr r2, r1
- mov r0, #0x1
- and r0, r2
- pop {r3-r4}
- bx lr
-_0202A5C2:
- mov r0, #0x0
- pop {r3-r4}
- bx lr
- .balign 4
-_0202A5C8: .word 0x0000FFFF
-
- thumb_func_start FUN_0202A5CC
-FUN_0202A5CC: ; 0x0202A5CC
- str r1, [r0, #0x4]
- bx lr
-
- thumb_func_start FUN_0202A5D0
-FUN_0202A5D0: ; 0x0202A5D0
- ldr r0, [r0, #0x4]
- bx lr
-
- thumb_func_start FUN_0202A5D4
-FUN_0202A5D4: ; 0x0202A5D4
- push {r3-r5, lr}
- add r5, r1, #0x0
- mov r1, #0x17
- add r4, r2, #0x0
- bl SavArray_get
- mov r1, #0x69
- lsl r1, r1, #0x2
- add r1, r0, r1
- lsl r0, r5, #0x3
- add r0, r1, r0
- add r1, r4, #0x0
- bl MailMsg_copy
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_0202A5F4
-FUN_0202A5F4: ; 0x0202A5F4
- push {r4, lr}
- add r4, r1, #0x0
- mov r1, #0x17
- bl SavArray_get
- mov r1, #0x69
- lsl r1, r1, #0x2
- add r1, r0, r1
- lsl r0, r4, #0x3
- add r0, r1, r0
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_0202A60C
-FUN_0202A60C: ; 0x0202A60C
- push {r3-r6}
- add r4, r3, #0x0
- mov r3, #0x1
- cmp r2, #0x0
- beq _0202A66C
- cmp r2, #0xc8
- bhi _0202A66C
- cmp r1, #0x0
- beq _0202A66C
- cmp r1, #0xa
- bhi _0202A66C
- sub r5, r2, #0x1
- sub r2, r1, #0x1
- mov r1, #0xc8
- mul r1, r2
- add r1, r5, r1
- lsl r1, r1, #0x10
- lsr r1, r1, #0x10
- lsr r6, r1, #0x1f
- lsl r5, r1, #0x1d
- sub r5, r5, r6
- mov r2, #0x1d
- ror r5, r2
- add r2, r6, r5
- lsl r2, r2, #0x18
- lsr r2, r2, #0x18
- lsl r3, r2
- lsl r2, r3, #0x18
- lsl r1, r1, #0x15
- lsr r5, r2, #0x18
- add r3, r0, #0x4
- lsr r2, r1, #0x18
- ldrb r1, [r3, r2]
- orr r1, r5
- strb r1, [r3, r2]
- ldr r3, [r4, #0x0]
- ldr r1, [r4, #0x8]
- lsl r5, r3, #0x18
- ldr r3, [r4, #0x4]
- lsl r1, r1, #0x18
- lsl r3, r3, #0x18
- lsr r3, r3, #0x8
- ldr r2, [r4, #0xc]
- lsr r1, r1, #0x10
- orr r3, r5
- orr r1, r3
- orr r1, r2
- str r1, [r0, #0x0]
-_0202A66C:
- pop {r3-r6}
- bx lr
-
- thumb_func_start FUN_0202A670
-FUN_0202A670: ; 0x0202A670
- push {r4, lr}
- add r4, r0, #0x0
- add r0, r4, #0x4
- mov r1, #0x0
- mov r2, #0xfa
- bl MI_CpuFill8
- add r0, r4, #0x0
- mov r1, #0x0
- mov r2, #0x4
- bl MI_CpuFill8
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_0202A68C
-FUN_0202A68C: ; 0x0202A68C
- ldr r3, [r0, #0x0]
- ldr r2, [r1, #0x0]
- cmp r3, r2
- bls _0202A698
- mov r0, #0x1
- bx lr
-_0202A698:
- ldr r3, [r0, #0x4]
- ldr r2, [r1, #0x4]
- cmp r3, r2
- bls _0202A6A4
- mov r0, #0x1
- bx lr
-_0202A6A4:
- ldr r2, [r0, #0x8]
- ldr r0, [r1, #0x8]
- cmp r2, r0
- bls _0202A6B0
- mov r0, #0x1
- bx lr
-_0202A6B0:
- mov r0, #0x0
- bx lr
-
- thumb_func_start FUN_0202A6B4
-FUN_0202A6B4: ; 0x0202A6B4
- push {r3-r7, lr}
- sub sp, #0x10
- add r6, r2, #0x0
- add r5, r0, #0x0
- add r4, r1, #0x0
- mov r7, #0x1
- cmp r6, #0xc8
- bhi _0202A6C8
- cmp r4, #0xa
- bls _0202A6CE
-_0202A6C8:
- add sp, #0x10
- mov r0, #0x0
- pop {r3-r7, pc}
-_0202A6CE:
- ldr r0, [r5, #0x0]
- lsr r1, r0, #0x18
- lsl r1, r1, #0x18
- lsr r1, r1, #0x18
- str r1, [sp, #0x0]
- lsr r1, r0, #0x10
- lsl r1, r1, #0x18
- lsr r1, r1, #0x18
- str r1, [sp, #0x4]
- lsr r1, r0, #0x8
- lsl r1, r1, #0x18
- lsl r0, r0, #0x18
- lsr r1, r1, #0x18
- lsr r0, r0, #0x18
- str r1, [sp, #0x8]
- str r0, [sp, #0xc]
- add r0, r3, #0x0
- add r1, sp, #0x0
- bl FUN_0202A68C
- cmp r0, #0x0
- beq _0202A706
- add r0, r5, #0x0
- bl FUN_0202A670
- add sp, #0x10
- mov r0, #0x0
- pop {r3-r7, pc}
-_0202A706:
- sub r1, r4, #0x1
- mov r0, #0xc8
- mul r0, r1
- sub r2, r6, #0x1
- add r0, r2, r0
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- lsr r3, r0, #0x1f
- lsl r2, r0, #0x1d
- lsl r0, r0, #0x15
- lsr r0, r0, #0x18
- add r0, r5, r0
- sub r2, r2, r3
- mov r1, #0x1d
- ror r2, r1
- add r1, r3, r2
- lsl r1, r1, #0x18
- lsr r1, r1, #0x18
- add r2, r7, #0x0
- lsl r2, r1
- lsl r1, r2, #0x18
- ldrb r0, [r0, #0x4]
- lsr r1, r1, #0x18
- tst r0, r1
- beq _0202A73E
- add sp, #0x10
- add r0, r7, #0x0
- pop {r3-r7, pc}
-_0202A73E:
- mov r0, #0x0
- add sp, #0x10
- pop {r3-r7, pc}
-
- thumb_func_start FUN_0202A744
-FUN_0202A744: ; 0x0202A744
- add r0, #0xfe
- ldrb r0, [r0, #0x0]
- bx lr
- .balign 4
-
- thumb_func_start FUN_0202A74C
-FUN_0202A74C: ; 0x0202A74C
- add r0, #0xff
- ldrb r0, [r0, #0x0]
- bx lr
- .balign 4
-
- thumb_func_start FUN_0202A754
-FUN_0202A754: ; 0x0202A754
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r0, r1, #0x0
- mov r1, #0x41
- add r4, r2, #0x0
- lsl r1, r1, #0x2
- ldr r2, _0202A77C ; =0x0000063C
- add r1, r5, r1
- add r6, r3, #0x0
- bl MI_CpuCopy8
- ldr r0, _0202A780 ; =0x00000101
- strb r4, [r5, r0]
- sub r0, r0, #0x1
- strb r6, [r5, r0]
- mov r0, #0x1
- add r5, #0xfe
- strb r0, [r5, #0x0]
- pop {r4-r6, pc}
- nop
-_0202A77C: .word 0x0000063C
-_0202A780: .word 0x00000101
-
- thumb_func_start FUN_0202A784
-FUN_0202A784: ; 0x0202A784
- ldr r2, _0202A794 ; =0x00000101
- ldrb r3, [r0, r2]
- sub r2, r2, #0x1
- strb r3, [r1, #0x0]
- ldrb r0, [r0, r2]
- strb r0, [r1, #0x1]
- bx lr
- nop
-_0202A794: .word 0x00000101
-
- thumb_func_start FUN_0202A798
-FUN_0202A798: ; 0x0202A798
- push {r3-r7, lr}
- add r6, r1, #0x0
- mov r1, #0x41
- lsl r1, r1, #0x2
- add r5, r0, r1
- mov r0, #0xe4
- add r4, r2, #0x0
- mul r4, r0
- ldr r0, _0202A834 ; =0x00002710
- add r7, r6, #0x0
- str r0, [r6, #0x0]
- add r0, r5, r4
- add r0, #0xc9
- ldrb r0, [r0, #0x0]
- add r7, #0x30
- strh r0, [r6, #0x4]
- add r0, r5, r4
- add r0, #0xc8
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x1f
- beq _0202A7EE
- mov r0, #0x0
- mov r1, #0x1a
- mov r2, #0x11
- mov r3, #0xb
- bl NewMsgDataFromNarc
- add r1, r5, r4
- add r1, #0xc8
- ldrb r1, [r1, #0x0]
- add r2, r6, #0x0
- str r0, [sp, #0x0]
- lsl r1, r1, #0x1e
- lsr r1, r1, #0x1f
- add r1, #0x16
- add r2, #0x8
- bl ReadMsgDataIntoU16Array
- ldr r0, [sp, #0x0]
- bl DestroyMsgData
- b _0202A7FC
-_0202A7EE:
- add r0, r5, r4
- add r1, r6, #0x0
- add r0, #0xa8
- add r1, #0x8
- mov r2, #0x10
- bl MI_CpuCopy8
-_0202A7FC:
- add r0, r5, r4
- add r1, r6, #0x0
- add r0, #0xca
- add r1, #0x18
- mov r2, #0x8
- bl MI_CpuCopy8
- add r0, r5, r4
- add r1, r6, #0x0
- add r0, #0xd2
- add r1, #0x20
- mov r2, #0x8
- bl MI_CpuCopy8
- add r0, r5, r4
- add r6, #0x28
- add r0, #0xda
- add r1, r6, #0x0
- mov r2, #0x8
- bl MI_CpuCopy8
- add r0, r5, r4
- add r1, r7, #0x0
- mov r2, #0xa8
- bl MI_CpuCopy8
- pop {r3-r7, pc}
- nop
-_0202A834: .word 0x00002710
-
- thumb_func_start FUN_0202A838
-FUN_0202A838: ; 0x0202A838
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r0, r1, #0x0
- mov r1, #0x1d
- add r4, r2, #0x0
- lsl r1, r1, #0x6
- mov r2, #0xff
- add r1, r5, r1
- lsl r2, r2, #0x2
- add r6, r3, #0x0
- bl MI_CpuCopy8
- ldr r0, _0202A860 ; =0x00000103
- strb r4, [r5, r0]
- sub r0, r0, #0x1
- strb r6, [r5, r0]
- mov r0, #0x1
- add r5, #0xff
- strb r0, [r5, #0x0]
- pop {r4-r6, pc}
- .balign 4
-_0202A860: .word 0x00000103
-
- thumb_func_start FUN_0202A864
-FUN_0202A864: ; 0x0202A864
- ldr r2, _0202A874 ; =0x00000103
- ldrb r3, [r0, r2]
- sub r2, r2, #0x1
- strb r3, [r1, #0x0]
- ldrb r0, [r0, r2]
- strb r0, [r1, #0x1]
- bx lr
- nop
-_0202A874: .word 0x00000103
-
- thumb_func_start FUN_0202A878
-FUN_0202A878: ; 0x0202A878
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r0, r1, #0x0
- mov r1, #0xff
- lsl r1, r1, #0x2
- bl AllocFromHeap
- add r4, r0, #0x0
- mov r0, #0x1d
- lsl r0, r0, #0x6
- mov r2, #0xff
- add r0, r5, r0
- add r1, r4, #0x0
- lsl r2, r2, #0x2
- bl MI_CpuCopy8
- add r0, r4, #0x0
- pop {r3-r5, pc}
-
- thumb_func_start FUN_0202A89C
-FUN_0202A89C: ; 0x0202A89C
- mov r0, #0xd
- lsl r0, r0, #0x8
- bx lr
- .balign 4
-
- thumb_func_start FUN_0202A8A4
-FUN_0202A8A4: ; 0x0202A8A4
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_0202A1E4
- add r0, r4, #0x0
- add r0, #0x3c
- bl FUN_0202A1F0
- mov r0, #0x69
- lsl r0, r0, #0x2
- add r0, r4, r0
- bl FUN_0202A204
- mov r0, #0x71
- lsl r0, r0, #0x2
- add r0, r4, r0
- bl FUN_0202A230
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_0202A8CC
-FUN_0202A8CC: ; 0x0202A8CC
- ldr r3, _0202A8D4 ; =SavArray_get
- mov r1, #0x17
- bx r3
- nop
-_0202A8D4: .word SavArray_get
-
- thumb_func_start FUN_0202A8D8
-FUN_0202A8D8: ; 0x0202A8D8
- push {r3, lr}
- mov r1, #0x17
- bl SavArray_get
- add r0, #0x3c
- pop {r3, pc}
-
- thumb_func_start FUN_0202A8E4
-FUN_0202A8E4: ; 0x0202A8E4
- push {r3, lr}
- mov r1, #0x17
- bl SavArray_get
- mov r1, #0x71
- lsl r1, r1, #0x2
- add r0, r0, r1
- pop {r3, pc}
diff --git a/arm9/asm/unk_020377F0.s b/arm9/asm/unk_020377F0.s
index 7c9cc030..5ac3b4c2 100644
--- a/arm9/asm/unk_020377F0.s
+++ b/arm9/asm/unk_020377F0.s
@@ -2193,10 +2193,10 @@ FUN_02038790: ; 0x02038790
bl AllocFromHeapAtEnd
add r4, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_0202A8D8
+ bl SaveStruct23_GetSubstruct2
str r0, [r4, #0x0]
ldr r0, [r5, #0xc]
- bl FUN_0202A8E4
+ bl SaveStruct23_GetSubstruct4
str r0, [r4, #0x4]
ldr r0, [r5, #0xc]
bl Sav2_SysInfo_get
diff --git a/arm9/asm/unk_02066840.s b/arm9/asm/unk_02066840.s
index 598a4989..149a4d9e 100644
--- a/arm9/asm/unk_02066840.s
+++ b/arm9/asm/unk_02066840.s
@@ -19,7 +19,7 @@ FUN_02066840: ; 0x02066840
bl FUN_02029AFC
add r5, r0, #0x0
add r0, r6, #0x0
- bl FUN_0202A8D8
+ bl SaveStruct23_GetSubstruct2
str r0, [sp, #0x4]
add r0, r7, #0x0
mov r1, #0x0
@@ -93,7 +93,7 @@ FUN_02066840: ; 0x02066840
_020668FC:
add r0, r6, #0x0
add r1, r4, #0x0
- bl FUN_0202A5F4
+ bl SaveStruct23_GetMessage
ldr r1, [sp, #0x8]
mov r2, #0x8
add r1, r1, r5
@@ -104,7 +104,7 @@ _020668FC:
blt _020668FC
add r0, r6, #0x0
mov r1, #0x3
- bl FUN_0202A5F4
+ bl SaveStruct23_GetMessage
add r1, r7, #0x0
add r1, #0xc0
mov r2, #0x8
@@ -115,7 +115,7 @@ _020668FC:
ldr r0, [sp, #0x4]
mov r1, #0x7
mov r2, #0x0
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
add r1, r7, #0x0
add r1, #0xe2
strh r0, [r1, #0x0]
@@ -127,19 +127,19 @@ _020668FC:
ldr r0, [sp, #0x4]
ldr r1, [sp, #0x0]
add r2, r7, #0x0
- bl FUN_0202A498
+ bl SaveStruct23_Substruct2_GetArray
add sp, #0xc
pop {r4-r7, pc}
_02066956:
ldr r0, [sp, #0x4]
- bl FUN_0202A520
+ bl SaveStruct23_Substruct2_GetField_0x16
add r1, r7, #0x0
add r1, #0xe2
strh r0, [r1, #0x0]
ldr r0, [sp, #0x4]
ldr r1, [sp, #0x0]
add r2, r7, #0x0
- bl FUN_0202A498
+ bl SaveStruct23_Substruct2_GetArray
_0206696C:
add sp, #0xc
pop {r4-r7, pc}
diff --git a/arm9/asm/unk_0208A338.s b/arm9/asm/unk_0208A338.s
index 7cd4ef75..8cc2030f 100644
--- a/arm9/asm/unk_0208A338.s
+++ b/arm9/asm/unk_0208A338.s
@@ -208,7 +208,7 @@ _0208A4E8:
ldr r0, [r4, #0x0]
mov r1, #0x0
ldr r0, [r0, #0xc]
- bl FUN_0202A5F4
+ bl SaveStruct23_GetMessage
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x48
@@ -220,7 +220,7 @@ _0208A502:
ldr r0, [r4, #0x0]
mov r1, #0x1
ldr r0, [r0, #0xc]
- bl FUN_0202A5F4
+ bl SaveStruct23_GetMessage
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x48
@@ -232,7 +232,7 @@ _0208A51C:
ldr r0, [r4, #0x0]
mov r1, #0x2
ldr r0, [r0, #0xc]
- bl FUN_0202A5F4
+ bl SaveStruct23_GetMessage
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x48
@@ -244,7 +244,7 @@ _0208A536:
ldr r0, [r4, #0x0]
mov r1, #0x3
ldr r0, [r0, #0xc]
- bl FUN_0202A5F4
+ bl SaveStruct23_GetMessage
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x48
@@ -335,7 +335,7 @@ _0208A5EC:
ldr r0, [r0, #0xc]
ldr r1, [r4, #0x64]
add r2, #0x48
- bl FUN_0202A5D4
+ bl SaveStruct23_SetMessage
add r0, r4, #0x0
mov r1, #0x6
mov r2, #0x0
diff --git a/arm9/global.inc b/arm9/global.inc
index 4f028bbd..086d9b5f 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -1998,42 +1998,45 @@
.extern FUN_0202A170
.extern FUN_0202A1B8
.extern FUN_0202A1C4
-.extern FUN_0202A1E0
-.extern FUN_0202A1E4
-.extern FUN_0202A240
-.extern FUN_0202A2C4
+.extern SaveStruct23_Substruct4_Substruct1_sizeof
+.extern SaveStruct23_Substruct1_Init
+.extern SaveStruct23_Substruct2_Init
+.extern SaveStruct23_Messages_Init
+.extern SaveStruct23_Substruct4_Init
+.extern SaveStruct23_Substruct1_GetField
+.extern SaveStruct23_Substruct1_SetField
.extern FUN_0202A36C
-.extern FUN_0202A398
-.extern FUN_0202A3A0
-.extern FUN_0202A3B4
-.extern FUN_0202A40C
-.extern FUN_0202A444
-.extern FUN_0202A474
-.extern FUN_0202A498
-.extern FUN_0202A4B8
-.extern FUN_0202A520
+.extern SaveStruct23_Substruct1_GetFlag1
+.extern SaveStruct23_Substruct1_SetFlag1
+.extern SaveStruct23_Substruct2_SetField_0x0
+.extern SaveStruct23_Substruct2_SetField_0x2
+.extern SaveStruct23_Substruct2_SetField_0x3
+.extern SaveStruct23_Substruct2_SetArray
+.extern SaveStruct23_Substruct2_GetArray
+.extern SaveStruct23_Substruct2_SetField_0x16
+.extern SaveStruct23_Substruct2_GetField_0x16
.extern FUN_0202A524
-.extern FUN_0202A538
-.extern FUN_0202A578
-.extern FUN_0202A5CC
-.extern FUN_0202A5D0
-.extern FUN_0202A5D4
-.extern FUN_0202A5F4
-.extern FUN_0202A60C
-.extern FUN_0202A6B4
-.extern FUN_0202A744
-.extern FUN_0202A74C
-.extern FUN_0202A754
+.extern SaveStruct23_Substruct2_SetField_0xC
+.extern SaveStruct23_Substruct2_SetFlag
+.extern SaveStruct23_Substruct2_SetField_0x4
+.extern SaveStruct23_Substruct2_GetField_0x4
+.extern SaveStruct23_SetMessage
+.extern SaveStruct23_GetMessage
+.extern SaveStruct23_Substruct4_SetArrayFlag
+.extern SaveStruct23_Substruct4_GetArrayFlag
+.extern SaveStruct23_Substruct4_GetField_0xFE
+.extern SaveStruct23_Substruct4_GetField_0xFF
+.extern SaveStruct23_Substruct4_SetSubstruct1
.extern FUN_0202A784
.extern FUN_0202A798
.extern FUN_0202A838
.extern FUN_0202A864
.extern FUN_0202A878
-.extern FUN_0202A89C
-.extern FUN_0202A8A4
-.extern FUN_0202A8CC
-.extern FUN_0202A8D8
-.extern FUN_0202A8E4
+.extern SaveStruct23_sizeof
+.extern SaveStruct23_Init
+.extern SaveStruct23_GetSubstruct1
+.extern SaveStruct23_GetSubstruct2
+.extern SaveStruct23_GetSubstruct4
.extern FUN_0202A8F4
.extern FUN_0202A8F8
.extern FUN_0202A918
diff --git a/arm9/lib/include/CARD_rom.h b/arm9/lib/include/CARD_rom.h
index e72d653f..b6fca60b 100644
--- a/arm9/lib/include/CARD_rom.h
+++ b/arm9/lib/include/CARD_rom.h
@@ -6,6 +6,7 @@
#include "MI_dma.h"
#include "CARD_common.h"
#include "OS_tcm.h"
+#include "mmap.h"
#define CARD_ROM_PAGE_SIZE 512
diff --git a/arm9/lib/include/GX_g3x.h b/arm9/lib/include/GX_g3x.h
index a0512b28..aa65a190 100644
--- a/arm9/lib/include/GX_g3x.h
+++ b/arm9/lib/include/GX_g3x.h
@@ -3,6 +3,8 @@
#include "fx.h"
+#include "registers.h"
+
void GXi_NopClearFifo128_(void *reg);
void G3X_Init();
void G3X_ResetMtxStack();
diff --git a/arm9/lib/include/MI_exMemory.h b/arm9/lib/include/MI_exMemory.h
index aa90a73c..5e21d7e6 100644
--- a/arm9/lib/include/MI_exMemory.h
+++ b/arm9/lib/include/MI_exMemory.h
@@ -1,7 +1,7 @@
#ifndef POKEDIAMOND_MI_EXMEMORY_H
#define POKEDIAMOND_MI_EXMEMORY_H
-#include "consts.h"
+#include "registers.h"
typedef enum {
MI_PROCESSOR_ARM9 = 0,
diff --git a/arm9/lib/include/OS_entropy.h b/arm9/lib/include/OS_entropy.h
index b0f2781a..7c39aadd 100644
--- a/arm9/lib/include/OS_entropy.h
+++ b/arm9/lib/include/OS_entropy.h
@@ -5,8 +5,7 @@
#ifndef POKEDIAMOND_OS_ENTROPY_H
#define POKEDIAMOND_OS_ENTROPY_H
-#include "consts.h"
-#include "userInfo.h"
+#include "registers.h"
void OS_GetLowEntropyData(u32 * arr);
diff --git a/arm9/lib/include/OS_interrupt.h b/arm9/lib/include/OS_interrupt.h
index 130ad2de..19dd0da2 100644
--- a/arm9/lib/include/OS_interrupt.h
+++ b/arm9/lib/include/OS_interrupt.h
@@ -1,7 +1,7 @@
#ifndef POKEDIAMOND_ARM9_OS_INTERRUPT_H
#define POKEDIAMOND_ARM9_OS_INTERRUPT_H
-#include "consts.h"
+#include "registers.h"
#include "nitro/OS_interrupt_shared.h"
#define REG_OS_IME_IME_SHIFT 0
diff --git a/arm9/lib/include/OS_irqHandler.h b/arm9/lib/include/OS_irqHandler.h
index ea12a0ad..e845298b 100644
--- a/arm9/lib/include/OS_irqHandler.h
+++ b/arm9/lib/include/OS_irqHandler.h
@@ -1,8 +1,8 @@
#ifndef POKEDIAMOND_OS_IRQHANDLER_H
#define POKEDIAMOND_OS_IRQHANDLER_H
-#include "consts.h"
#include "OS_interrupt.h"
+#include "mmap.h"
static inline void OS_ClearIrqCheckFlag(OSIrqMask intr)
{
diff --git a/arm9/lib/include/OS_irqTable.h b/arm9/lib/include/OS_irqTable.h
index 10165a11..ba8b45a8 100644
--- a/arm9/lib/include/OS_irqTable.h
+++ b/arm9/lib/include/OS_irqTable.h
@@ -1,7 +1,7 @@
#ifndef POKEDIAMOND_ARM9_OS_IRQTABLE_H
#define POKEDIAMOND_ARM9_OS_IRQTABLE_H
-#include "consts.h"
+#include "mmap.h"
#include "OS_interrupt.h"
void OS_IrqDummy(void);
diff --git a/arm9/lib/include/OS_reset.h b/arm9/lib/include/OS_reset.h
index b5d43bad..756de9fb 100644
--- a/arm9/lib/include/OS_reset.h
+++ b/arm9/lib/include/OS_reset.h
@@ -1,9 +1,8 @@
#ifndef POKEDIAMOND_ARM9_OS_RESET_H
#define POKEDIAMOND_ARM9_OS_RESET_H
-#include "consts.h"
#include "nitro/OS_reset_shared.h"
-#include "PXI_fifo.h"
+#include "mmap.h"
void OS_InitReset(void);
void OS_ResetSystem(u32 parameter);
diff --git a/arm9/lib/include/PAD_pad.h b/arm9/lib/include/PAD_pad.h
index a4b5d570..f3de4198 100644
--- a/arm9/lib/include/PAD_pad.h
+++ b/arm9/lib/include/PAD_pad.h
@@ -1,7 +1,7 @@
#ifndef NITRO_PAD_PAD_H_
#define NITRO_PAD_PAD_H_
-#include "consts.h"
+#include "registers.h"
//================================================================================
// BUTTONS
diff --git a/arm9/lib/include/SND_alarm.h b/arm9/lib/include/SND_alarm.h
index cf5db862..07b77f45 100644
--- a/arm9/lib/include/SND_alarm.h
+++ b/arm9/lib/include/SND_alarm.h
@@ -2,24 +2,13 @@
#define GUARD_SND_ALARM_H
#include "global.h"
-#include "OS_alarm.h"
+#include "nitro/SND_alarm_shared.h"
typedef void (*SNDAlarmCallback)(void *);
-struct SNDAlarm {
- u8 enable; // 0x00
- u8 id; // 0x01
- u16 unk_2; // 0x02
- OSTick tick; // 0x04
- OSTick period; // 0x0C
- OSAlarm alarm; // 0x14
-}; // size = 0x40
-
void SND_AlarmInit(void);
void SNDi_IncAlarmId(u32 idx);
u8 SNDi_SetAlarmHandler(u32 idx, SNDAlarmCallback cb, void *data);
void SNDi_CallAlarmHandler(s32 idx);
-#define SND_ALARM_COUNT 8
-
#endif
diff --git a/arm9/lib/include/SND_interface.h b/arm9/lib/include/SND_interface.h
index bd2c3869..d0898f85 100644
--- a/arm9/lib/include/SND_interface.h
+++ b/arm9/lib/include/SND_interface.h
@@ -4,6 +4,7 @@
#include "global.h"
#include "SND_bank.h"
#include "SND_work.h"
+#include "SND_alarm.h"
void SND_StartSeq(s32 player, const void *seqBasePtr, u32 seqOffset, struct SNDBankData *bankData);
void SND_StopSeq(s32 player);
diff --git a/arm9/lib/include/SND_main.h b/arm9/lib/include/SND_main.h
index e35f1ee1..8fa9364e 100644
--- a/arm9/lib/include/SND_main.h
+++ b/arm9/lib/include/SND_main.h
@@ -3,6 +3,8 @@
#include "global.h"
+#include "nitro/SND_main_shared.h"
+
void SNDi_UnlockMutex(void);
void SNDi_LockMutex(void);
void SND_Init(void);
@@ -21,165 +23,4 @@ typedef struct SNDBinaryBlockHeader {
u32 size; // 0x4
} SNDBinaryBlockHeader; // size = 0x8
-struct SNDWaveParam {
- u8 format; // 0x0
- u8 loopEnabled; // 0x1
- u16 samplerate; // 0x2
- u16 timer; // 0x4
- u16 loopStart; // 0x6
- u32 loopLength; // 0x8
-}; // size = 0xC
-
-struct SNDLfoParam {
- u8 target; // 0x0
- u8 speed; // 0x1
- u8 depth; // 0x2
- u8 range; // 0x3
- u16 delay; // 0x4
-}; // size = 0x6
-
-struct SNDLfo {
- struct SNDLfoParam param; // 0x0
- u16 delayCounter; // 0x6
- u16 counter; // 0x8
-}; // size = 0xA
-
-struct SNDExChannel {
- u8 id; // 0x00
- u8 type; // 0x01
- u8 envStatus; // 0x02
-
- struct {
- u8 active : 1;
- u8 start : 1;
- u8 autoSweep : 1;
- u8 syncFlag : 5;
- } flags; // 0x03
-
- u8 panRange; // 0x04
- u8 rootMidiKey; // 0x05
- s16 userDecay2; // 0x06
-
- u8 midiKey; // 0x08
- u8 velocity; // 0x09
- s8 initPan; // 0x0A
- s8 userPan; // 0x0B
-
- s16 userDecay; // 0x0C
- s16 userPitch; // 0x0E
-
- s32 envAttenuation; // 0x10
- s32 sweepCounter; // 0x14
- s32 sweepLength; // 0x18
-
- u8 envAttack; // 0x1C
- u8 envSustain; // 0x1D
- u16 envDecay; // 0x1E
- u16 envRelease; // 0x20
- u8 priority; // 0x22
- u8 pan; // 0x23
- u16 volume; // 0x24
- u16 timer; // 0x26
-
- struct SNDLfo lfo; // 0x28
-
- s16 sweepPitch; // 0x32
-
- s32 length; // 0x34
-
- struct SNDWaveParam waveParam; // 0x38
-
- union {
- const void *waveDataPtr;
- u32 dutyCycle;
- }; // 0x44
-
- void (*callback)(struct SNDExChannel *chn, u32 status, void *userData); // 0x48
- void *callbackUserData; // 0x4C
-
- struct SNDExChannel *channelLLNext; // 0x50
-}; // size = 0x54
-
-#define SND_TRACK_COUNT_PER_PLAYER 16
-#define SND_INVALID_TRACK_INDEX 0xFF
-
-struct SNDPlayer {
- struct {
- u8 active : 1;
- u8 prepared : 1;
- u8 paused : 1;
- } flags; // 0x0
-
- u8 playerId; // 0x1
- u8 unk_2[2]; // 0x2
-
- u8 prio; // 0x4
- u8 volume; // 0x5
- s16 extFader; // 0x6
-
- u8 tracks[SND_TRACK_COUNT_PER_PLAYER]; // 0x8
-
- u16 tempo; // 0x18
- u16 tempoRatio; // 0x1A
- u16 tempoCounter; // 0x1C
- u8 unk_1E[2]; // 0x1E
-
- struct SNDBankData *bank; // 0x20
-}; // size = 0x24
-
-#define SND_TRACK_MAX_CALL 3
-
-struct SNDBankData;
-
-struct SNDTrack {
- struct {
- u8 active : 1;
- u8 noteWait : 1;
- u8 muted : 1;
- u8 tie : 1;
- u8 noteFinishWait : 1;
- u8 portamento : 1;
- u8 cmp : 1; // ???
- u8 channelMask : 1;
- } flags; // 0x00
-
- u8 panRange; // 0x01
- u16 program; // 0x02
-
- u8 volume; // 0x04
- u8 expression; // 0x05
- s8 pitchBend; // 0x06
- u8 bendRange; // 0x07
-
- s8 pan; // 0x08
- s8 extPan; // 0x09
- s16 extFader; // 0x0A
- s16 extPitch; // 0x0C
- u8 envAttack; // 0x0E
- u8 envDecay; // 0x0F
- u8 envSustain; // 0x10
- u8 envRelease; // 0x11
- u8 priority; // 0x12
- s8 transpose; // 0x13
-
- u8 portamentoKey; // 0x14
- u8 portamentoTime; // 0x15
- s16 sweepPitch; // 0x16
-
- struct SNDLfoParam mod; // 0x18
- u16 channelMask; // 0x1E
-
- s32 wait; // 0x20
-
- const u8 *trackDataStart; // 0x24
- const u8 *trackDataPos; // 0x28
- const u8 *posCallStack[SND_TRACK_MAX_CALL]; // 0x34
- u8 loopCount[SND_TRACK_MAX_CALL]; // 0x38
- u8 callStackDepth; // 0x3B
-
- struct SNDExChannel *channelLLHead; // 0x3C
-}; // size = 0x40
-
-
-
#endif // GUARD_SND_MAIN_H
diff --git a/arm9/lib/include/SND_work.h b/arm9/lib/include/SND_work.h
index dec2bd71..a8a3d62b 100644
--- a/arm9/lib/include/SND_work.h
+++ b/arm9/lib/include/SND_work.h
@@ -4,31 +4,7 @@
#include "global.h"
#include "SND_main.h"
-#include "SND_alarm.h"
-
-#define SND_PLAYER_COUNT 16
-#define SND_CHANNEL_COUNT 16
-#define SND_TRACK_COUNT 32
-
-struct SNDWork {
- struct SNDExChannel channels[SND_CHANNEL_COUNT]; // 0x00
- struct SNDPlayer players[SND_PLAYER_COUNT]; // 0x540
- struct SNDTrack tracks[SND_TRACK_COUNT]; // 0x780
- struct SNDAlarm alarms[SND_ALARM_COUNT]; // 0xF80
-}; // size = 0x1180
-
-struct SNDSharedWork {
- u32 finishedCommandTag; // 0x0
- u32 playerStatus; // 0x4
- u16 channelStatus; // 0x8
- u16 captureStatus; // 0xA
- u8 unk_C[0x14]; // 0xC
- struct {
- s16 localVars[16]; // local 0x0
- u32 tickCounter; // local 0x20
- } players[SND_PLAYER_COUNT]; // 0x20
- s16 globalVars[16]; // 0x260
-}; // size = 0x280
+#include "nitro/SND_work_shared.h"
struct SNDDriverInfo {
struct SNDWork work; // 0x0000
diff --git a/arm9/lib/include/consts.h b/arm9/lib/include/consts.h
index 1ad79b93..127339ca 100644
--- a/arm9/lib/include/consts.h
+++ b/arm9/lib/include/consts.h
@@ -2,9 +2,6 @@
#define POKEDIAMOND_ARM9_CONSTS_H
#include "nitro/consts_shared.h"
-#include "mmap.h"
-#include "registers.h"
-#include "systemWork.h"
#define HW_C5_PERMIT_MASK 0xf
diff --git a/arm9/lib/include/fx.h b/arm9/lib/include/fx.h
index 38506194..bdf49037 100644
--- a/arm9/lib/include/fx.h
+++ b/arm9/lib/include/fx.h
@@ -1,6 +1,8 @@
#ifndef GUARD_FX_H
#define GUARD_FX_H
+#include "nitro/types.h"
+
typedef s16 fx16;
typedef s32 fx32;
typedef s64 fx64;
diff --git a/arm9/lib/include/systemWork.h b/arm9/lib/include/systemWork.h
index b7660985..1e3ba46b 100644
--- a/arm9/lib/include/systemWork.h
+++ b/arm9/lib/include/systemWork.h
@@ -1,7 +1,6 @@
#ifndef POKEDIAMOND_ARM9_SYSTEMWORK_H
#define POKEDIAMOND_ARM9_SYSTEMWORK_H
-#include "OS_context.h"
#include "nitro/OS_systemWork_shared.h"
#endif //POKEDIAMOND_ARM9_SYSTEMWORK_H
diff --git a/arm9/lib/src/CARD_common.c b/arm9/lib/src/CARD_common.c
index f820027e..fd66c7ce 100644
--- a/arm9/lib/src/CARD_common.c
+++ b/arm9/lib/src/CARD_common.c
@@ -8,6 +8,7 @@
#include "OS_cache.h"
#include "MB_mb.h"
#include "PXI_fifo.h"
+#include "mmap.h"
CARDiCommon cardi_common ALIGN(32);
static CARDiCommandArg cardi_arg ALIGN(32);
diff --git a/arm9/lib/src/CARD_pullOut.c b/arm9/lib/src/CARD_pullOut.c
index 3456df48..d5c7737f 100644
--- a/arm9/lib/src/CARD_pullOut.c
+++ b/arm9/lib/src/CARD_pullOut.c
@@ -8,6 +8,7 @@
#include "PAD_pad.h"
#include "SPI_pm.h"
#include "syscall.h"
+#include "mmap.h"
static CARDPulledOutCallback CARD_UserCallback;
static BOOL CARDi_IsPulledOutFlag = FALSE;
diff --git a/arm9/lib/src/CP_context.c b/arm9/lib/src/CP_context.c
index 4e928c06..6567f516 100644
--- a/arm9/lib/src/CP_context.c
+++ b/arm9/lib/src/CP_context.c
@@ -1,6 +1,6 @@
#include "CP_context.h"
#include "function_target.h"
-#include "consts.h"
+#include "registers.h"
ARM_FUNC asm void CP_SaveContext(register CPContext *context)
{
diff --git a/arm9/lib/src/CTRDG_common.c b/arm9/lib/src/CTRDG_common.c
index 3d80cf24..df3ec0b6 100644
--- a/arm9/lib/src/CTRDG_common.c
+++ b/arm9/lib/src/CTRDG_common.c
@@ -7,6 +7,7 @@
#include "PXI_fifo.h"
#include "MI_dma.h"
#include "MI_memory.h"
+#include "mmap.h"
CTRDGWork CTRDGi_Work;
diff --git a/arm9/lib/src/FX_cp.c b/arm9/lib/src/FX_cp.c
index c8069146..0c5d4ff8 100644
--- a/arm9/lib/src/FX_cp.c
+++ b/arm9/lib/src/FX_cp.c
@@ -1,6 +1,8 @@
-#include "global.h"
#include "fx.h"
+#include "global.h"
+#include "registers.h"
+
ARM_FUNC fx32 FX_Div(fx32 numerator, fx32 denominator){
FX_DivAsync(numerator, denominator);
diff --git a/arm9/lib/src/FX_vec.c b/arm9/lib/src/FX_vec.c
index 39dd3076..005872ac 100644
--- a/arm9/lib/src/FX_vec.c
+++ b/arm9/lib/src/FX_vec.c
@@ -1,6 +1,8 @@
-#include "global.h"
#include "fx.h"
+#include "global.h"
+#include "registers.h"
+
ARM_FUNC void VEC_Add(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst){
dst->x = a->x + b->x;
dst->y = a->y + b->y;
diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c
index 688e41b7..f47c0131 100644
--- a/arm9/lib/src/GX.c
+++ b/arm9/lib/src/GX.c
@@ -1,6 +1,9 @@
-#include "global.h"
#include "gx.h"
+#include "global.h"
+#include "OS_spinLock.h"
+#include "OS_terminate_proc.h"
+
u32 GXi_DmaId = 3;
vu16 GXi_VRamLockId = 0;
diff --git a/arm9/lib/src/MI_wram.c b/arm9/lib/src/MI_wram.c
index a65bbb6f..c1433f07 100644
--- a/arm9/lib/src/MI_wram.c
+++ b/arm9/lib/src/MI_wram.c
@@ -1,7 +1,8 @@
-#include "function_target.h"
-#include "consts.h"
#include "MI_wram.h"
+#include "global.h"
+#include "registers.h"
+
ARM_FUNC void MI_SetWramBank(MIWram cnt)
{
reg_GX_VRAMCNT_WRAM = (u8)cnt;
diff --git a/arm9/lib/src/OS_arena.c b/arm9/lib/src/OS_arena.c
index df9c2fd8..de7cb9fe 100644
--- a/arm9/lib/src/OS_arena.c
+++ b/arm9/lib/src/OS_arena.c
@@ -1,8 +1,9 @@
-#include "function_target.h"
-#include "consts.h"
#include "OS_arena.h"
+
+#include "global.h"
#include "OS_protectionRegion.h"
#include "OS_emulator.h"
+#include "mmap.h"
static BOOL OSi_Initialized = FALSE;
static BOOL OSi_MainExArenaEnabled = FALSE;
diff --git a/arm9/lib/src/OS_entropy.c b/arm9/lib/src/OS_entropy.c
index b33781cc..5d466f82 100644
--- a/arm9/lib/src/OS_entropy.c
+++ b/arm9/lib/src/OS_entropy.c
@@ -2,10 +2,13 @@
// Created by red031000 on 2020-05-03.
//
-#include "function_target.h"
-#include "consts.h"
#include "OS_entropy.h"
+#include "global.h"
+#include "registers.h"
+#include "systemWork.h"
+#include "userInfo.h"
+
ARM_FUNC void OS_GetLowEntropyData(u32 * arr)
{
const OSSystemWork* work = OS_GetSystemWork();
diff --git a/arm9/lib/src/OS_exception.c b/arm9/lib/src/OS_exception.c
index 3aaaa2f2..63cd6d58 100644
--- a/arm9/lib/src/OS_exception.c
+++ b/arm9/lib/src/OS_exception.c
@@ -1,6 +1,8 @@
#include "OS_exception.h"
-#include "function_target.h"
+
+#include "global.h"
#include "OS_protectionUnit.h"
+#include "mmap.h"
static OSiExContext OSi_ExContext;
diff --git a/arm9/lib/src/OS_interrupt.c b/arm9/lib/src/OS_interrupt.c
index c7c0704d..699c7929 100644
--- a/arm9/lib/src/OS_interrupt.c
+++ b/arm9/lib/src/OS_interrupt.c
@@ -1,6 +1,8 @@
-#include "consts.h"
-#include "function_target.h"
#include "OS_interrupt.h"
+
+#include "global.h"
+#include "registers.h"
+#include "mmap.h"
#include "OS_thread.h"
#pragma optimize_for_size on
diff --git a/arm9/lib/src/OS_ownerInfo.c b/arm9/lib/src/OS_ownerInfo.c
index 10a638fb..6693f73f 100644
--- a/arm9/lib/src/OS_ownerInfo.c
+++ b/arm9/lib/src/OS_ownerInfo.c
@@ -1,5 +1,7 @@
-#include "function_target.h"
#include "OS_ownerInfo.h"
+
+#include "global.h"
+#include "systemWork.h"
#include "MI_memory.h"
ARM_FUNC void OS_GetMacAddress(u8 *macAddress)
diff --git a/arm9/lib/src/OS_reset.c b/arm9/lib/src/OS_reset.c
index 45d2bb13..083f2321 100644
--- a/arm9/lib/src/OS_reset.c
+++ b/arm9/lib/src/OS_reset.c
@@ -1,5 +1,6 @@
-#include "function_target.h"
#include "OS_reset.h"
+
+#include "global.h"
#include "MB_mb.h"
#include "OS_terminate_proc.h"
#include "OS_interrupt.h"
diff --git a/arm9/lib/src/OS_spinLock.c b/arm9/lib/src/OS_spinLock.c
index c0398be9..576e03ad 100644
--- a/arm9/lib/src/OS_spinLock.c
+++ b/arm9/lib/src/OS_spinLock.c
@@ -3,9 +3,10 @@
//
#include "OS_spinLock.h"
+
#include "OS_system.h"
#include "function_target.h"
-#include "consts.h"
+#include "mmap.h"
#include "MI_exMemory.h"
extern void MIi_CpuClear32(u32 param1, void * addr, u32 length); //not too sure about names
diff --git a/arm9/lib/src/OS_thread.c b/arm9/lib/src/OS_thread.c
index 35e91c22..a52b1f6d 100644
--- a/arm9/lib/src/OS_thread.c
+++ b/arm9/lib/src/OS_thread.c
@@ -6,7 +6,8 @@
#include "OS_system.h"
#include "OS_context.h"
#include "OS_terminate_proc.h"
-#include "consts.h"
+#include "systemWork.h"
+#include "mmap.h"
extern void SDK_SYS_STACKSIZE(void);
extern void SDK_IRQ_STACKSIZE(void);
diff --git a/arm9/lib/src/SND_command.c b/arm9/lib/src/SND_command.c
index 4ad80be5..044d960f 100644
--- a/arm9/lib/src/SND_command.c
+++ b/arm9/lib/src/SND_command.c
@@ -1,7 +1,10 @@
+#include "SND_alarm.h"
#include "SND_command.h"
#include "SND_work.h"
+#include "OS_emulator.h"
#include "OS_system.h"
#include "OS_cache.h"
+#include "PXI_fifo.h"
#define SND_CMD_WAIT_QUEUE_COUNT 8
diff --git a/arm9/lib/src/custom_allocator.c b/arm9/lib/src/custom_allocator.c
index 1b1375bc..283c3500 100644
--- a/arm9/lib/src/custom_allocator.c
+++ b/arm9/lib/src/custom_allocator.c
@@ -1,6 +1,8 @@
-#include "global.h"
#include "custom_allocator.h"
+#include "global.h"
+#include "OS_alloc.h"
+
static FreeFunc sDestructor;
static AllocFunc sAllocator;
diff --git a/arm9/modules/05/asm/mod05_021E1AD8.s b/arm9/modules/05/asm/mod05_021E1AD8.s
index 79954077..20fc2752 100644
--- a/arm9/modules/05/asm/mod05_021E1AD8.s
+++ b/arm9/modules/05/asm/mod05_021E1AD8.s
@@ -2073,10 +2073,10 @@ MOD05_021E2AD4: ; 0x021E2AD4
bl NewString_ReadMsgData
str r0, [sp, #0x10]
ldr r0, [r6, #0xc]
- bl FUN_0202A8D8
+ bl SaveStruct23_GetSubstruct2
mov r1, #0
add r2, r1, #0
- bl FUN_0202A3B4
+ bl SaveStruct23_Substruct2_SetField_0x0
add r2, r0, #0
mov r0, #1
str r0, [sp]
diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s
index a73dd764..0701bc8c 100644
--- a/arm9/modules/06/asm/module_06.s
+++ b/arm9/modules/06/asm/module_06.s
@@ -19893,17 +19893,17 @@ _022433A4: .word OS_ResetSystem
thumb_func_start MOD06_022433A8
MOD06_022433A8: ; 0x022433A8
- ldr r3, _022433AC ; =FUN_0202A1E4
+ ldr r3, _022433AC ; =SaveStruct23_Substruct1_Init
bx r3
.align 2, 0
-_022433AC: .word FUN_0202A1E4
+_022433AC: .word SaveStruct23_Substruct1_Init
thumb_func_start MOD06_022433B0
MOD06_022433B0: ; 0x022433B0
- ldr r3, _022433B4 ; =FUN_0202A398
+ ldr r3, _022433B4 ; =SaveStruct23_Substruct1_GetFlag1
bx r3
.align 2, 0
-_022433B4: .word FUN_0202A398
+_022433B4: .word SaveStruct23_Substruct1_GetFlag1
thumb_func_start MOD06_022433B8
MOD06_022433B8: ; 0x022433B8
@@ -19965,26 +19965,26 @@ _02243414:
MOD06_02243428: ; 0x02243428
push {r4, lr}
add r4, r1, #0
- bl FUN_0202A8D8
+ bl SaveStruct23_GetSubstruct2
cmp r4, #0
bne _0224343E
mov r1, #5
mov r2, #2
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
pop {r4, pc}
_0224343E:
mov r1, #5
mov r2, #1
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
pop {r4, pc}
thumb_func_start MOD06_02243448
MOD06_02243448: ; 0x02243448
push {r3, lr}
- bl FUN_0202A8D8
+ bl SaveStruct23_GetSubstruct2
mov r1, #5
mov r2, #0
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
lsl r0, r0, #0x10
lsr r0, r0, #0x10
pop {r3, pc}
@@ -19993,15 +19993,15 @@ MOD06_02243448: ; 0x02243448
MOD06_0224345C: ; 0x0224345C
push {r4, r5, r6, lr}
add r5, r0, #0
- bl FUN_0202A8CC
+ bl SaveStruct23_GetSubstruct1
add r4, r0, #0
add r0, r5, #0
- bl FUN_0202A8D8
+ bl SaveStruct23_GetSubstruct2
mov r1, #0
add r6, r0, #0
add r0, r4, #0
add r2, r1, #0
- bl FUN_0202A240
+ bl SaveStruct23_Substruct1_GetField
lsl r0, r0, #0x18
lsr r4, r0, #0x18
cmp r4, #5
@@ -20015,11 +20015,11 @@ _02243484:
add r0, r6, #0
lsr r1, r1, #0x10
mov r2, #2
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
add r0, r6, #0
add r1, r4, #0
mov r2, #2
- bl FUN_0202A538
+ bl SaveStruct23_Substruct2_SetField_0xC
cmp r4, #4
beq _022434A8
add r0, r5, #0
@@ -20031,8 +20031,8 @@ _022434A8:
thumb_func_start MOD06_022434AC
MOD06_022434AC: ; 0x022434AC
push {r3, lr}
- bl FUN_0202A8E4
- bl FUN_0202A744
+ bl SaveStruct23_GetSubstruct4
+ bl SaveStruct23_Substruct4_GetField_0xFE
lsl r0, r0, #0x10
lsr r0, r0, #0x10
pop {r3, pc}
@@ -20072,16 +20072,16 @@ MOD06_022434D0: ; 0x022434D0
mov r0, #0x3b
str r0, [r4, #4]
add r0, r6, #0
- bl FUN_0202A8CC
+ bl SaveStruct23_GetSubstruct1
str r0, [r4, #0x70]
add r0, r6, #0
- bl FUN_0202A8D8
+ bl SaveStruct23_GetSubstruct2
str r0, [r4, #0x74]
ldr r0, _02243688 ; =0x12345678
mov r1, #0
str r0, [r4]
ldr r0, [r4, #0x70]
- bl FUN_0202A3A0
+ bl SaveStruct23_Substruct1_SetFlag1
cmp r5, #0
bne _0224356C
strb r7, [r4, #0xf]
@@ -20114,25 +20114,25 @@ _02243544:
cmp r2, #0xe
blo _02243544
ldr r0, [r4, #0x70]
- bl FUN_0202A1E4
+ bl SaveStruct23_Substruct1_Init
ldrb r1, [r4, #0xf]
add r0, sp, #8
add r2, sp, #8
strb r1, [r0]
ldr r0, [r4, #0x70]
mov r1, #0
- bl FUN_0202A2C4
+ bl SaveStruct23_Substruct1_SetField
b _0224362A
_0224356C:
mov r1, #0
ldr r0, [r4, #0x70]
add r2, r1, #0
- bl FUN_0202A240
+ bl SaveStruct23_Substruct1_GetField
strb r0, [r4, #0xf]
ldr r0, [r4, #0x70]
mov r1, #1
mov r2, #0
- bl FUN_0202A240
+ bl SaveStruct23_Substruct1_GetField
strb r0, [r4, #0xc]
ldrb r0, [r4, #0xc]
sub r0, r0, #1
@@ -20144,16 +20144,16 @@ _0224356C:
ldr r0, [r4, #0x70]
mov r1, #5
add r2, #0x2a
- bl FUN_0202A240
+ bl SaveStruct23_Substruct1_GetField
add r2, r4, #0
ldr r0, [r4, #0x70]
mov r1, #8
add r2, #0x3e
- bl FUN_0202A240
+ bl SaveStruct23_Substruct1_GetField
ldr r0, [r4, #0x70]
mov r1, #0xa
mov r2, #0
- bl FUN_0202A240
+ bl SaveStruct23_Substruct1_GetField
str r0, [r4, #8]
ldrb r0, [r4, #0xf]
cmp r0, #2
@@ -20161,7 +20161,7 @@ _0224356C:
ldr r0, [r4, #0x70]
mov r1, #9
mov r2, #0
- bl FUN_0202A240
+ bl SaveStruct23_Substruct1_GetField
lsl r0, r0, #0x18
lsr r0, r0, #0x18
lsl r0, r0, #0x1d
@@ -20180,14 +20180,14 @@ _0224356C:
lsl r3, r3, #4
mov r1, #6
add r2, r2, r3
- bl FUN_0202A240
+ bl SaveStruct23_Substruct1_GetField
ldrb r0, [r4, #0x10]
mov r1, #7
mov r2, #0
lsl r0, r0, #0x18
lsr r5, r0, #0x1d
ldr r0, [r4, #0x70]
- bl FUN_0202A240
+ bl SaveStruct23_Substruct1_GetField
add r3, r0, #0
ldr r0, _02243690 ; =0x000007E8
mov r1, #0xa6
@@ -20226,7 +20226,7 @@ _0224362A:
lsl r1, r1, #0x10
lsr r1, r1, #0x10
mov r2, #0
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
lsl r0, r0, #0x10
lsr r0, r0, #0x10
beq _02243668
@@ -20244,7 +20244,7 @@ _02243668:
ldrb r1, [r4, #0xf]
ldr r0, [r4, #0x74]
mov r2, #0
- bl FUN_0202A538
+ bl SaveStruct23_Substruct2_SetField_0xC
strh r0, [r4, #0x1c]
_0224367E:
add r0, r4, #0
@@ -20707,17 +20707,17 @@ _022439B8:
strb r1, [r0]
ldr r0, [r5, #0x70]
mov r1, #0
- bl FUN_0202A2C4
+ bl SaveStruct23_Substruct1_SetField
ldrb r1, [r5, #0xc]
add r0, sp, #0
add r2, sp, #0
strb r1, [r0]
ldr r0, [r5, #0x70]
mov r1, #1
- bl FUN_0202A2C4
+ bl SaveStruct23_Substruct1_SetField
ldr r0, [r5, #0x74]
ldr r1, [r5, #0x70]
- bl FUN_0202A4B8
+ bl SaveStruct23_Substruct2_SetField_0x16
_022439F6:
pop {r3, r4, r5, r6, r7, pc}
@@ -20771,7 +20771,7 @@ _02243A52:
add r1, #8
lsl r1, r1, #0x10
lsr r1, r1, #0x10
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
lsl r0, r0, #0x10
lsr r0, r0, #0x10
beq _02243A74
@@ -20793,7 +20793,7 @@ _02243A7E:
lsl r1, r1, #0x10
lsr r1, r1, #0x10
mov r2, #2
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
ldrb r2, [r5, #0xd]
ldr r0, [sp, #4]
mov r1, #0x1d
@@ -20801,7 +20801,7 @@ _02243A7E:
ldrb r1, [r5, #0xf]
ldr r0, [r5, #0x74]
mov r2, #2
- bl FUN_0202A538
+ bl SaveStruct23_Substruct2_SetField_0xC
ldr r0, [sp, #8]
bl FUN_02029FC8
mov r1, #0xf
@@ -20849,7 +20849,7 @@ MOD06_02243AD8: ; 0x02243AD8
lsr r1, r1, #0x10
mov r2, #0
add r4, #0x35
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
lsl r0, r0, #0x10
lsr r0, r0, #0x10
beq _02243B1A
@@ -20872,7 +20872,7 @@ _02243B26:
add r1, #8
lsl r1, r1, #0x10
lsr r1, r1, #0x10
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
add r0, r6, #0
add r1, r4, #0
bl FUN_0202A150
@@ -20887,7 +20887,7 @@ _02243B26:
ldrb r1, [r5, #0xf]
ldr r0, [r5, #0x74]
mov r2, #3
- bl FUN_0202A538
+ bl SaveStruct23_Substruct2_SetField_0xC
add r0, r6, #0
mov r1, #0xf
mov r2, #1
@@ -20933,19 +20933,19 @@ MOD06_02243BA8: ; 0x02243BA8
strb r1, [r0]
ldr r0, [r4, #0x70]
mov r1, #0
- bl FUN_0202A2C4
+ bl SaveStruct23_Substruct1_SetField
ldrb r1, [r4, #0xc]
add r0, sp, #0
add r2, sp, #0
strb r1, [r0]
ldr r0, [r4, #0x70]
mov r1, #1
- bl FUN_0202A2C4
+ bl SaveStruct23_Substruct1_SetField
add r2, r4, #0
ldr r0, [r4, #0x70]
mov r1, #5
add r2, #0x2a
- bl FUN_0202A2C4
+ bl SaveStruct23_Substruct1_SetField
ldrh r1, [r4, #0x28]
ldrh r2, [r4, #0x24]
ldrh r3, [r4, #0x26]
@@ -20957,15 +20957,15 @@ MOD06_02243BA8: ; 0x02243BA8
ldr r0, [r4, #0x70]
mov r1, #8
add r2, #0x3e
- bl FUN_0202A2C4
+ bl SaveStruct23_Substruct1_SetField
add r2, r4, #0
ldr r0, [r4, #0x70]
mov r1, #0xa
add r2, #8
- bl FUN_0202A2C4
+ bl SaveStruct23_Substruct1_SetField
ldr r0, [r4, #0x70]
mov r1, #1
- bl FUN_0202A3A0
+ bl SaveStruct23_Substruct1_SetFlag1
ldrb r0, [r4, #0xf]
cmp r0, #2
bne _02243C4E
@@ -20977,7 +20977,7 @@ MOD06_02243BA8: ; 0x02243BA8
strb r1, [r0]
ldr r0, [r4, #0x70]
mov r1, #9
- bl FUN_0202A2C4
+ bl SaveStruct23_Substruct1_SetField
ldrb r3, [r4, #0x10]
ldr r2, _02243C54 ; =0x000007E8
ldr r0, [r4, #0x70]
@@ -20987,7 +20987,7 @@ MOD06_02243BA8: ; 0x02243BA8
lsl r3, r3, #4
mov r1, #6
add r2, r2, r3
- bl FUN_0202A2C4
+ bl SaveStruct23_Substruct1_SetField
ldr r2, _02243C58 ; =0x00000838
ldr r0, [r4, #0x70]
add r3, r4, r2
@@ -20996,7 +20996,7 @@ MOD06_02243BA8: ; 0x02243BA8
lsl r2, r2, #0x18
lsr r2, r2, #0x1d
add r2, r3, r2
- bl FUN_0202A2C4
+ bl SaveStruct23_Substruct1_SetField
_02243C4E:
add sp, #4
pop {r3, r4, pc}
@@ -21234,13 +21234,13 @@ _02243DEE:
ldr r0, [r4, #0x74]
bne _02243E00
mov r1, #0
- bl FUN_0202A444
+ bl SaveStruct23_Substruct2_SetField_0x3
ldr r1, _02243E2C ; =0x02250C5C
ldrb r5, [r1, r0]
b _02243E1E
_02243E00:
mov r2, #0
- bl FUN_0202A538
+ bl SaveStruct23_Substruct2_SetField_0xC
ldrb r1, [r4, #0x10]
lsl r1, r1, #0x1d
lsr r1, r1, #0x1e
@@ -21259,7 +21259,7 @@ _02243E1E:
ldr r0, [r4, #0x74]
add r1, r5, #0
mov r2, #5
- bl FUN_0202A3B4
+ bl SaveStruct23_Substruct2_SetField_0x0
add r0, r5, #0
pop {r3, r4, r5, pc}
.align 2, 0
@@ -21283,7 +21283,7 @@ _02243E48:
blo _02243E5E
mov r1, #1
mov r2, #0
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
cmp r0, #0
beq _02243E6E
mov r0, #0
@@ -21291,7 +21291,7 @@ _02243E48:
_02243E5E:
mov r1, #0
add r2, r1, #0
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
cmp r0, #0
beq _02243E6E
mov r0, #0
@@ -21307,7 +21307,7 @@ MOD06_02243E74: ; 0x02243E74
add r6, r0, #0
add r0, r1, #0
add r5, r2, #0
- bl FUN_0202A8D8
+ bl SaveStruct23_GetSubstruct2
add r4, r0, #0
cmp r5, #0
beq _02243E90
@@ -21318,15 +21318,15 @@ MOD06_02243E74: ; 0x02243E74
b _02243F10
_02243E90:
mov r1, #0
- bl FUN_0202A444
+ bl SaveStruct23_Substruct2_SetField_0x3
pop {r4, r5, r6, pc}
_02243E98:
mov r1, #4
mov r2, #2
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
add r0, r4, #0
mov r1, #0
- bl FUN_0202A444
+ bl SaveStruct23_Substruct2_SetField_0x3
add r5, r0, #0
cmp r5, #0xa
bne _02243EB2
@@ -21335,7 +21335,7 @@ _02243E98:
_02243EB2:
add r0, r4, #0
mov r1, #3
- bl FUN_0202A444
+ bl SaveStruct23_Substruct2_SetField_0x3
add r0, r5, #1
cmp r0, #5
blt _02243EC8
@@ -21348,11 +21348,11 @@ _02243EC8:
pop {r4, r5, r6, pc}
_02243ECC:
mov r1, #3
- bl FUN_0202A40C
+ bl SaveStruct23_Substruct2_SetField_0x2
add r5, r0, #0
add r0, r4, #0
mov r1, #0
- bl FUN_0202A444
+ bl SaveStruct23_Substruct2_SetField_0x3
cmp r0, #1
bne _02243EE4
mov r0, #0
@@ -21365,14 +21365,14 @@ _02243EE4:
blo _02243F0C
add r0, r4, #0
mov r1, #4
- bl FUN_0202A444
+ bl SaveStruct23_Substruct2_SetField_0x3
add r0, r4, #0
mov r1, #2
- bl FUN_0202A40C
+ bl SaveStruct23_Substruct2_SetField_0x2
add r0, r4, #0
mov r1, #4
mov r2, #2
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
mov r0, #1
pop {r4, r5, r6, pc}
_02243F0C:
@@ -21476,7 +21476,7 @@ MOD06_02243F9C: ; 0x02243F9C
add r1, #8
lsl r1, r1, #0x10
lsr r1, r1, #0x10
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
lsl r0, r0, #0x18
lsr r0, r0, #0x18
bne _02243FC0
@@ -21749,7 +21749,7 @@ _022441B8:
ldr r0, [r6, #0x74]
ldr r1, [sp]
ldr r2, [sp, #4]
- bl FUN_0202A474
+ bl SaveStruct23_Substruct2_SetArray
ldr r0, [sp, #4]
mov r1, #0
mov r2, #0xa8
@@ -21939,9 +21939,9 @@ MOD06_0224434C: ; 0x0224434C
lsl r2, r2, #4
bl MI_CpuFill8
add r0, r6, #0
- bl FUN_0202A8E4
+ bl SaveStruct23_GetSubstruct4
add r6, r0, #0
- bl FUN_0202A744
+ bl SaveStruct23_Substruct4_GetField_0xFE
cmp r0, #0
bne _0224437A
add r0, r5, #0
@@ -22424,7 +22424,7 @@ _0224471C:
ldr r0, [r6, #0x74]
mov r1, #3
mov r2, #0
- bl FUN_0202A538
+ bl SaveStruct23_Substruct2_SetField_0xC
ldr r1, _02244754 ; =0x00000844
strh r0, [r6, r1]
pop {r3, r4, r5, r6, r7, pc}
diff --git a/arm9/modules/21/src/mod21_02254A6C.c b/arm9/modules/21/src/mod21_02254A6C.c
index 45b11873..681186f2 100644
--- a/arm9/modules/21/src/mod21_02254A6C.c
+++ b/arm9/modules/21/src/mod21_02254A6C.c
@@ -1,6 +1,8 @@
+#include "mod21_02254A6C.h"
+
#include "global.h"
#include "heap.h"
-#include "mod21_02254A6C.h"
+#include "registers.h"
#include "MI_memory.h"
extern void MOD20_022536F4(u32 *param0, u32 param1);
diff --git a/arm9/modules/54/asm/module_54.s b/arm9/modules/54/asm/module_54.s
index 6840cd32..8795cd7f 100644
--- a/arm9/modules/54/asm/module_54.s
+++ b/arm9/modules/54/asm/module_54.s
@@ -4440,7 +4440,7 @@ MOD54_021D9780: ; 0x021D9780
.word MOD54_021D9488, MOD54_021D94B4, MOD54_021D91B4, MOD54_021D9274
.word MOD54_021D94D0, MOD54_021D91BC, MOD54_021D92AC, MOD54_021D94E8
.word MOD54_021D91AC, MOD54_021D9238, MOD54_021D9500, FUN_0202B934
- .word MOD54_021D9518, MOD54_021D9520, FUN_0202A1E0, MOD54_021D9544
+ .word MOD54_021D9518, MOD54_021D9520, SaveStruct23_Substruct4_Substruct1_sizeof, MOD54_021D9544
.word MOD54_021D956C
.data
diff --git a/arm9/modules/74/asm/module_74.s b/arm9/modules/74/asm/module_74.s
index 16e58c34..26a78f49 100644
--- a/arm9/modules/74/asm/module_74.s
+++ b/arm9/modules/74/asm/module_74.s
@@ -35,10 +35,10 @@ MOD74_021D74E0: ; 0x021D74E0
bl FUN_02029FC8
str r0, [r4, #0x1c]
ldr r0, [r5]
- bl FUN_0202A8D8
+ bl SaveStruct23_GetSubstruct2
str r0, [r4, #0x20]
ldr r0, [r5]
- bl FUN_0202A8E4
+ bl SaveStruct23_GetSubstruct4
str r0, [r4, #0x24]
mov r0, #0x4a
str r0, [r4]
@@ -967,7 +967,7 @@ MOD74_021D7C10: ; 0x021D7C10
ldr r0, [r5, #0x20]
lsr r1, r1, #0x10
mov r2, #0
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
lsl r2, r0, #0x10
add r0, sp, #0x18
ldrb r6, [r0, #0x10]
@@ -1195,7 +1195,7 @@ _021D7E04:
bl AddTextPrinterParameterized2
ldr r0, [r4, #0x20]
mov r1, #0
- bl FUN_0202A444
+ bl SaveStruct23_Substruct2_SetField_0x3
mov r1, #0
add r2, r0, #0
str r1, [sp]
diff --git a/arm9/modules/82/asm/module_82.s b/arm9/modules/82/asm/module_82.s
index b7ad2955..01d50253 100644
--- a/arm9/modules/82/asm/module_82.s
+++ b/arm9/modules/82/asm/module_82.s
@@ -1400,7 +1400,7 @@ MOD82_0222E050: ; 0x0222E050
ldr r0, [r4]
mov r1, #0
ldr r0, [r0]
- bl FUN_0202A444
+ bl SaveStruct23_Substruct2_SetField_0x3
str r0, [r4, #0x38]
str r0, [r4, #0x3c]
mov r0, #1
@@ -2629,7 +2629,7 @@ _0222EA38:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
add r3, sp, #0
- bl FUN_0202A6B4
+ bl SaveStruct23_Substruct4_GetArrayFlag
cmp r0, #0
beq _0222EA66
mov r0, #0x12
@@ -2795,7 +2795,7 @@ _0222EB94:
add r1, #0x48
lsr r2, r2, #0x18
lsr r3, r3, #0x18
- bl FUN_0202A754
+ bl SaveStruct23_Substruct4_SetSubstruct1
add r0, r4, #0
mov r1, #0x25
mov r2, #0x11
@@ -2812,7 +2812,7 @@ _0222EB94:
lsr r1, r1, #0x18
lsr r2, r2, #0x18
add r3, sp, #0
- bl FUN_0202A60C
+ bl SaveStruct23_Substruct4_SetArrayFlag
b _0222EC44
_0222EBD6:
mov r1, #0x3b
@@ -2995,7 +2995,7 @@ _0222ED32:
mov r1, #5
ldr r0, [r0]
mov r2, #2
- bl FUN_0202A578
+ bl SaveStruct23_Substruct2_SetFlag
add r0, r4, #0
mov r1, #0x25
mov r2, #0x1a
diff --git a/arm9/src/bag_view.c b/arm9/src/bag_view.c
index 91bbafd2..31d53861 100644
--- a/arm9/src/bag_view.c
+++ b/arm9/src/bag_view.c
@@ -7,14 +7,13 @@
#include "player_data.h"
#include "script_buffers.h"
#include "seal.h"
+#include "unk_0202A1E0.h"
extern u32 *FUN_0202708C(u32 *);
extern u32 FUN_02027168(u32 *);
extern u16 FUN_02027184(u32 *);
extern u32 *FUN_02027E24(struct SaveBlock2 *sav2);
extern u8 FUN_02029E2C(struct SealCase *, u32);
-extern u32 FUN_0202A8D8(struct SaveBlock2 *);
-extern u16 FUN_0202A3B4(u32, u32, u32);
THUMB_FUNC struct BagView *BagView_New(u8 heap_id)
{
@@ -122,7 +121,7 @@ THUMB_FUNC u32 FUN_0206E3D8(struct SaveBlock2 *sav2)
THUMB_FUNC u32 FUN_0206E3E8(struct SaveBlock2 *sav2)
{
- return FUN_0202A3B4(FUN_0202A8D8(sav2), 0, 0);
+ return SaveStruct23_Substruct2_SetField_0x0(SaveStruct23_GetSubstruct2(sav2), 0, DATA_GET);
}
THUMB_FUNC BOOL FUN_0206E3F8(struct SaveBlock2 *sav2, struct String *dest, u32 item_id, u32 heap_id)
diff --git a/arm9/src/save.c b/arm9/src/save.c
index 89bd8374..7eb523f6 100644
--- a/arm9/src/save.c
+++ b/arm9/src/save.c
@@ -3,6 +3,7 @@
#include "save_block_2.h"
#include "heap.h"
#include "CARD_backup.h"
+#include "OS_spinLock.h"
#pragma thumb on
diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c
index f4b18b86..1969e3f1 100644
--- a/arm9/src/save_arrays.c
+++ b/arm9/src/save_arrays.c
@@ -16,6 +16,7 @@
#include "unk_020139D8.h"
#include "unk_02024E64.h"
#include "sav_chatot.h"
+#include "unk_0202A1E0.h"
extern u32 FUN_0202AC20(void);
extern u32 FUN_02034D7C(void);
@@ -28,7 +29,6 @@ extern u32 FUN_02028980(void);
extern u32 FUN_02029A84(void);
extern u32 FUN_02029FB0(void);
extern u32 Sav2_Chatot_sizeof(void);
-extern u32 FUN_0202A89C(void);
extern u32 FUN_0202A8F4(void);
extern u32 FUN_0202A924(void);
extern u32 FUN_0202ABC8(void);
@@ -48,7 +48,6 @@ extern void FUN_0202805C(void *);
extern void FUN_02028994(void *);
extern void FUN_02029A8C(void *);
extern void FUN_02029FB8(void *);
-extern void FUN_0202A8A4(void *);
extern void FUN_0202A8F8(void *);
extern void FUN_0202A92C(void *);
extern void FUN_0202ABCC(void *);
@@ -88,7 +87,7 @@ const struct SaveChunkHeader UNK_020EE700[] = {
{ 20, 0, (SAVSIZEFN)FUN_02029FB0, (SAVINITFN)FUN_02029FB8 },
{ 21, 0, (SAVSIZEFN)Sav2_SealCase_sizeof, (SAVINITFN)Sav2_SealCase_init },
{ 22, 0, (SAVSIZEFN)Sav2_Chatot_sizeof, (SAVINITFN)Sav2_Chatot_init },
- { 23, 0, (SAVSIZEFN)FUN_0202A89C, (SAVINITFN)FUN_0202A8A4 },
+ { 23, 0, (SAVSIZEFN)SaveStruct23_sizeof, (SAVINITFN)SaveStruct23_Init },
{ 24, 0, (SAVSIZEFN)FUN_0202A8F4, (SAVINITFN)FUN_0202A8F8 },
{ 25, 0, (SAVSIZEFN)FUN_0202A924, (SAVINITFN)FUN_0202A92C },
{ 26, 0, (SAVSIZEFN)FUN_0202ABC8, (SAVINITFN)FUN_0202ABCC },
diff --git a/arm9/src/timer3.c b/arm9/src/timer3.c
index d4e8f8a1..4e7b03c7 100644
--- a/arm9/src/timer3.c
+++ b/arm9/src/timer3.c
@@ -1,5 +1,11 @@
#include "timer3.h"
+#include "OS_interrupt.h"
+#include "OS_irqTable.h"
+#include "OS_timer.h"
+#include "OS_system.h"
+#include "registers.h"
+
static BOOL timer3_needReset;
static vu64 timer3_counter;
diff --git a/arm9/src/unk_0201C6B4.c b/arm9/src/unk_0201C6B4.c
new file mode 100644
index 00000000..151a9cd6
--- /dev/null
+++ b/arm9/src/unk_0201C6B4.c
@@ -0,0 +1,80 @@
+#include "global.h"
+#include "unk_0201C6B4.h"
+
+THUMB_FUNC s32 FUN_0201C6B4(s8 * r0)
+{
+ s32 r2 = 0;
+ while(r0[r2] != 0)
+ {
+ r2++;
+ }
+ return r2;
+}
+
+THUMB_FUNC s8 * FUN_0201C6C8(s8 * r0, s8 * r1, s8 r2)
+{
+ for(int r3 = 0; r3 < 0x100; r3++)
+ {
+ r1[r3] = r0[r3];
+ if(r2 == r0[r3] || r0[r3] == 0)
+ {
+ r1[r3] = 0;
+ if(r2 == 0xd && r0[r3 + 1] == 0xa)
+ {
+ return &r0[r3 + 2];
+ }
+ return &r0[r3 + 1];
+ }
+ }
+ return NULL;
+}
+
+THUMB_FUNC s32 FUN_0201C70C(s8 * r4)
+{
+ s32 unk0 = FUN_0201C6B4(r4);
+ s32 r3;
+ s32 r5 = 1;
+ s32 r6 = 0;
+ for(r3 = unk0 - 1; r3 >= 0; r3--)
+ {
+ if(r4[r3] >= 0x30 && r4[r3] <= 0x39)
+ {
+ r6 += (r4[r3] - 0x30) * r5;
+ }
+ else
+ {
+ if(r3 == 0)
+ {
+ if(r4[r3] == 0x2d)
+ {
+ r6 *= -1;
+ }
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ r5 *= 0xa;
+ }
+ return r6;
+}
+
+THUMB_FUNC void FUN_0201C750(s8 * r5, s8 * r4)
+{
+ for(u8 r2 = 0; r2 < 4; r2++)
+ {
+ s32 * unk5 = (s32 *)r5;
+ unk5[r2] = 0;
+ }
+ u8 r0 = (u8)(FUN_0201C6B4(r4));
+ for(u8 r2 = 0; r2 < r0; r2++)
+ {
+ r5[r2] = r4[r2];
+ }
+}
+
+THUMB_FUNC BOOL FUN_0201C78C(u32 r0)
+{
+ return r0 < 0x121;
+}
diff --git a/arm9/src/unk_0202A1E0.c b/arm9/src/unk_0202A1E0.c
new file mode 100644
index 00000000..4f32d430
--- /dev/null
+++ b/arm9/src/unk_0202A1E0.c
@@ -0,0 +1,536 @@
+#include "global.h"
+#include "MI_memory.h"
+#include "msgdata.h"
+#include "heap.h"
+#include "unk_0202A1E0.h"
+
+THUMB_FUNC s32 SaveStruct23_Substruct4_Substruct1_sizeof()
+{
+ return sizeof(struct SaveStruct23_Substruct4_Substruct1); // 228
+}
+
+THUMB_FUNC void SaveStruct23_Substruct1_Init(struct SaveStruct23_Substruct1 *substruct1)
+{
+ MI_CpuFill8(substruct1, 0, sizeof(struct SaveStruct23_Substruct1));
+}
+
+THUMB_FUNC void SaveStruct23_Substruct2_Init(struct SaveStruct23_Substruct2 *substruct2)
+{
+ MI_CpuFill8(substruct2, 0, sizeof(struct SaveStruct23_Substruct2));
+ substruct2->u_3 = 1;
+}
+
+THUMB_FUNC void SaveStruct23_Messages_Init(struct SaveStruct23_Messages *messages)
+{
+ MailMsg_init_fromTemplate(&messages->messages[0], 0);
+ MailMsg_init_fromTemplate(&messages->messages[1], 1);
+ MailMsg_init_fromTemplate(&messages->messages[2], 2);
+ MailMsg_init_fromTemplate(&messages->messages[3], 3);
+}
+
+THUMB_FUNC void SaveStruct23_Substruct4_Init(struct SaveStruct23_Substruct4 *substruct4)
+{
+ MI_CpuFill8(substruct4, 0, sizeof(struct SaveStruct23_Substruct4));
+}
+
+THUMB_FUNC u32 SaveStruct23_Substruct1_GetField(struct SaveStruct23_Substruct1 *substruct1, SaveStruct23_Substruct1_Field field, void *dst)
+{
+ switch (field)
+ {
+ case FIELD_0x0_2:
+ return substruct1->u_0_2;
+ case FIELD_0x2:
+ return substruct1->u_2;
+ case FIELD_0x3:
+ return substruct1->u_3;
+ case FIELD_0x4:
+ return substruct1->u_4;
+ case FIELD_0x6:
+ return substruct1->u_6;
+ case FIELD_0x8:
+ MI_CpuCopy8(&substruct1->u_8, dst, 4);
+ return 0;
+ case FIELD_0x2C:
+ MI_CpuCopy8(&substruct1->u_2C, dst, 16);
+ return 0;
+ case FIELD_flag0:
+ return substruct1->flag0;
+ case FIELD_0xC:
+ MI_CpuCopy8(&substruct1->u_C, dst, 28);
+ return 0;
+ case FIELD_0x0_5:
+ return substruct1->u_0_5;
+ case FIELD_0x28:
+ return substruct1->u_28;
+ default:
+ return 0;
+ };
+}
+
+THUMB_FUNC void SaveStruct23_Substruct1_SetField(struct SaveStruct23_Substruct1 *substruct1, SaveStruct23_Substruct1_Field field, void *value)
+{
+ switch (field)
+ {
+ case FIELD_0x0_2:
+ substruct1->u_0_2 = *(u8 *)value;
+ break;
+ case FIELD_0x2:
+ substruct1->u_2 = *(u8 *)value;
+ break;
+ case FIELD_0x3:
+ substruct1->u_3 = *(u8 *)value;
+ break;
+ case FIELD_0x4:
+ substruct1->u_4 = *(u16 *)value;
+ break;
+ case FIELD_0x6:
+ substruct1->u_6 = *(u16 *)value;
+ break;
+ case FIELD_0x8:
+ MI_CpuCopy8(value, &substruct1->u_8, 4);
+ break;
+ case FIELD_0x2C:
+ MI_CpuCopy8(value, &substruct1->u_2C, 16);
+ break;
+ case FIELD_flag0:
+ substruct1->flag0 = *(u8 *)value;
+ break;
+ case FIELD_0xC:
+ MI_CpuCopy8(value, &substruct1->u_C, 28);
+ break;
+ case FIELD_0x28:
+ substruct1->u_28 = *(u32 *)value;
+ break;
+ case FIELD_0x0_5:
+ substruct1->u_0_5 = *(u8 *)value;
+ break;
+ }
+}
+
+THUMB_FUNC void FUN_0202A36C(struct SaveStruct23_Substruct1 *substruct1, s32 arg1, s32 arg2, s32 arg3)
+{
+ if (substruct1->u_3 + arg1 < 0xff)
+ {
+ substruct1->u_3 += arg1;
+ }
+
+ if (substruct1->u_4 + arg2 < 0xffff)
+ {
+ substruct1->u_4 += arg2;
+ }
+
+ if (substruct1->u_6 + arg3 < 0xffff)
+ {
+ substruct1->u_6 += arg3;
+ }
+}
+
+THUMB_FUNC BOOL SaveStruct23_Substruct1_GetFlag1(struct SaveStruct23_Substruct1 *substruct1)
+{
+ return substruct1->flag1;
+}
+
+THUMB_FUNC void SaveStruct23_Substruct1_SetFlag1(struct SaveStruct23_Substruct1 *substruct1, BOOL flag)
+{
+ substruct1->flag1 = flag;
+}
+
+THUMB_FUNC u16 SaveStruct23_Substruct2_SetField_0x0(struct SaveStruct23_Substruct2 *substruct2, u16 value, DataSetMode mode)
+{
+ switch (mode)
+ {
+ case DATA_SET:
+ if (value > 9999)
+ {
+ substruct2->u_0 = 9999;
+ }
+ else
+ {
+ substruct2->u_0 = value;
+ }
+ break;
+ case DATA_ADD:
+ if (substruct2->u_0 + value > 9999)
+ {
+ substruct2->u_0 = 9999;
+ }
+ else
+ {
+ substruct2->u_0 += value;
+ }
+ break;
+ case DATA_SUBSTRACT:
+ if (substruct2->u_0 < value)
+ {
+ substruct2->u_0 = 0;
+ }
+ else
+ {
+ substruct2->u_0 -= value;
+ }
+ break;
+ case DATA_GET:
+ default:
+ break;
+ }
+ return substruct2->u_0;
+}
+
+THUMB_FUNC u8 SaveStruct23_Substruct2_SetField_0x2(struct SaveStruct23_Substruct2 *substruct2, DataSetMode mode)
+{
+ switch (mode)
+ {
+ case DATA_RESET:
+ substruct2->u_2 = 0;
+ substruct2->flag4 = 0;
+ break;
+ case DATA_INCREMENT:
+ if (substruct2->flag4)
+ {
+ substruct2->u_2++;
+ }
+ else
+ {
+ substruct2->u_2 = 1;
+ substruct2->flag4 = 1;
+ }
+ break;
+ }
+ return substruct2->u_2;
+}
+
+THUMB_FUNC u8 SaveStruct23_Substruct2_SetField_0x3(struct SaveStruct23_Substruct2 *substruct2, DataSetMode mode)
+{
+ switch (mode)
+ {
+ case DATA_RESET:
+ substruct2->u_3 = 1;
+ break;
+ case DATA_INCREMENT:
+ if (substruct2->u_3 < 10)
+ {
+ substruct2->u_3++;
+ }
+ break;
+ case DATA_DECREMENT:
+ if (substruct2->u_3 > 1)
+ {
+ substruct2->u_3--;
+ }
+ break;
+ }
+ return substruct2->u_3;
+}
+
+THUMB_FUNC void SaveStruct23_Substruct2_SetArray(struct SaveStruct23_Substruct2 *substruct2, s32 mode, void *src)
+{
+ if (mode == 0)
+ {
+ MI_CpuCopy8(src, substruct2->u_C0, 168);
+ }
+ else
+ {
+ MI_CpuCopy8(src, substruct2->u_18, 168);
+ }
+}
+
+THUMB_FUNC void SaveStruct23_Substruct2_GetArray(struct SaveStruct23_Substruct2 *substruct2, s32 mode, void *dst)
+{
+ if (mode == 0)
+ {
+ MI_CpuCopy8(substruct2->u_C0, dst, 168);
+ }
+ else
+ {
+ MI_CpuCopy8(substruct2->u_18, dst, 168);
+ }
+}
+
+THUMB_FUNC u16 SaveStruct23_Substruct2_SetField_0x16(struct SaveStruct23_Substruct2 *substruct2, struct Unk0202A4B8 *arg1)
+{
+ u16 var1, var2, var3, var4, var5, total;
+
+ var1 = (u16) ((arg1->u_2 - 1) * 1000);
+ var2 = (u16) (arg1->u_4 * 10);
+ var3 = (u16) (arg1->u_3 * 20);
+
+ if (var2 + var3 > 950)
+ {
+ var4 = 0;
+ }
+ else
+ {
+ var4 = (u16) (950 - (var2 + var3));
+ }
+
+ if (arg1->u_6 > 970)
+ {
+ var5 = 0;
+ }
+ else
+ {
+ var5 = (u16) ((1000 - arg1->u_6) / 30);
+ }
+
+ total = (u16) (var1 + var4 + var5);
+ substruct2->u_16 = total;
+ return total;
+}
+
+THUMB_FUNC u16 SaveStruct23_Substruct2_GetField_0x16(struct SaveStruct23_Substruct2 *substruct2)
+{
+ return substruct2->u_16;
+}
+
+THUMB_FUNC u8 FUN_0202A524(struct SaveStruct23_Substruct2 *substruct2)
+{
+ return (u8)(substruct2->u_16 / 1000);
+}
+
+THUMB_FUNC u16 SaveStruct23_Substruct2_SetField_0xC(struct SaveStruct23_Substruct2 *substruct2, u16 arg1, DataSetMode mode)
+{
+ if (arg1 == 5)
+ {
+ return 0;
+ }
+
+ switch(mode) {
+ case DATA_RESET:
+ substruct2->u_C[arg1] = 0;
+ break;
+ case DATA_INCREMENT:
+ if (substruct2->u_C[arg1] < 0xfffe) {
+ substruct2->u_C[arg1]++;
+ }
+ break;
+ }
+ return substruct2->u_C[arg1];
+}
+
+THUMB_FUNC BOOL SaveStruct23_Substruct2_SetFlag(struct SaveStruct23_Substruct2 *substruct2, u16 flagNumber, DataSetMode mode)
+{
+ u16 i;
+ u16 flag = 1;
+
+ for (i = 0; i < flagNumber ; i++)
+ {
+ flag <<= 1;
+ }
+
+ switch (mode)
+ {
+ case DATA_RESET:
+ flag = (u16) (flag ^ 0xffff);
+ substruct2->flags &= flag;
+ break;
+ case DATA_SET:
+ substruct2->flags |= flag;
+ break;
+ case DATA_GET:
+ return (BOOL) ((substruct2->flags >> flagNumber) & 1);
+ }
+
+ return FALSE;
+}
+
+
+THUMB_FUNC void SaveStruct23_Substruct2_SetField_0x4(struct SaveStruct23_Substruct2 *substruct2, u32 value)
+{
+ substruct2->u_4 = value;
+}
+
+THUMB_FUNC u32 SaveStruct23_Substruct2_GetField_0x4(struct SaveStruct23_Substruct2 *substruct2)
+{
+ return substruct2->u_4;
+}
+
+
+THUMB_FUNC void SaveStruct23_SetMessage(struct SaveBlock2 *sav2, u32 index, struct MailMessage *message)
+{
+ struct SaveStruct23 *data = SavArray_get(sav2, 23);
+ MailMsg_copy(&data->messages.messages[index], message);
+}
+
+THUMB_FUNC struct MailMessage *SaveStruct23_GetMessage(struct SaveBlock2 *sav2, u32 index)
+{
+ struct SaveStruct23 *data = SavArray_get(sav2, 23);
+ return &data->messages.messages[index];
+}
+
+THUMB_FUNC void SaveStruct23_Substruct4_SetArrayFlag(struct SaveStruct23_Substruct4 *substruct4, u8 arg1, u8 arg2, struct Unk0202A68C *arg3) {
+
+ u8 flag = 1;
+
+ if (arg2 == 0 || arg2 > 200)
+ {
+ return;
+ }
+
+ if (arg1 == 0 || arg1 > 10)
+ {
+ return;
+ }
+
+ u16 var1 = (u16) ((arg1 - 1) * 200 + (arg2 - 1));
+ u8 index = (u8) (var1 / 8);
+ u8 remainder = (u8) (var1 % 8);
+ flag <<= remainder;
+
+ substruct4->flags[index] |= flag;
+ substruct4->u_0 = (arg3->u_0 << 24) | ((arg3->u_4 & 0xff) << 16) | ((arg3->u_8 & 0xff) << 8) | arg3->u_C;
+}
+
+THUMB_FUNC void SaveStruct23_Substruct4_ClearArrayFlags(struct SaveStruct23_Substruct4 *substruct4)
+{
+
+ MI_CpuFill8(substruct4->flags, 0, 250);
+ MI_CpuFill8(&substruct4->u_0, 0, 4);
+}
+
+THUMB_FUNC BOOL StructUnk0202A68C_Compare(struct Unk0202A68C *struct1, struct Unk0202A68C *struct2)
+{
+ if (struct1->u_0 > struct2->u_0) {
+ return TRUE;
+ } else if (struct1->u_4 > struct2->u_4) {
+ return TRUE;
+ } else if (struct1->u_8 > struct2->u_8) {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+THUMB_FUNC BOOL SaveStruct23_Substruct4_GetArrayFlag(struct SaveStruct23_Substruct4 *substruct4, u8 arg1, u8 arg2, struct Unk0202A68C *arg3)
+{
+ u8 flag = 1;
+
+ if (arg2 > 200 || arg1 > 10)
+ {
+ return FALSE;
+ }
+
+ u32 var0 = substruct4->u_0;
+
+ Unk0202A68C var1;
+ var1.u_0 = var0 >> 24 & 0xff;
+ var1.u_4 = var0 >> 16 & 0xff;
+ var1.u_8 = var0 >> 8 & 0xff;
+ var1.u_C = var0 & 0xff;
+
+ if (StructUnk0202A68C_Compare(arg3, &var1))
+ {
+ SaveStruct23_Substruct4_ClearArrayFlags(substruct4);
+ return FALSE;
+ }
+
+ u16 var2 = (u16) ((arg1 - 1) * 200 + (arg2 - 1));
+ u8 index = (u8) (var2 / 8);
+ u8 remainder = (u8) (var2 % 8);
+ flag <<= remainder;
+
+ if (substruct4->flags[index] & flag)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+THUMB_FUNC u8 SaveStruct23_Substruct4_GetField_0xFE(struct SaveStruct23_Substruct4 *substruct4)
+{
+ return substruct4->u_FE;
+}
+
+THUMB_FUNC u8 SaveStruct23_Substruct4_GetField_0xFF(struct SaveStruct23_Substruct4 *substruct4)
+{
+ return substruct4->u_FF;
+}
+
+THUMB_FUNC void SaveStruct23_Substruct4_SetSubstruct1(struct SaveStruct23_Substruct4 *substruct4, struct SaveStruct23_Substruct4_Substruct1 *substruct1, u8 arg2, u8 arg3)
+{
+ MI_CpuCopy8(substruct1, &substruct4->substruct1, sizeof(struct SaveStruct23_Substruct4_Substruct1)*7);
+ substruct4->u_101 = arg2;
+ substruct4->u_100 = arg3;
+ substruct4->u_FE = 1;
+}
+
+THUMB_FUNC void FUN_0202A784(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A784 *dst)
+{
+ dst->u_0 = substruct4->u_101;
+ dst->u_1 = substruct4->u_100;
+}
+
+THUMB_FUNC void FUN_0202A798(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A798 *arg1, u32 arg2)
+{
+ struct Unk0202A798_substruct *unk_substruct = &arg1->u_0;
+ u8 *var1 = arg1->u_30;
+ struct SaveStruct23_Substruct4_Substruct1 *substruct4_substruct1 = &substruct4->substruct1[arg2];
+ struct MsgData *message;
+
+ unk_substruct->u_0 = 10000;
+ unk_substruct->u_4 = substruct4_substruct1->u_C9;
+
+ if(substruct4_substruct1->u_C8_0)
+ {
+ message = NewMsgDataFromNarc(0, NARC_MSGDATA_MSG, 17, 11);
+ ReadMsgDataIntoU16Array(message, (u32) (22 + substruct4_substruct1->u_C8_1), unk_substruct->u_8);
+ DestroyMsgData(message);
+ }
+ else
+ {
+ MI_CpuCopy8(substruct4_substruct1->u_A8, unk_substruct->u_8, 16);
+ }
+
+ MI_CpuCopy8(substruct4_substruct1->u_CA, unk_substruct->u_18, 8);
+ MI_CpuCopy8(substruct4_substruct1->u_D2, unk_substruct->u_20, 8);
+ MI_CpuCopy8(substruct4_substruct1->u_DA, unk_substruct->u_28, 8);
+ MI_CpuCopy8(substruct4_substruct1->u_0, var1, 168);
+}
+
+THUMB_FUNC void FUN_0202A838(struct SaveStruct23_Substruct4 *substruct4, struct SaveStruct23_Substruct4_Substruct2 *substruct4_substruct2, u8 arg2, u8 arg3)
+{
+ MI_CpuCopy8(substruct4_substruct2, &substruct4->substruct2, sizeof(struct SaveStruct23_Substruct4_Substruct2));
+ substruct4->u_103 = arg2;
+ substruct4->u_102 = arg3;
+ substruct4->u_FF = 1;
+}
+
+THUMB_FUNC void FUN_0202A864(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A784 *dst)
+{
+ dst->u_0 = substruct4->u_103;
+ dst->u_1 = substruct4->u_102;
+}
+
+THUMB_FUNC struct SaveStruct23_Substruct4_Substruct2 *FUN_0202A878(struct SaveStruct23_Substruct4 *substruct4, u32 heap_id)
+{
+ struct SaveStruct23_Substruct4_Substruct2 *substruct4_substruct2 = AllocFromHeap(heap_id, sizeof(struct SaveStruct23_Substruct4_Substruct2) /* 1020 */);
+ MI_CpuCopy8(&substruct4->substruct2, substruct4_substruct2, sizeof(struct SaveStruct23_Substruct4_Substruct2));
+ return substruct4_substruct2;
+}
+
+THUMB_FUNC s32 SaveStruct23_sizeof()
+{
+ return sizeof(struct SaveStruct23); // 0xD00 (3328)
+}
+
+THUMB_FUNC void SaveStruct23_Init(struct SaveStruct23 *saveStruct23)
+{
+ SaveStruct23_Substruct1_Init(&saveStruct23->substruct1);
+ SaveStruct23_Substruct2_Init(&saveStruct23->substruct2);
+ SaveStruct23_Messages_Init(&saveStruct23->messages);
+ SaveStruct23_Substruct4_Init(&saveStruct23->substruct4);
+}
+
+THUMB_FUNC struct SaveStruct23_Substruct1 *SaveStruct23_GetSubstruct1(struct SaveBlock2* sav2)
+{
+ return &((struct SaveStruct23 *)SavArray_get(sav2, 23))->substruct1;
+}
+
+THUMB_FUNC struct SaveStruct23_Substruct2 *SaveStruct23_GetSubstruct2(struct SaveBlock2* sav2)
+{
+ return &((struct SaveStruct23 *)SavArray_get(sav2, 23))->substruct2;
+}
+
+THUMB_FUNC struct SaveStruct23_Substruct4 *SaveStruct23_GetSubstruct4(struct SaveBlock2* sav2)
+{
+ return &((struct SaveStruct23 *)SavArray_get(sav2, 23))->substruct4;
+} \ No newline at end of file
diff --git a/arm9/src/unk_0205FA2C.c b/arm9/src/unk_0205FA2C.c
index cabd756e..a023ad83 100644
--- a/arm9/src/unk_0205FA2C.c
+++ b/arm9/src/unk_0205FA2C.c
@@ -1,5 +1,6 @@
#include "unk_0205FA2C.h"
#include "unk_020337E8.h"
+#include "unk_0202A1E0.h"
extern void *UNK_020F96DC;
extern void *UNK_020FA6E8;
@@ -11,17 +12,9 @@ extern u16 *GetVarPointer(struct UnkSavStruct80 *arg, u16);
extern u16 MOD06_02244660(struct UnkSavStruct80 *param0, u8 *param1);
extern u16 MOD06_022446BC(struct UnkSavStruct80 *param0, u8 *param1);
extern u16 MOD06_022446E0(struct UnkSavStruct80 *param0, u8 *param1);
-extern void FUN_0202A5CC(u32 param0, u32 param1);
-extern u32 FUN_0202A5D0(u32 param0);
extern u32 FUN_0202A150(struct UnkStruct_02029FB0 *param0, u32 param1);
-extern u32 FUN_0202A8D8(struct SaveBlock2 *sav2);
-extern u32 FUN_0202A578(u32 param0, u32 param1, u32 param2);
extern u32 FUN_02026CC4(struct SaveBlock2 *sav2);
extern u32 FUN_02025D94(u32 param0, u32 param1);
-extern u32 FUN_0202A8CC(struct SaveBlock2 *sav2);
-extern void FUN_0202A2C4(u32 param0, u32 param1, u32 *param2);
-extern u32 FUN_0202A240(u32 param0, u32 param1, u32 param2);
-extern int FUN_0202A538(u32 param0, u16 param1, u32 param2);
const u8 UNK_020F7454[] = {
0x00,
@@ -327,33 +320,33 @@ THUMB_FUNC u32 FUN_0205FE10(struct SaveBlock2 *sav2)
return 0;
}
- u32 res2 = FUN_0202A8D8(sav2);
+ struct SaveStruct23_Substruct2 *saveStruct23_substruct2 = SaveStruct23_GetSubstruct2(sav2);
- u8 res3 = (u8)FUN_0202A578(res2, 0xd, 0);
- u8 res4 = (u8)FUN_0202A578(res2, 0, 0);
- u8 res5 = (u8)FUN_0202A578(res2, 1, 0);
+ BOOL flagD = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xd, DATA_GET);
+ BOOL flag0 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0, DATA_GET);
+ BOOL flag1 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 1, DATA_GET);
- u8 res6 = (u8)FUN_0202A578(res2, 0xe, 0);
- u8 res7 = (u8)FUN_0202A578(res2, 2, 0);
- u8 res8 = (u8)FUN_0202A578(res2, 3, 0);
+ BOOL flagE = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xe, DATA_GET);
+ BOOL flag2 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 2, DATA_GET);
+ BOOL flag3 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 3, DATA_GET);
- if (res3 != 0 && res4 != 0 && res5 != 0)
+ if (flagD && flag0 && flag1)
{
return 0;
}
u32 res9 = FUN_02026CC4(sav2);
- if (res3 == 0)
+ if (!flagD)
{
if (FUN_02025D94(res9, 0x55) != 0)
{
- FUN_0202A578(res2, 0xd, 1);
+ SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xd, DATA_SET);
return 1;
}
- if (res6 == 0)
+ if (!flagE)
{
- FUN_0202A578(res2, 0xe, 1);
+ SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xe, DATA_SET);
}
return 4;
@@ -364,36 +357,36 @@ THUMB_FUNC u32 FUN_0205FE10(struct SaveBlock2 *sav2)
return 0;
}
- if (res4 == 0)
+ if (!flag0)
{
if (FUN_02025D94(res9, 0x56) != 0)
{
- FUN_0202A578(res2, 0, 1);
+ SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0, DATA_SET);
return 2;
}
- if (res7 == 0)
+ if (!flag2)
{
- FUN_0202A578(res2, 2, 1);
+ SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 2, DATA_SET);
}
return 4;
}
- if (res < 100 || res5 != 0)
+ if (res < 100 || flag1)
{
return 0;
}
if (FUN_02025D94(res9, 0x57) != 0)
{
- FUN_0202A578(res2, 1, 1);
+ SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 1, DATA_SET);
return 3;
}
- if (res8 == 0)
+ if (!flag3)
{
- FUN_0202A578(res2, 3, 1);
+ SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 3, DATA_SET);
}
return 4;
@@ -407,24 +400,24 @@ THUMB_FUNC u32 FUN_0205FF5C(struct SaveBlock2 *sav2)
return 0;
}
- u32 res2 = FUN_0202A8D8(sav2);
+ struct SaveStruct23_Substruct2 *saveStruct23_substruct2 = SaveStruct23_GetSubstruct2(sav2);
- u8 res3 = (u8)FUN_0202A578(res2, 0xd, 0);
- u8 res4 = (u8)FUN_0202A578(res2, 0, 0);
- u8 res5 = (u8)FUN_0202A578(res2, 1, 0);
+ BOOL flagD = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xd, DATA_GET);
+ BOOL flag0 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0, DATA_GET);
+ BOOL flag1 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 1, DATA_GET);
- u8 res6 = (u8)FUN_0202A578(res2, 0xe, 0);
- u8 res7 = (u8)FUN_0202A578(res2, 2, 0);
- u8 res8 = (u8)FUN_0202A578(res2, 3, 0);
+ BOOL flagE = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xe, DATA_GET);
+ BOOL flag2 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 2, DATA_GET);
+ BOOL flag3 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 3, DATA_GET);
- if (res3 != 0 && res4 != 0 && res5 != 0)
+ if (flagD && flag0 && flag1)
{
return 0;
}
- if (res3 == 0)
+ if (!flagD)
{
- if (res6 != 0)
+ if (flagE)
{
return 4;
}
@@ -437,9 +430,9 @@ THUMB_FUNC u32 FUN_0205FF5C(struct SaveBlock2 *sav2)
return 0;
}
- if (res4 == 0)
+ if (!flag0)
{
- if (res7 != 0)
+ if (flag2)
{
return 5;
}
@@ -452,12 +445,12 @@ THUMB_FUNC u32 FUN_0205FF5C(struct SaveBlock2 *sav2)
return 0;
}
- if (res5 != 0)
+ if (flag1)
{
return 0;
}
- if (res8 != 0)
+ if (flag3)
{
return 6;
}
@@ -488,42 +481,42 @@ THUMB_FUNC u32 FUN_0206007C(struct SaveBlock2 *sav2)
{
u32 res = FUN_02060070(FUN_020287A4(FUN_0202881C(sav2)));
- FUN_0202A5CC(FUN_0202A8D8(sav2), res);
+ SaveStruct23_Substruct2_SetField_0x4(SaveStruct23_GetSubstruct2(sav2), res);
return res;
}
THUMB_FUNC u32 FUN_020600A0(struct SaveBlock2 *sav2)
{
- u32 res = FUN_0202A8D8(sav2);
+ struct SaveStruct23_Substruct2 *saveStruct23_substruct2 = SaveStruct23_GetSubstruct2(sav2);
- u32 res2 = FUN_02060070(FUN_0202A5D0(res));
+ u32 res2 = FUN_02060070(SaveStruct23_Substruct2_GetField_0x4(saveStruct23_substruct2));
- FUN_0202A5CC(res, res2);
+ SaveStruct23_Substruct2_SetField_0x4(saveStruct23_substruct2, res2);
u32 res3 = FUN_02060064(res2);
- FUN_0202A2C4(FUN_0202A8CC(sav2), 0xa, &res3);
+ SaveStruct23_Substruct1_SetField(SaveStruct23_GetSubstruct1(sav2), FIELD_0x28, &res3);
return res3;
}
THUMB_FUNC u32 FUN_020600DC(struct SaveBlock2 *sav2)
{
- u32 res = FUN_0202A8D8(sav2);
+ struct SaveStruct23_Substruct2 *saveStruct23_substruct2 = SaveStruct23_GetSubstruct2(sav2);
- u32 res2 = FUN_0202A8CC(sav2);
+ struct SaveStruct23_Substruct1 *saveStruct23_substruct1 = SaveStruct23_GetSubstruct1(sav2);
- u32 res3 = FUN_02060064(FUN_0202A5D0(res));
+ u32 res3 = FUN_02060064(SaveStruct23_Substruct2_GetField_0x4(saveStruct23_substruct2));
int i = 0;
- int res4 = FUN_0202A538(res, (u16)FUN_0202A240(res2, 0, 0), 0) * 0x18;
+ int res4 = SaveStruct23_Substruct2_SetField_0xC(saveStruct23_substruct2, (u16)SaveStruct23_Substruct1_GetField(saveStruct23_substruct1, FIELD_0x0_2, 0), DATA_GET) * 0x18;
for (i = 0; i < res4; i++)
{
res3 = FUN_02060064(res3);
}
- FUN_0202A2C4(FUN_0202A8CC(sav2), 0xa, &res3);
+ SaveStruct23_Substruct1_SetField(SaveStruct23_GetSubstruct1(sav2), FIELD_0x28, &res3);
return res3;
}
diff --git a/include/global.h b/include/global.h
index 1853dbc3..8353ed2c 100644
--- a/include/global.h
+++ b/include/global.h
@@ -5,7 +5,7 @@
#include "MWC_string.h"
#include "function_target.h"
-#include "nitro.h"
+#include "nitro/types.h"
#include "constants/global.h"
#include "error_handling.h"
diff --git a/include/heap.h b/include/heap.h
index 36c747a7..57cd88e8 100644
--- a/include/heap.h
+++ b/include/heap.h
@@ -2,6 +2,7 @@
#define POKEDIAMOND_HEAP_H
#include "global.h"
+#include "nitro/OS_arena_shared.h"
#include "NNS_FND_expheap.h"
#include "NNS_FND_allocator.h"
diff --git a/include/nitro/OS_alarm_shared.h b/include/nitro/OS_alarm_shared.h
index fe549351..1a24f139 100644
--- a/include/nitro/OS_alarm_shared.h
+++ b/include/nitro/OS_alarm_shared.h
@@ -15,6 +15,7 @@
#include "nitro/types.h"
#include "nitro/OS_tick_shared.h"
+#include "nitro/OS_thread_shared.h"
typedef void (*OSAlarmHandler) (void *);
diff --git a/include/nitro/OS_thread_shared.h b/include/nitro/OS_thread_shared.h
index a0cce54d..0c0e7f9a 100644
--- a/include/nitro/OS_thread_shared.h
+++ b/include/nitro/OS_thread_shared.h
@@ -15,6 +15,9 @@
#include "nitro/types.h"
+/* UGLY HACK: include proc specific header for OSContext */
+#include "OS_context.h"
+
typedef struct OSiAlarm OSAlarm;
typedef struct _OSThread OSThread;
diff --git a/include/nitro/SND_alarm_shared.h b/include/nitro/SND_alarm_shared.h
new file mode 100644
index 00000000..a1e8ed9d
--- /dev/null
+++ b/include/nitro/SND_alarm_shared.h
@@ -0,0 +1,30 @@
+/*
+ * NOTE:
+ * This file is shared between ARM9 and ARM7
+ * DO NOT PUT PROC SPECIFIC CODE IN HERE
+ * Thank You!
+ */
+
+/*
+ * DO NOT INCLUDE THIS FILE DIRECTLY
+ * Include SND_alarm.h from the specific proc's lib
+ */
+
+#ifndef POKEDIAMOND_SND_ALARM_SHARED_H
+#define POKEDIAMOND_SND_ALARM_SHARED_H
+
+#include "nitro/OS_tick_shared.h"
+#include "nitro/OS_alarm_shared.h"
+
+struct SNDAlarm {
+ u8 enable; // 0x00
+ u8 id; // 0x01
+ u16 unk_2; // 0x02
+ OSTick tick; // 0x04
+ OSTick period; // 0x0C
+ OSAlarm alarm; // 0x14
+}; // size = 0x40
+
+#define SND_ALARM_COUNT 8
+
+#endif //POKEDIAMOND_SND_ALARM_SHARED_H
diff --git a/include/nitro/SND_main_shared.h b/include/nitro/SND_main_shared.h
new file mode 100644
index 00000000..d77273ed
--- /dev/null
+++ b/include/nitro/SND_main_shared.h
@@ -0,0 +1,176 @@
+/*
+ * NOTE:
+ * This file is shared between ARM9 and ARM7
+ * DO NOT PUT PROC SPECIFIC CODE IN HERE
+ * Thank You!
+ */
+
+/*
+ * DO NOT INCLUDE THIS FILE DIRECTLY
+ * Include SND_main.h from the specific proc's lib
+ */
+
+#ifndef POKEDIAMOND_SND_MAIN_SHARED_H
+#define POKEDIAMOND_SND_MAIN_SHARED_H
+
+struct SNDWaveParam {
+ u8 format; // 0x0
+ u8 loopEnabled; // 0x1
+ u16 samplerate; // 0x2
+ u16 timer; // 0x4
+ u16 loopStart; // 0x6
+ u32 loopLength; // 0x8
+}; // size = 0xC
+
+struct SNDLfoParam {
+ u8 target; // 0x0
+ u8 speed; // 0x1
+ u8 depth; // 0x2
+ u8 range; // 0x3
+ u16 delay; // 0x4
+}; // size = 0x6
+
+struct SNDLfo {
+ struct SNDLfoParam param; // 0x0
+ u16 delayCounter; // 0x6
+ u16 counter; // 0x8
+}; // size = 0xA
+
+struct SNDExChannel {
+ u8 id; // 0x00
+ u8 type; // 0x01
+ u8 envStatus; // 0x02
+
+ struct {
+ u8 active : 1;
+ u8 start : 1;
+ u8 autoSweep : 1;
+ u8 syncFlag : 5;
+ } flags; // 0x03
+
+ u8 panRange; // 0x04
+ u8 rootMidiKey; // 0x05
+ s16 userDecay2; // 0x06
+
+ u8 midiKey; // 0x08
+ u8 velocity; // 0x09
+ s8 initPan; // 0x0A
+ s8 userPan; // 0x0B
+
+ s16 userDecay; // 0x0C
+ s16 userPitch; // 0x0E
+
+ s32 envAttenuation; // 0x10
+ s32 sweepCounter; // 0x14
+ s32 sweepLength; // 0x18
+
+ u8 envAttack; // 0x1C
+ u8 envSustain; // 0x1D
+ u16 envDecay; // 0x1E
+ u16 envRelease; // 0x20
+ u8 priority; // 0x22
+ u8 pan; // 0x23
+ u16 volume; // 0x24
+ u16 timer; // 0x26
+
+ struct SNDLfo lfo; // 0x28
+
+ s16 sweepPitch; // 0x32
+
+ s32 length; // 0x34
+
+ struct SNDWaveParam waveParam; // 0x38
+
+ union {
+ const void *waveDataPtr;
+ u32 dutyCycle;
+ }; // 0x44
+
+ void (*callback)(struct SNDExChannel *chn, u32 status, void *userData); // 0x48
+ void *callbackUserData; // 0x4C
+
+ struct SNDExChannel *channelLLNext; // 0x50
+}; // size = 0x54
+
+#define SND_TRACK_COUNT_PER_PLAYER 16
+#define SND_INVALID_TRACK_INDEX 0xFF
+
+struct SNDBankData;
+
+struct SNDPlayer {
+ struct {
+ u8 active : 1;
+ u8 prepared : 1;
+ u8 paused : 1;
+ } flags; // 0x0
+
+ u8 playerId; // 0x1
+ u8 unk_2[2]; // 0x2
+
+ u8 prio; // 0x4
+ u8 volume; // 0x5
+ s16 extFader; // 0x6
+
+ u8 tracks[SND_TRACK_COUNT_PER_PLAYER]; // 0x8
+
+ u16 tempo; // 0x18
+ u16 tempoRatio; // 0x1A
+ u16 tempoCounter; // 0x1C
+ u8 unk_1E[2]; // 0x1E
+
+ struct SNDBankData *bank; // 0x20
+}; // size = 0x24
+
+#define SND_TRACK_MAX_CALL 3
+
+struct SNDTrack {
+ struct {
+ u8 active : 1;
+ u8 noteWait : 1;
+ u8 muted : 1;
+ u8 tie : 1;
+ u8 noteFinishWait : 1;
+ u8 portamento : 1;
+ u8 cmp : 1; // ???
+ u8 channelMask : 1;
+ } flags; // 0x00
+
+ u8 panRange; // 0x01
+ u16 program; // 0x02
+
+ u8 volume; // 0x04
+ u8 expression; // 0x05
+ s8 pitchBend; // 0x06
+ u8 bendRange; // 0x07
+
+ s8 pan; // 0x08
+ s8 extPan; // 0x09
+ s16 extFader; // 0x0A
+ s16 extPitch; // 0x0C
+ u8 envAttack; // 0x0E
+ u8 envDecay; // 0x0F
+ u8 envSustain; // 0x10
+ u8 envRelease; // 0x11
+ u8 priority; // 0x12
+ s8 transpose; // 0x13
+
+ u8 portamentoKey; // 0x14
+ u8 portamentoTime; // 0x15
+ s16 sweepPitch; // 0x16
+
+ struct SNDLfoParam mod; // 0x18
+ u16 channelMask; // 0x1E
+
+ s32 wait; // 0x20
+
+ const u8 *trackDataStart; // 0x24
+ const u8 *trackDataPos; // 0x28
+ const u8 *posCallStack[SND_TRACK_MAX_CALL]; // 0x34
+ u8 loopCount[SND_TRACK_MAX_CALL]; // 0x38
+ u8 callStackDepth; // 0x3B
+
+ struct SNDExChannel *channelLLHead; // 0x3C
+}; // size = 0x40
+
+ #endif //POKEDIAMOND_SND_MAIN_SHARED_H
+ \ No newline at end of file
diff --git a/include/nitro/SND_work_shared.h b/include/nitro/SND_work_shared.h
new file mode 100644
index 00000000..0de3981e
--- /dev/null
+++ b/include/nitro/SND_work_shared.h
@@ -0,0 +1,46 @@
+/*
+ * NOTE:
+ * This file is shared between ARM9 and ARM7
+ * DO NOT PUT PROC SPECIFIC CODE IN HERE
+ * Thank You!
+ */
+
+/*
+ * DO NOT INCLUDE THIS FILE DIRECTLY
+ * Include SND_work.h from the specific proc's lib
+ */
+
+#ifndef POKEDIAMOND_SND_WORK_SHARED_H
+#define POKEDIAMOND_SND_WORK_SHARED_H
+
+#include "nitro/SND_alarm_shared.h"
+#include "nitro/SND_main_shared.h"
+
+#define SND_PLAYER_COUNT 16
+#define SND_CHANNEL_COUNT 16
+#define SND_TRACK_COUNT 32
+
+struct SNDWork {
+ struct SNDExChannel channels[SND_CHANNEL_COUNT]; // 0x00
+ struct SNDPlayer players[SND_PLAYER_COUNT]; // 0x540
+ struct SNDTrack tracks[SND_TRACK_COUNT]; // 0x780
+ struct SNDAlarm alarms[SND_ALARM_COUNT]; // 0xF80
+}; // size = 0x1180
+
+struct SNDSharedWork {
+ u32 finishedCommandTag; // 0x0
+ u32 playerStatus; // 0x4
+ u16 channelStatus; // 0x8
+ u16 captureStatus; // 0xA
+ u8 unk_C[0x14]; // 0xC
+ struct {
+ s16 localVars[16]; // local 0x0
+ u32 tickCounter; // local 0x20
+ } players[SND_PLAYER_COUNT]; // 0x20
+ s16 globalVars[16]; // 0x260
+}; // size = 0x280
+
+extern struct SNDWork SNDi_Work;
+extern struct SNDSharedWork *SNDi_SharedWork;
+
+ #endif //POKEDIAMOND_SND_WORK_SHARED_H
diff --git a/include/unk_0201C6B4.h b/include/unk_0201C6B4.h
new file mode 100644
index 00000000..0a501954
--- /dev/null
+++ b/include/unk_0201C6B4.h
@@ -0,0 +1,10 @@
+#ifndef POKEDIAMOND_UNK_0201C6B4_H
+#define POKEDIAMOND_UNK_0201C6B4_H
+
+s32 FUN_0201C6B4(s8 * r0);
+s8 * FUN_0201C6C8(s8 * r0, s8 * r1, s8 r2);
+s32 FUN_0201C70C(s8 * r4);
+void FUN_0201C750(s8 * r5, s8 * r4);
+BOOL FUN_0201C78C(u32 r0);
+
+#endif // POKEDIAMOND_UNK_0201C6B4_H
diff --git a/include/unk_0202A1E0.h b/include/unk_0202A1E0.h
new file mode 100644
index 00000000..8c1e5da9
--- /dev/null
+++ b/include/unk_0202A1E0.h
@@ -0,0 +1,209 @@
+#ifndef POKEDIAMOND_UNK_0202A1E0_H
+#define POKEDIAMOND_UNK_0202A1E0_H
+
+#include "mail_message.h"
+#include "save_block_2.h"
+
+typedef enum
+{
+ DATA_GET = 0,
+ DATA_SET,
+ DATA_RESET,
+ DATA_INCREMENT,
+ DATA_DECREMENT,
+ DATA_ADD,
+ DATA_SUBSTRACT
+}
+DataSetMode;
+
+typedef enum
+{
+ FIELD_0x0_2 = 0,
+ FIELD_0x2,
+ FIELD_0x3,
+ FIELD_0x4,
+ FIELD_0x6,
+ FIELD_0x8,
+ FIELD_0x2C,
+ FIELD_flag0,
+ FIELD_0xC,
+ FIELD_0x0_5,
+ FIELD_0x28,
+}
+SaveStruct23_Substruct1_Field;
+
+struct SaveStruct23_Substruct1
+{
+ /* 0x000 */ u8 flag0 : 1;
+ u8 flag1 : 1;
+ u8 u_0_2 : 3;
+ u8 u_0_5 : 3;
+ /* 0x001 */ u8 u_1;
+ /* 0x002 */ u8 u_2;
+ /* 0x003 */ u8 u_3;
+ /* 0x004 */ u16 u_4;
+ /* 0x006 */ u16 u_6;
+ /* 0x008 */ s32 u_8;
+ /* 0x00C */ s32 u_C[7];
+ /* 0x028 */ u32 u_28;
+ /* 0x02C */ s32 u_2C[4];
+}; // total size = 0x3C (60)
+
+struct SaveStruct23_Substruct2
+{
+ /* 0x000 */ u16 u_0;
+ /* 0x002 */ u8 u_2;
+ /* 0x003 */ u8 u_3;
+ /* 0x004 */ u32 u_4;
+
+ union
+ {
+ struct
+ {
+ /* 0x008 */ u16 flag0:1;
+ u16 flag1:1;
+ u16 flag2:1;
+ u16 flag3:1;
+ u16 flag4:1;
+ u16 filler_1:11;
+ };
+ /* 0x008 */ u16 flags;
+ };
+ /* 0x00A */ u8 filler_2[2];
+ /* 0x00C */ u16 u_C[5];
+ /* 0x016 */ u16 u_16;
+ /* 0x018 */ u8 u_18[168];
+ /* 0x0C0 */ u8 u_C0[168];
+}; // total size 0x168 (360)
+
+struct SaveStruct23_Messages
+{
+ /* 0x000 */ struct MailMessage messages[4];
+}; // total size 0x020 (32)
+
+struct SaveStruct23_Substruct4_Substruct1
+{
+ /* 0x000 */ u8 u_0[168];
+ /* 0x0A8 */ u8 u_A8[16];
+ /* 0x0B8 */ u8 filler_1[16];
+ /* 0x0C8 */ u8 u_C8_0:1;
+ u8 u_C8_1:1;
+ u8 filler_2:6;
+ /* 0x0C8 */ u8 u_C9;
+ /* 0x0CA */ u16 u_CA[4];
+ /* 0x0D2 */ u16 u_D2[4];
+ /* 0x0DA */ u16 u_DA[4];
+ /* 0x0E2 */ u8 filler_3[2];
+}; // total size 0xE4 (228)
+
+struct SaveStruct23_Substruct4_Substruct2
+{
+ /* 0x00 */ u8 u_0[1020];
+};
+
+struct SaveStruct23_Substruct4
+{
+ /* 0x000 */ u32 u_0;
+ /* 0x004 */ u8 flags[250];
+ /* 0x0FE */ u8 u_FE;
+ /* 0x0FF */ u8 u_FF;
+ /* 0x100 */ u8 u_100;
+ /* 0x101 */ u8 u_101;
+ /* 0x102 */ u8 u_102;
+ /* 0x103 */ u8 u_103;
+ /* 0x104 */ struct SaveStruct23_Substruct4_Substruct1 substruct1[7];
+ /* 0x740 */ struct SaveStruct23_Substruct4_Substruct2 substruct2;
+}; // total size 0xB3C (2876)
+
+struct SaveStruct23 // Struct fetched with SavArray_get(sav2, 23)
+{
+ /* 0x000 */ struct SaveStruct23_Substruct1 substruct1;
+ /* 0x03C */ struct SaveStruct23_Substruct2 substruct2;
+ /* 0x1A4 */ struct SaveStruct23_Messages messages;
+ /* 0x1C4 */ struct SaveStruct23_Substruct4 substruct4;
+}; // total size = 0xD00 (3328)
+
+struct Unk0202A4B8
+{
+ /* 0x000 */ u8 filler_1[2];
+ /* 0x002 */ u8 u_2;
+ /* 0x003 */ u8 u_3;
+ /* 0x004 */ u16 u_4;
+ /* 0x006 */ u16 u_6;
+};
+
+typedef struct Unk0202A68C
+{
+ /* 0x000 */ u32 u_0;
+ /* 0x004 */ u32 u_4;
+ /* 0x008 */ u32 u_8;
+ /* 0x00C */ u32 u_C;
+}
+Unk0202A68C; // total size 0x10 (16)
+
+struct Unk0202A784
+{
+ /* 0x000 */ u8 u_0;
+ /* 0x001 */ u8 u_1;
+};
+
+struct Unk0202A798_substruct
+{
+ /* 0x000 */ u32 u_0;
+ /* 0x004 */ u16 u_4;
+ /* 0x006 */ u8 filler_1[2];
+ /* 0x008 */ u16 u_8[8];
+ /* 0x018 */ u16 u_18[4];
+ /* 0x020 */ u16 u_20[4];
+ /* 0x028 */ u16 u_28[4];
+}; // total size 0x30 (48)
+
+struct Unk0202A798
+{
+ /* 0x000 */ struct Unk0202A798_substruct u_0;
+ /* 0x030 */ u8 u_30[168];
+};
+
+s32 SaveStruct23_Substruct4_Substruct1_sizeof();
+void SaveStruct23_Substruct1_Init(struct SaveStruct23_Substruct1 *substruct1);
+void SaveStruct23_Substruct2_Init(struct SaveStruct23_Substruct2 *substruct2);
+void SaveStruct23_Messages_Init(struct SaveStruct23_Messages *mailStruct);
+void SaveStruct23_Substruct4_Init(struct SaveStruct23_Substruct4 *substruct4);
+u32 SaveStruct23_Substruct1_GetField(struct SaveStruct23_Substruct1 *substruct1, SaveStruct23_Substruct1_Field field, void *dst);
+void SaveStruct23_Substruct1_SetField(struct SaveStruct23_Substruct1 *substruct1, SaveStruct23_Substruct1_Field field, void *value);
+void FUN_0202A36C(struct SaveStruct23_Substruct1 *substruct1, s32 arg1, s32 arg2, s32 arg3);
+BOOL SaveStruct23_Substruct1_GetFlag1(struct SaveStruct23_Substruct1 *substruct1);
+void SaveStruct23_Substruct1_SetFlag1(struct SaveStruct23_Substruct1 *substruct1, BOOL arg1);
+u16 SaveStruct23_Substruct2_SetField_0x0(struct SaveStruct23_Substruct2 *substruct2, u16 value, DataSetMode mode);
+u8 SaveStruct23_Substruct2_SetField_0x2(struct SaveStruct23_Substruct2 *substruct2, DataSetMode mode);
+u8 SaveStruct23_Substruct2_SetField_0x3(struct SaveStruct23_Substruct2 *substruct2, DataSetMode mode);
+void SaveStruct23_Substruct2_SetArray(struct SaveStruct23_Substruct2 *substruct2, s32 mode, void *src);
+void SaveStruct23_Substruct2_GetArray(struct SaveStruct23_Substruct2 *substruct2, s32 mode, void *dst);
+u16 SaveStruct23_Substruct2_SetField_0x16(struct SaveStruct23_Substruct2 *substruct2, struct Unk0202A4B8 *arg1);
+u16 SaveStruct23_Substruct2_GetField_0x16(struct SaveStruct23_Substruct2 *substruct2);
+u8 FUN_0202A524(struct SaveStruct23_Substruct2 *substruct2);
+u16 SaveStruct23_Substruct2_SetField_0xC(struct SaveStruct23_Substruct2 *substruct2, u16 arg1, DataSetMode mode);
+BOOL SaveStruct23_Substruct2_SetFlag(struct SaveStruct23_Substruct2 *substruct2, u16 flagNumber, DataSetMode mode);
+void SaveStruct23_Substruct2_SetField_0x4(struct SaveStruct23_Substruct2 *substruct2, u32 arg1);
+u32 SaveStruct23_Substruct2_GetField_0x4(struct SaveStruct23_Substruct2 *substruct2);
+void SaveStruct23_SetMessage(struct SaveBlock2 *sav2, u32 index, struct MailMessage *message);
+struct MailMessage *SaveStruct23_GetMessage(struct SaveBlock2 *sav2, u32 index);
+void SaveStruct23_Substruct4_SetArrayFlag(struct SaveStruct23_Substruct4 *substruct4, u8 arg1, u8 arg2, struct Unk0202A68C *arg3);
+void SaveStruct23_Substruct4_ClearArrayFlags(struct SaveStruct23_Substruct4 *substruct4);
+BOOL StructUnk0202A68C_Compare(struct Unk0202A68C *struct1, struct Unk0202A68C *struct2);
+BOOL SaveStruct23_Substruct4_GetArrayFlag(struct SaveStruct23_Substruct4 *substruct4, u8 arg1, u8 arg2, struct Unk0202A68C *arg3);
+u8 SaveStruct23_Substruct4_GetField_0xFE(struct SaveStruct23_Substruct4 *substruct4);
+u8 SaveStruct23_Substruct4_GetField_0xFF(struct SaveStruct23_Substruct4 *substruct4);
+void SaveStruct23_Substruct4_SetSubstruct1(struct SaveStruct23_Substruct4 *substruct4, struct SaveStruct23_Substruct4_Substruct1 *substruct4_substruct1, u8 arg2, u8 arg3);
+void FUN_0202A784(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A784 *dest);
+void FUN_0202A798(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A798 *arg1, u32 arg2);
+void FUN_0202A838(struct SaveStruct23_Substruct4 *substruct4, struct SaveStruct23_Substruct4_Substruct2 *substruct4_substruct2, u8 arg2, u8 arg3);
+void FUN_0202A864(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A784 *dest);
+struct SaveStruct23_Substruct4_Substruct2 *FUN_0202A878(struct SaveStruct23_Substruct4 *substruct4, u32 heap_id);
+s32 SaveStruct23_sizeof();
+void SaveStruct23_Init(struct SaveStruct23 *saveStruct23);
+struct SaveStruct23_Substruct1 *SaveStruct23_GetSubstruct1(struct SaveBlock2* sav2);
+struct SaveStruct23_Substruct2 *SaveStruct23_GetSubstruct2(struct SaveBlock2* sav2);
+struct SaveStruct23_Substruct4 *SaveStruct23_GetSubstruct4(struct SaveBlock2* sav2);
+
+#endif //POKEDIAMOND_UNK_0202A1E0_H \ No newline at end of file