summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lcf10
-rw-r--r--arm9/asm/DWC_account.s847
-rw-r--r--arm9/asm/DWC_backup.s959
-rw-r--r--arm9/asm/DWC_bm_init.s357
-rw-r--r--arm9/asm/DWC_init.s37
-rw-r--r--arm9/asm/DWC_report.s2
-rw-r--r--arm9/asm/DWC_util_wifiidtool.s458
-rw-r--r--arm9/asm/unk_020281E0.s2
-rw-r--r--arm9/asm/unk_0202DB14.s2
-rw-r--r--arm9/asm/unk_020337E8.s16
-rw-r--r--arm9/asm/unk_02033874.s24
-rw-r--r--arm9/asm/unk_020910EC.s2660
-rw-r--r--arm9/global.inc89
-rw-r--r--arm9/modules/04/asm/arm_04.s108
-rw-r--r--arm9/modules/04/asm/thumb_04.s20
-rw-r--r--arm9/modules/13/asm/module_13_arm2.s40
-rw-r--r--arm9/modules/55/asm/module_55.s10
-rw-r--r--arm9/modules/56/asm/module_56.s4
-rw-r--r--arm9/modules/80/asm/module_80.s2
-rw-r--r--arm9/modules/82/asm/module_82.s2
20 files changed, 2833 insertions, 2816 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
index 098e71f8..65774dac 100644
--- a/arm9/arm9.lcf
+++ b/arm9/arm9.lcf
@@ -431,6 +431,11 @@ SECTIONS {
unk_0208AC14.o (.text)
custom_allocator.o (.text)
unk_020910EC.o (.text)
+ DWC_backup.o (.text)
+ DWC_bm_init.o (.text)
+ DWC_util_wifiidtool.o (.text)
+ DWC_init.o (.text)
+ DWC_account.o (.text)
SOC_socl_startup.o (.text)
SOC_socl_command.o (.text)
SOC_socl_create.o (.text)
@@ -730,6 +735,8 @@ SECTIONS {
unk_02089F24.o (.rodata)
unk_0208A998.o (.rodata)
unk_020910EC.o (.rodata)
+ DWC_bm_init.o (.rodata)
+ DWC_util_wifiidtool.o (.rodata)
SOC_soc.o (.rodata)
CPS_network.o (.rodata)
SSL_ssl.o (.rodata)
@@ -792,6 +799,8 @@ SECTIONS {
unk_020893E0.o (.data)
unk_0208AC14.o (.data)
unk_020910EC.o (.data)
+ DWC_backup.o (.data)
+ DWC_account.o (.data)
SOC_socl_bind.o (.data)
SOC_soc.o (.data)
CPS_network.o (.data)
@@ -880,6 +889,7 @@ SECTIONS {
unk_0208AC14.o (.bss)
custom_allocator.o (.bss)
unk_020910EC.o (.bss)
+ DWC_backup.o (.bss)
SOC_socl_startup.o (.bss)
SOC_socl_command.o (.bss)
SOC_socl_read.o (.bss)
diff --git a/arm9/asm/DWC_account.s b/arm9/asm/DWC_account.s
new file mode 100644
index 00000000..45db0c45
--- /dev/null
+++ b/arm9/asm/DWC_account.s
@@ -0,0 +1,847 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global UNK_0210618C
+UNK_0210618C: ; 0x0210618C
+ .asciz "%s%c%c%c%c%s"
+
+ .balign 4, 0
+ .global UNK_0210619C
+UNK_0210619C: ; 0x0210619C
+ ; .asciz "0123456789abcdefghijklmnopqrstuvwxyz"
+ .byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66
+ .byte 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76
+ .byte 0x00, 0x00, 0x00, 0x00
+
+ .text
+
+ arm_func_start DWC_IsEqualFriendData
+DWC_IsEqualFriendData: ; 0x02096B78
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r7, r0
+ bl DWCi_Acc_GetFlag_DataType
+ mov r5, r0
+ mov r0, r4
+ bl DWCi_Acc_GetFlag_DataType
+ cmp r5, r0
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r7,pc}
+ cmp r5, #0x3
+ bne _02096BD8
+ mov r0, r7
+ bl DWCi_Acc_GetGsProfileId
+ mov r5, r0
+ mov r0, r4
+ bl DWCi_Acc_GetGsProfileId
+ cmp r5, r0
+ moveq r0, #0x1
+ add sp, sp, #0x4
+ movne r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_02096BD8:
+ cmp r5, #0x1
+ bne _02096C34
+ mov r0, r7
+ bl DWCi_Acc_GetUserId
+ mov r5, r0
+ mov r6, r1
+ mov r0, r4
+ bl DWCi_Acc_GetUserId
+ cmp r6, r1
+ cmpeq r5, r0
+ bne _02096C28
+ mov r0, r7
+ bl DWCi_Acc_GetPlayerId
+ mov r5, r0
+ mov r0, r4
+ bl DWCi_Acc_GetPlayerId
+ cmp r5, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r7,pc}
+_02096C28:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_02096C34:
+ cmp r5, #0x2
+ bne _02096C6C
+ mov r0, r7
+ bl DWCi_Acc_GetFriendKey
+ mov r5, r0
+ mov r6, r1
+ mov r0, r4
+ bl DWCi_Acc_GetFriendKey
+ cmp r6, r1
+ cmpeq r5, r0
+ moveq r0, #0x1
+ add sp, sp, #0x4
+ movne r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_02096C6C:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start DWC_LoginIdToUserName
+DWC_LoginIdToUserName: ; 0x02096C78
+ ldr ip, _02096C8C ; =DWCi_Acc_LoginIdToUserName
+ mov r3, r0
+ mov r0, r1
+ ldr r1, [r3, #0x24]
+ bx r12
+ .balign 4
+_02096C8C: .word DWCi_Acc_LoginIdToUserName
+
+ arm_func_start DWC_SetGsProfileId
+DWC_SetGsProfileId: ; 0x02096C90
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r5, r0
+ mov r1, #0x0
+ mov r2, #0xc
+ bl MI_CpuFill8
+ mov r0, r5
+ mov r1, r4
+ bl DWCi_Acc_SetGsProfileId
+ mov r0, r5
+ mov r1, #0x3
+ bl DWCi_Acc_SetFlag_DataType
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start DWC_CreateExchangeToken
+DWC_CreateExchangeToken: ; 0x02096CCC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r5, r0
+ mov r0, r4
+ mov r1, #0x0
+ mov r2, #0xc
+ bl MI_CpuFill8
+ mov r0, r5
+ bl DWCi_Acc_IsAuthentic
+ cmp r0, #0x0
+ addeq r0, r5, #0x4
+ ldmeqia r0, {r0-r2}
+ addeq sp, sp, #0x4
+ stmeqia r4, {r0-r2}
+ ldmeqia sp!, {r4-r5,pc}
+ ldr r1, [r5, #0x1c]
+ mov r0, r4
+ bl DWCi_Acc_SetGsProfileId
+ mov r0, r4
+ mov r1, #0x3
+ bl DWCi_Acc_SetFlag_DataType
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start DWC_CreateFriendKeyToken
+DWC_CreateFriendKeyToken: ; 0x02096D2C
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r1
+ mov r4, r2
+ mov r6, r0
+ mov r1, #0x0
+ mov r2, #0xc
+ bl MI_CpuFill8
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl DWCi_Acc_SetFriendKey
+ mov r0, r6
+ mov r1, #0x2
+ bl DWCi_Acc_SetFlag_DataType
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start DWC_CreateFriendKey
+DWC_CreateFriendKey: ; 0x02096D68
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r3, r0
+ ldr r0, [r3, #0x1c]
+ mov r2, #0x0
+ mov r1, r2
+ cmp r0, #0x0
+ beq _02096D94
+ ldr r1, [r3, #0x24]
+ bl DWC_Acc_CreateFriendKey
+ mov r2, r0
+_02096D94:
+ mov r0, r2
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start DWC_GetGsProfileId
+DWC_GetGsProfileId: ; 0x02096DA0
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r1
+ mov r6, r0
+ mov r0, r4
+ bl DWCi_Acc_GetFlag_DataType
+ cmp r0, #0x1
+ beq _02096E14
+ cmp r0, #0x2
+ beq _02096DD0
+ cmp r0, #0x3
+ beq _02096E08
+ b _02096E1C
+_02096DD0:
+ mov r0, r4
+ bl DWCi_Acc_GetFriendKey
+ ldr r2, [r6, #0x24]
+ mov r4, r0
+ mov r5, r1
+ bl DWC_Acc_CheckFriendKey
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r2, [r6, #0x24]
+ mov r0, r4
+ mov r1, r5
+ bl DWC_Acc_FriendKeyToGsProfileId
+ ldmia sp!, {r4-r6,pc}
+_02096E08:
+ mov r0, r4
+ bl DWCi_Acc_GetGsProfileId
+ ldmia sp!, {r4-r6,pc}
+_02096E14:
+ mvn r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+_02096E1C:
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start DWC_GetFriendKey
+DWC_GetFriendKey: ; 0x02096E24
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl DWCi_Acc_GetFlag_DataType
+ cmp r0, #0x2
+ movne r0, #0x0
+ movne r1, r0
+ ldmneia sp!, {r4,pc}
+ mov r0, r4
+ bl DWCi_Acc_GetFriendKey
+ ldmia sp!, {r4,pc}
+
+ arm_func_start DWCi_Acc_ClearDirty
+DWCi_Acc_ClearDirty: ; 0x02096E4C
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x400
+ mov r4, r0
+ ldr r1, [r4, #0x20]
+ add r0, sp, #0x0
+ bic r2, r1, #0x1
+ ldr r1, _02096E8C ; =0xEDB88320
+ str r2, [r4, #0x20]
+ bl MATHi_CRC32InitTableRev
+ add r0, sp, #0x0
+ mov r1, r4
+ mov r2, #0x3c
+ bl MATH_CalcCRC32
+ str r0, [r4, #0x3c]
+ add sp, sp, #0x400
+ ldmia sp!, {r4,pc}
+ .balign 4
+_02096E8C: .word 0xEDB88320
+
+ arm_func_start DWC_ClearDirtyFlag
+DWC_ClearDirtyFlag: ; 0x02096E90
+ ldr ip, _02096E98 ; =DWCi_Acc_ClearDirty
+ bx r12
+ .balign 4
+_02096E98: .word DWCi_Acc_ClearDirty
+
+ arm_func_start DWCi_Acc_IsDirty
+DWCi_Acc_IsDirty: ; 0x02096E9C
+ ldr r0, [r0, #0x20]
+ and r0, r0, #0x1
+ cmp r0, #0x1
+ moveq r0, #0x1
+ movne r0, #0x0
+ bx lr
+
+ arm_func_start DWC_CheckDirtyFlag
+DWC_CheckDirtyFlag: ; 0x02096EB4
+ ldr ip, _02096EBC ; =DWCi_Acc_IsDirty
+ bx r12
+ .balign 4
+_02096EBC: .word DWCi_Acc_IsDirty
+
+ arm_func_start DWCi_Acc_SetLoginIdToUserData
+DWCi_Acc_SetLoginIdToUserData: ; 0x02096EC0
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x400
+ mov r4, r0
+ add r3, r4, #0x10
+ mov r12, r2
+ ldmia r1, {r0-r2}
+ stmia r3, {r0-r2}
+ ldr r1, _02096F14 ; =0xEDB88320
+ add r0, sp, #0x0
+ str r12, [r4, #0x1c]
+ bl MATHi_CRC32InitTableRev
+ add r0, sp, #0x0
+ mov r1, r4
+ mov r2, #0x3c
+ bl MATH_CalcCRC32
+ str r0, [r4, #0x3c]
+ ldr r0, [r4, #0x20]
+ orr r0, r0, #0x1
+ str r0, [r4, #0x20]
+ add sp, sp, #0x400
+ ldmia sp!, {r4,pc}
+ .balign 4
+_02096F14: .word 0xEDB88320
+
+ arm_func_start DWC_CheckValidConsole
+DWC_CheckValidConsole: ; 0x02096F18
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x18
+ mov r4, r0
+ add r0, r4, #0x10
+ bl DWCi_Acc_GetFlag_DataType
+ cmp r0, #0x0
+ addeq sp, sp, #0x18
+ moveq r0, #0x1
+ ldmeqia sp!, {r4,pc}
+ add r0, sp, #0x0
+ bl DWC_Auth_GetId
+ ldr r0, [sp, #0x10]
+ cmp r0, #0x0
+ addeq sp, sp, #0x18
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ add r0, r4, #0x10
+ bl DWCi_Acc_GetUserId
+ ldr r2, [sp, #0x4]
+ ldr r3, [sp, #0x0]
+ cmp r2, r1
+ cmpeq r3, r0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x18
+ ldmia sp!, {r4,pc}
+
+ arm_func_start DWC_CheckHasProfile
+DWC_CheckHasProfile: ; 0x02096F80
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ add r0, r4, #0x10
+ bl DWCi_Acc_IsValidLoginId
+ cmp r0, #0x0
+ beq _02096FA8
+ ldr r0, [r4, #0x1c]
+ cmp r0, #0x0
+ movgt r0, #0x1
+ ldmgtia sp!, {r4,pc}
+_02096FA8:
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+
+ arm_func_start DWC_CheckUserData
+DWC_CheckUserData: ; 0x02096FB0
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x400
+ ldr r1, _02096FF0 ; =0xEDB88320
+ mov r4, r0
+ add r0, sp, #0x0
+ bl MATHi_CRC32InitTableRev
+ add r0, sp, #0x0
+ mov r1, r4
+ mov r2, #0x3c
+ bl MATH_CalcCRC32
+ ldr r1, [r4, #0x3c]
+ cmp r0, r1
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x400
+ ldmia sp!, {r4,pc}
+ .balign 4
+_02096FF0: .word 0xEDB88320
+
+ arm_func_start DWC_CreateUserData
+DWC_CreateUserData: ; 0x02096FF4
+ ldr ip, _02096FFC ; =DWCi_Acc_CreateUserData
+ bx r12
+ .balign 4
+_02096FFC: .word DWCi_Acc_CreateUserData
+
+ arm_func_start DWCi_Acc_IsValidFriendData
+DWCi_Acc_IsValidFriendData: ; 0x02097000
+ ldr ip, _02097008 ; =DWC_IsValidFriendData
+ bx r12
+ .balign 4
+_02097008: .word DWC_IsValidFriendData
+
+ arm_func_start DWC_IsValidFriendData
+DWC_IsValidFriendData: ; 0x0209700C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl DWCi_Acc_GetFlag_DataType
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start DWCi_Acc_IsAuthentic
+DWCi_Acc_IsAuthentic:
+ ldr ip, _02097038 ; =DWCi_Acc_IsValidLoginId
+ add r0, r0, #0x10
+ bx r12
+ .balign 4
+_02097038: .word DWCi_Acc_IsValidLoginId
+
+ arm_func_start DWCi_Acc_IsValidLoginId
+DWCi_Acc_IsValidLoginId:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl DWCi_Acc_GetFlag_DataType
+ cmp r0, #0x1
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start DWCi_Acc_CheckConsoleUserId
+DWCi_Acc_CheckConsoleUserId: ; 0x0209705C
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x18
+ mov r4, r0
+ add r0, sp, #0x0
+ bl DWC_Auth_GetId
+ ldr r0, [sp, #0x10]
+ cmp r0, #0x0
+ beq _020970A4
+ mov r0, r4
+ bl DWCi_Acc_GetUserId
+ ldr r2, [sp, #0x4]
+ ldr r3, [sp, #0x0]
+ cmp r2, r1
+ cmpeq r3, r0
+ moveq r0, #0x1
+ add sp, sp, #0x18
+ movne r0, #0x0
+ ldmia sp!, {r4,pc}
+_020970A4:
+ mov r0, r4
+ bl DWCi_Acc_GetUserId
+ ldr r2, [sp, #0xc]
+ ldr r3, [sp, #0x8]
+ cmp r2, r1
+ cmpeq r3, r0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x18
+ ldmia sp!, {r4,pc}
+
+ arm_func_start DWCi_Acc_CreateTempLoginId
+DWCi_Acc_CreateTempLoginId: ; 0x020970CC
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x38
+ mov r6, r0
+ add r0, sp, #0x14
+ bl OS_GetLowEntropyData
+ mov r3, #0x1
+ add r2, sp, #0x14
+_020970E8:
+ add r0, r2, r3, lsl #0x2
+ ldr r1, [r2, r3, lsl #0x2]
+ ldr r0, [r0, #-0x4]
+ eor r0, r1, r0
+ str r0, [r2, r3, lsl #0x2]
+ add r3, r3, #0x1
+ cmp r3, #0x8
+ blo _020970E8
+ add r0, sp, #0x0
+ ldr r5, [sp, #0x30]
+ mov r4, #0x0
+ bl DWC_Auth_GetId
+ ldr r0, [sp, #0x10]
+ cmp r0, #0x0
+ beq _02097138
+ ldr r1, [sp, #0x0]
+ ldr r2, [sp, #0x4]
+ mov r0, r6
+ bl DWCi_Acc_SetUserId
+ b _02097148
+_02097138:
+ ldr r1, [sp, #0x8]
+ ldr r2, [sp, #0xc]
+ mov r0, r6
+ bl DWCi_Acc_SetUserId
+_02097148:
+ ldr r0, _02097184 ; =0x6C078965
+ ldr r1, _02097188 ; =0x5D588B65
+ umull r3, r2, r5, r0
+ mla r2, r5, r1, r2
+ ldr r1, _0209718C ; =0x00269EC3
+ mla r2, r4, r0, r2
+ adds r0, r3, r1
+ mov r0, r6
+ adc r1, r2, #0x0
+ bl DWCi_Acc_SetPlayerId
+ mov r0, r6
+ mov r1, #0x1
+ bl DWCi_Acc_SetFlag_DataType
+ add sp, sp, #0x38
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_02097184: .word 0x6C078965
+_02097188: .word 0x5D588B65
+_0209718C: .word 0x00269EC3
+
+ arm_func_start DWCi_Acc_CreateUserData
+DWCi_Acc_CreateUserData: ; 0x02097190
+ stmdb sp!, {r4-r5,lr}
+ ldr ip, _02097210 ; =0x00000404
+ sub sp, sp, r12
+ mov r4, r1
+ mov r1, #0x0
+ mov r2, #0x40
+ mov r5, r0
+ bl MI_CpuFill8
+ mov r0, #0x40
+ str r0, [r5, #0x0]
+ mov r0, #0x0
+ str r0, [r5, #0x1c]
+ add r0, r5, #0x4
+ str r4, [r5, #0x24]
+ bl DWCi_Acc_CreateTempLoginId
+ add r0, r5, #0x10
+ mov r1, #0x0
+ bl DWCi_Acc_SetFlag_DataType
+ ldr r1, _02097214 ; =0xEDB88320
+ add r0, sp, #0x0
+ bl MATHi_CRC32InitTableRev
+ add r0, sp, #0x0
+ mov r1, r5
+ mov r2, #0x3c
+ bl MATH_CalcCRC32
+ str r0, [r5, #0x3c]
+ ldr r0, [r5, #0x20]
+ orr r0, r0, #0x1
+ str r0, [r5, #0x20]
+ ldr ip, _02097210 ; =0x00000404
+ add sp, sp, r12
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_02097210: .word 0x00000404
+_02097214: .word 0xEDB88320
+
+ arm_func_start DWCi_Acc_LoginIdToUserName
+DWCi_Acc_LoginIdToUserName: ; 0x02097218
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x40
+ mov r6, r0
+ mov r4, r1
+ mov r5, r2
+ bl DWCi_Acc_GetUserId
+ add r3, sp, #0x14
+ mov r2, #0x2b
+ bl DWCi_Acc_U64ToString32
+ mov r0, r6
+ bl DWCi_Acc_GetPlayerId
+ mov r1, #0x0
+ mov r2, #0x20
+ add r3, sp, #0x29
+ bl DWCi_Acc_U64ToString32
+ mov r1, r4, lsr #0x18
+ and r1, r1, #0xff
+ str r1, [sp, #0x0]
+ mov r1, r4, lsr #0x10
+ and r1, r1, #0xff
+ str r1, [sp, #0x4]
+ mov r1, r4, lsr #0x8
+ and r1, r1, #0xff
+ str r1, [sp, #0x8]
+ and r1, r4, #0xff
+ str r1, [sp, #0xc]
+ add r2, sp, #0x29
+ str r2, [sp, #0x10]
+ ldr r2, _020972A4 ; =UNK_0210618C
+ mov r0, r5
+ mov r1, #0x15
+ add r3, sp, #0x14
+ bl OS_SNPrintf
+ add sp, sp, #0x40
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020972A4: .word UNK_0210618C
+
+ arm_func_start DWCi_Acc_U64ToString32
+DWCi_Acc_U64ToString32: ; 0x020972A8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr lr, _0209731C ; =0x66666667
+ add r4, r2, #0x4
+ smull r12, r2, lr, r4
+ mov r2, r2, asr #0x1
+ mov r12, r4, lsr #0x1f
+ add r2, r12, r2
+ cmp r2, #0x0
+ ldr r6, _02097320 ; =UNK_0210619C
+ mov r7, #0x0
+ ble _0209730C
+ add r4, r3, r2
+ sub r4, r4, #0x1
+ mov r12, #0x1f
+_020972E4:
+ and r5, r0, r12
+ ldrsb r5, [r6, r5]
+ mov r0, r0, lsr #0x5
+ mov lr, r1, lsr #0x5
+ strb r5, [r4, -r7]
+ add r7, r7, #0x1
+ orr r0, r0, r1, lsl #0x1b
+ mov r1, lr
+ cmp r7, r2
+ blt _020972E4
+_0209730C:
+ mov r0, #0x0
+ strb r0, [r3, r2]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_0209731C: .word 0x66666667
+_02097320: .word UNK_0210619C
+
+ arm_func_start DWC_Acc_FriendKeyToGsProfileId
+DWC_Acc_FriendKeyToGsProfileId: ; 0x02097324
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl DWC_Acc_CheckFriendKey
+ cmp r0, #0x0
+ mvnne r0, #0x0
+ andne r0, r4, r0
+ moveq r0, #0x0
+ ldmia sp!, {r4,pc}
+
+ arm_func_start DWC_Acc_CheckFriendKey
+DWC_Acc_CheckFriendKey: ; 0x02097334
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x108
+ mov r4, r1
+ and r3, r4, #0x0
+ mov r1, #0x0
+ and r12, r0, #0x80000000
+ cmp r3, r1
+ cmpeq r12, r1
+ addne sp, sp, #0x108
+ movne r0, r1
+ ldmneia sp!, {r4,pc}
+ str r0, [sp, #0x0]
+ add r0, sp, #0x8
+ mov r1, #0x7
+ str r2, [sp, #0x4]
+ bl MATHi_CRC8InitTable
+ add r0, sp, #0x8
+ add r1, sp, #0x0
+ mov r2, #0x8
+ bl MATH_CalcCRC8
+ and r2, r0, #0x7f
+ mov r1, r2, asr #0x1f
+ mov r0, #0x0
+ cmp r1, r0
+ cmpeq r2, r4
+ moveq r0, #0x1
+ add sp, sp, #0x108
+ ldmia sp!, {r4,pc}
+
+ arm_func_start DWC_CheckFriendKey
+DWC_CheckFriendKey: ; 0x020973B4
+ ldr ip, _020973CC ; =DWC_Acc_CheckFriendKey
+ mov r3, r0
+ mov r0, r1
+ mov r1, r2
+ ldr r2, [r3, #0x24]
+ bx r12
+ .balign 4
+_020973CC: .word DWC_Acc_CheckFriendKey
+
+ arm_func_start DWC_Acc_CreateFriendKey
+DWC_Acc_CreateFriendKey: ; 0x020973D0
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x108
+ mov r4, r0
+ str r1, [sp, #0x4]
+ add r0, sp, #0x8
+ mov r1, #0x7
+ str r4, [sp, #0x0]
+ bl MATHi_CRC8InitTable
+ add r0, sp, #0x8
+ add r1, sp, #0x0
+ mov r2, #0x8
+ bl MATH_CalcCRC8
+ and r0, r0, #0x7f
+ orr r1, r0, #0x0
+ orr r0, r4, #0x0
+ add sp, sp, #0x108
+ ldmia sp!, {r4,pc}
+
+ arm_func_start DWCi_SetBuddyFriendData
+DWCi_SetBuddyFriendData: ; 0x02097414
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl DWCi_Acc_GetFlag_DataType
+ cmp r0, #0x3
+ ldmneia sp!, {r4,pc}
+ mov r0, r4
+ bl DWCi_Acc_GetFlags
+ orr r1, r0, #0x4
+ mov r0, r4
+ bl DWCi_Acc_SetFlags
+ ldmia sp!, {r4,pc}
+
+ arm_func_start DWCi_Acc_SetFlag_DataType
+DWCi_Acc_SetFlag_DataType: ; 0x02097440
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ bl DWCi_Acc_GetFlags
+ bic r1, r0, #0x3
+ mov r0, r5
+ orr r1, r1, r4
+ bl DWCi_Acc_SetFlags
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start DWCi_Acc_SetFlags
+DWCi_Acc_SetFlags: ; 0x0209746C
+ ldr ip, _0209747C ; =DWCi_Acc_SetMaskBits
+ ldr r3, _02097480 ; =0x001FFFFF
+ mov r2, #0xb
+ bx r12
+ .balign 4
+_0209747C: .word DWCi_Acc_SetMaskBits
+_02097480: .word 0x001FFFFF
+
+ arm_func_start DWC_GetFriendDataType
+DWC_GetFriendDataType: ; 0x02097484
+ ldr ip, _0209748C ; =DWCi_Acc_GetFlag_DataType
+ bx r12
+ .balign 4
+_0209748C: .word DWCi_Acc_GetFlag_DataType
+
+ arm_func_start DWC_IsBuddyFriendData
+DWC_IsBuddyFriendData: ; 0x02097490
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl DWCi_Acc_GetFlag_DataType
+ cmp r0, #0x3
+ bne _020974C0
+ mov r0, r4
+ bl DWCi_Acc_GetFlags
+ and r0, r0, #0x4
+ cmp r0, #0x4
+ moveq r0, #0x1
+ movne r0, #0x0
+ ldmia sp!, {r4,pc}
+_020974C0:
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+
+ arm_func_start DWCi_Acc_GetFlag_DataType
+DWCi_Acc_GetFlag_DataType: ; 0x020974C8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl DWCi_Acc_GetFlags
+ and r0, r0, #0x3
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start DWCi_Acc_GetFlags
+DWCi_Acc_GetFlags: ; 0x020974E0
+ ldr r1, [r0, #0x0]
+ ldr r0, _020974F0 ; =0x001FFFFF
+ and r0, r0, r1, lsr #0xb
+ bx lr
+ .balign 4
+_020974F0: .word 0x001FFFFF
+
+ arm_func_start DWCi_Acc_SetGsProfileId
+DWCi_Acc_SetGsProfileId: ; 0x020974F4
+ str r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start DWCi_Acc_SetFriendKey
+DWCi_Acc_SetFriendKey: ; 0x020974FC
+ str r1, [r0, #0x4]
+ str r2, [r0, #0x8]
+ bx lr
+
+ arm_func_start DWCi_Acc_SetPlayerId
+DWCi_Acc_SetPlayerId: ; 0x02097508
+ str r1, [r0, #0x8]
+ bx lr
+
+ arm_func_start DWCi_Acc_SetUserId
+DWCi_Acc_SetUserId: ; 0x02097510
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r12, #0x0
+ mov r4, r1
+ mov r1, r2
+ ldr r3, _02097540 ; =0x000007FF
+ mov r2, r12
+ mov r5, r0
+ bl DWCi_Acc_SetMaskBits
+ str r4, [r5, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_02097540: .word 0x000007FF
+
+ arm_func_start DWCi_Acc_GetGsProfileId
+DWCi_Acc_GetGsProfileId:
+ ldr r0, [r0, #0x4]
+ bx lr
+
+ arm_func_start DWCi_Acc_GetFriendKey
+DWCi_Acc_GetFriendKey: ; 0x0209754C
+ ldr r1, [r0, #0x8]
+ ldr r0, [r0, #0x4]
+ orr r1, r1, #0x0
+ orr r0, r0, #0x0
+ bx lr
+
+ arm_func_start DWCi_Acc_GetPlayerId
+DWCi_Acc_GetPlayerId:
+ ldr r0, [r0, #0x8]
+ bx lr
+
+ arm_func_start DWCi_Acc_GetUserId
+DWCi_Acc_GetUserId: ; 0x02097568
+ ldr r2, [r0, #0x0]
+ ldr r1, _02097584 ; =0x000007FF
+ ldr r0, [r0, #0x4]
+ and r1, r2, r1
+ orr r1, r1, #0x0
+ orr r0, r0, #0x0
+ bx lr
+ .balign 4
+_02097584: .word 0x000007FF
+
+ arm_func_start DWCi_Acc_SetMaskBits
+DWCi_Acc_SetMaskBits: ; 0x02097588
+ mvn r12, r3
+ ands r12, r1, r12
+ movne r0, #0x0
+ bxne lr
+ mvn r3, r3, lsl r2
+ ldr r12, [r0, #0x0]
+ and r3, r12, r3
+ orr r1, r3, r1, lsl r2
+ str r1, [r0, #0x0]
+ mov r0, #0x1
+ bx lr
diff --git a/arm9/asm/DWC_backup.s b/arm9/asm/DWC_backup.s
new file mode 100644
index 00000000..6a06652f
--- /dev/null
+++ b/arm9/asm/DWC_backup.s
@@ -0,0 +1,959 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global nv_result
+nv_result: ; 0x021C8C78
+ .space 0x4
+
+ .global nv_cb_occurred
+nv_cb_occurred: ; 0x021C8C7C
+ .space 0x4
+
+ .global Address
+Address: ; 0x021C8C80
+ .space 0x4
+
+ .global Wifi
+Wifi: ; 0x021C8C84
+ .space 0x1c
+
+ .global Work
+Work: ; 0x021C8CA0
+ .space 0x20
+
+ .text
+
+ arm_func_start DWCi_BACKUPlGetWifi
+DWCi_BACKUPlGetWifi: ; 0x02095324
+ ldr r0, _0209532C ; =Wifi
+ bx lr
+ .balign 4
+_0209532C: .word Wifi
+
+ arm_func_start DWCi_BACKUPlConvWifiInfo
+DWCi_BACKUPlConvWifiInfo: ; 0x02095330
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ mov r4, r0
+ ldr r3, [r4, #0x8]
+ ldr r2, [r4, #0xc]
+ ldr r1, _020953E4 ; =Wifi
+ str r2, [sp, #0x4]
+ str r3, [sp, #0x0]
+ mov r2, #0x5
+ bl MI_CpuCopy8
+ ldr r1, [sp, #0x0]
+ ldr r2, [r4, #0x4]
+ ldr r0, [sp, #0x4]
+ mov r2, r2, lsr #0x8
+ mov r12, r1, lsr #0x5
+ mov r3, r0, lsr #0x5
+ orr r12, r12, r0, lsl #0x1b
+ and lr, r2, #0x7
+ and r0, r1, #0x1f
+ orr lr, lr, r0, lsl #0x3
+ ldr r2, _020953E4 ; =Wifi
+ ldr r1, _020953E8 ; =Wifi + 0x6
+ strb lr, [r2, #0x5]
+ add r0, sp, #0x0
+ str r12, [sp, #0x0]
+ str r3, [sp, #0x4]
+ mov r2, #0x4
+ bl MI_CpuCopy8
+ ldrh r0, [r4, #0x10]
+ ldr r1, [sp, #0x4]
+ ldr r3, _020953E4 ; =Wifi
+ and r1, r1, #0x3f
+ and r0, r0, #0x3
+ orr r0, r1, r0, lsl #0x6
+ strb r0, [r3, #0xa]
+ ldrh r2, [r4, #0x10]
+ add r0, r4, #0x12
+ ldr r1, _020953EC ; =Wifi + 0xc
+ mov r4, r2, asr #0x2
+ mov r2, #0x2
+ strb r4, [r3, #0xb]
+ bl MI_CpuCopy8
+ ldr r0, _020953E4 ; =Wifi
+ add sp, sp, #0x8
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020953E4: .word Wifi
+_020953E8: .word Wifi + 0x6
+_020953EC: .word Wifi + 0xc
+
+ arm_func_start Callback_NVRAM
+Callback_NVRAM: ; 0x020953F0
+ ldr r3, _02095420 ; =nv_result
+ and r12, r1, #0xff
+ ldr r0, _02095424 ; =nv_cb_occurred
+ mov r1, #0x1
+ strh r12, [r3, #0x0]
+ str r1, [r0, #0x0]
+ cmp r2, #0x0
+ movne r0, #0xff
+ strneh r0, [r3, #0x0]
+ ldr r0, _02095420 ; =nv_result
+ ldrh r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_02095420: .word nv_result
+_02095424: .word nv_cb_occurred
+
+ arm_func_start writeDisable
+writeDisable:
+ stmdb sp!, {r4-r6,lr}
+ mov r5, #0x4
+ mov r4, #0x1
+_02095434:
+ mov r0, r5
+ mov r1, r4
+ bl PXI_IsCallbackReady
+ cmp r0, #0x0
+ beq _02095434
+ ldr r1, _02095490 ; =Callback_NVRAM
+ mov r0, #0x4
+ bl PXI_SetFifoRecvCallback
+ mov r4, #0x40000
+ mov r6, #0x7
+ mov r5, #0x0
+_02095460:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r5
+ mov r3, r5
+ bl NVRAMm_ExecuteCommand
+ cmp r0, #0x1
+ beq _02095488
+ mov r0, r4
+ bl SVC_WaitByLoop
+ b _02095460
+_02095488:
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_02095490: .word Callback_NVRAM
+
+ arm_func_start verify
+verify:
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r2
+ mov r4, r3
+ mov r6, r0
+ mov r0, r1
+ mov r1, r5
+ mov r2, r4
+ bl readNvram
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl memcmp
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start writeNvram
+writeNvram: ; 0x020954E0
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, #0x4
+ mov r4, #0x1
+_020954F8:
+ mov r0, r5
+ mov r1, r4
+ bl PXI_IsCallbackReady
+ cmp r0, #0x0
+ beq _020954F8
+ ldr r1, _02095558 ; =Callback_NVRAM
+ mov r0, #0x4
+ bl PXI_SetFifoRecvCallback
+ mov r0, r6
+ mov r1, r7
+ bl DC_StoreRange
+ mov r4, #0x40000
+ mov r5, #0x2
+_0209552C:
+ mov r0, r5
+ mov r1, r8
+ mov r2, r7
+ mov r3, r6
+ bl NVRAMm_ExecuteCommand
+ cmp r0, #0x1
+ ldmeqia sp!, {r4-r8,pc}
+ mov r0, r4
+ bl SVC_WaitByLoop
+ b _0209552C
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_02095558: .word Callback_NVRAM
+
+ arm_func_start readNvram
+readNvram:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r4, r2
+ mov r6, r0
+ mov r0, r4
+ mov r5, r1
+ bl DC_InvalidateRange
+ mov r8, #0x4
+ mov r7, #0x1
+_02095580:
+ mov r0, r8
+ mov r1, r7
+ bl PXI_IsCallbackReady
+ cmp r0, #0x0
+ beq _02095580
+ ldr r1, _020955F0 ; =Callback_NVRAM
+ mov r0, #0x4
+ bl PXI_SetFifoRecvCallback
+ mov r0, r5, lsl #0x10
+ mov r8, r0, lsr #0x10
+ mov r7, #0x40000
+ mov r9, #0x1
+_020955B0:
+ mov r0, r9
+ mov r1, r6
+ mov r2, r8
+ mov r3, r4
+ bl NVRAMm_ExecuteCommand
+ cmp r0, #0x1
+ beq _020955D8
+ mov r0, r7
+ bl SVC_WaitByLoop
+ b _020955B0
+_020955D8:
+ mov r0, r4
+ mov r1, r5
+ bl DC_InvalidateRange
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020955F0: .word Callback_NVRAM
+
+ arm_func_start NVRAMm_ExecuteCommand
+NVRAMm_ExecuteCommand: ; 0x020955F4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc4
+ ldr ip, _02095AAC ; =0x0000FFFF
+ ldr sl, _02095AB0 ; =Work
+ and r8, r2, r12
+ and r7, r1, r12
+ mov r5, r1, lsr #0x10
+ mov r4, r3, lsr #0x10
+ and r1, r3, r12
+ orr r3, r8, #0x30000
+ str r3, [sp, #0xc]
+ ldr r3, _02095AB4 ; =0x01050000
+ orr r2, r2, #0x20000
+ orr r3, r1, r3
+ str r3, [sp, #0x14]
+ orr r1, r1, #0x1040000
+ mov r9, r0
+ and r0, r5, #0xff
+ str r2, [sp, #0x1c]
+ str r1, [sp, #0x24]
+ ldr r1, _02095AB8 ; =0x02002200
+ mov r8, #0x0
+ orr r2, r4, #0x40000
+ orr r1, r1, r10, lsr #0x18
+ str r1, [sp, #0x28]
+ and r1, r12, r10, lsr #0x8
+ orr r1, r1, #0x10000
+ ldr r3, _02095ABC ; =0x02002300
+ str r2, [sp, #0x10]
+ orr r2, r0, r3
+ str r2, [sp, #0x8]
+ orr r2, r4, #0x30000
+ str r2, [sp, #0x20]
+ ldr r2, _02095AC0 ; =0x02002500
+ mov r6, r10, lsl #0x8
+ str r1, [sp, #0x2c]
+ and r1, r6, #0xff00
+ orr r0, r0, r2
+ ldr r3, _02095AC4 ; =0x01020000
+ str r0, [sp, #0x18]
+ orr r0, r1, r3
+ str r0, [sp, #0x30]
+ mov r0, #0x20000
+ str r0, [sp, #0x40]
+ mov r0, #0x5
+ str r0, [sp, #0xac]
+ mov r0, #0x3
+ str r0, [sp, #0xb0]
+ mov r0, #0x6
+ str r0, [sp, #0xb8]
+ mov r0, #0x4000
+ orr r7, r7, #0x10000
+ str r8, [sp, #0xb4]
+ mov r4, #0x1
+ str r8, [sp, #0xa8]
+ mov r5, #0x4
+ str r8, [sp, #0xa4]
+ str r8, [sp, #0xa0]
+ str r8, [sp, #0x90]
+ str r8, [sp, #0x98]
+ str r8, [sp, #0x9c]
+ str r8, [sp, #0x94]
+ str r8, [sp, #0x8c]
+ str r8, [sp, #0x6c]
+ str r8, [sp, #0x74]
+ str r8, [sp, #0x7c]
+ str r8, [sp, #0x84]
+ str r8, [sp, #0x88]
+ str r8, [sp, #0x80]
+ str r8, [sp, #0x78]
+ str r8, [sp, #0x70]
+ str r8, [sp, #0x68]
+ str r8, [sp, #0x64]
+ str r8, [sp, #0x38]
+ str r8, [sp, #0x44]
+ str r8, [sp, #0x4c]
+ str r8, [sp, #0x54]
+ str r8, [sp, #0x5c]
+ str r8, [sp, #0x60]
+ str r8, [sp, #0x58]
+ str r8, [sp, #0x50]
+ str r8, [sp, #0x48]
+ str r8, [sp, #0x3c]
+ str r8, [sp, #0x34]
+ mov r6, r8
+ str r0, [sp, #0xbc]
+_0209574C:
+ cmp r8, #0x0
+ bne _02095988
+ ldr r0, _02095AC8 ; =nv_cb_occurred
+ cmp r9, #0x7
+ str r6, [r0, #0x0]
+ addls pc, pc, r9, lsl #0x2
+ b _0209574C
+_02095768: ; jump table
+ b _0209574C ; case 0
+ b _02095788 ; case 1
+ b _02095834 ; case 2
+ b _02095854 ; case 3
+ b _020958F0 ; case 4
+ b _020958F0 ; case 5
+ b _02095948 ; case 6
+ b _02095968 ; case 7
+_02095788:
+ ldr r1, [sp, #0x8]
+ mov r0, r5
+ mov r2, r6
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x34]
+ blt _0209574C
+ ldr r2, [sp, #0x38]
+ mov r0, r5
+ mov r1, r7
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x3c]
+ blt _0209574C
+ ldr r1, [sp, #0x40]
+ ldr r2, [sp, #0x44]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x48]
+ blt _0209574C
+ ldr r1, [sp, #0xc]
+ ldr r2, [sp, #0x4c]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x50]
+ blt _0209574C
+ ldr r1, [sp, #0x10]
+ ldr r2, [sp, #0x54]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x58]
+ blt _0209574C
+ ldr r1, [sp, #0x14]
+ ldr r2, [sp, #0x5c]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x60]
+ movge r8, r4
+ b _0209574C
+_02095834:
+ ldr r1, _02095ACC ; =0x03002000
+ mov r0, r5
+ mov r2, r6
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movge r8, r4
+ ldrlt r8, [sp, #0x64]
+ b _0209574C
+_02095854:
+ ldr r1, [sp, #0x18]
+ mov r0, r5
+ mov r2, r6
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x68]
+ blt _020958E0
+ ldr r2, [sp, #0x6c]
+ mov r0, r5
+ mov r1, r7
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x70]
+ blt _020958E0
+ ldr r1, [sp, #0x1c]
+ ldr r2, [sp, #0x74]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x78]
+ blt _020958E0
+ ldr r1, [sp, #0x20]
+ ldr r2, [sp, #0x7c]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x80]
+ blt _020958E0
+ ldr r1, [sp, #0x24]
+ ldr r2, [sp, #0x84]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x88]
+ movge r8, r4
+_020958E0:
+ bl OS_GetTick
+ str r0, [sp, #0x0]
+ mov r11, r1
+ b _0209574C
+_020958F0:
+ ldr r1, [sp, #0x28]
+ mov r0, r5
+ mov r2, r6
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x8c]
+ blt _0209574C
+ ldr r1, [sp, #0x2c]
+ ldr r2, [sp, #0x90]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x94]
+ blt _0209574C
+ ldr r1, [sp, #0x30]
+ ldr r2, [sp, #0x98]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x9c]
+ movge r8, r4
+ b _0209574C
+_02095948:
+ ldr r1, _02095AD0 ; =0x03002D00
+ mov r0, r5
+ mov r2, r6
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movge r8, r4
+ ldrlt r8, [sp, #0xa0]
+ b _0209574C
+_02095968:
+ ldr r1, _02095AD4 ; =0x03002100
+ mov r0, r5
+ mov r2, r6
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movge r8, r4
+ ldrlt r8, [sp, #0xa4]
+ b _0209574C
+_02095988:
+ ldr r0, _02095AC8 ; =nv_cb_occurred
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x1
+ bne _0209574C
+ ldr r0, _02095AD8 ; =nv_result
+ ldr r8, [sp, #0xa8]
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _02095AA0
+ cmp r9, #0x7
+ addls pc, pc, r9, lsl #0x2
+ b _0209574C
+_020959B8: ; jump table
+ b _0209574C ; case 0
+ b _020959D8 ; case 1
+ b _020959E4 ; case 2
+ b _020959EC ; case 3
+ b _020959F4 ; case 4
+ b _020959F4 ; case 5
+ b _02095A88 ; case 6
+ b _02095A94 ; case 7
+_020959D8:
+ add sp, sp, #0xc4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,pc}
+_020959E4:
+ mov r9, r5
+ b _0209574C
+_020959EC:
+ ldr r9, [sp, #0xac]
+ b _0209574C
+_020959F4:
+ mov r0, r10
+ mov r1, r4
+ bl DC_InvalidateRange
+ cmp r9, #0x4
+ bne _02095A24
+ ldrb r0, [r10, #0x0]
+ ands r0, r0, #0x2
+ ldrne r9, [sp, #0xb0]
+ bne _0209574C
+ add sp, sp, #0xc4
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_02095A24:
+ ldrb r1, [r10, #0x0]
+ ands r0, r1, #0x1
+ addeq sp, sp, #0xc4
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r11,pc}
+ ands r0, r1, #0x20
+ bne _02095A74
+ bl OS_GetTick
+ ldr r2, [sp, #0x0]
+ ldr r3, [sp, #0xb4]
+ subs r2, r0, r2
+ sbc r0, r1, r11
+ mov r1, r0, lsl #0x6
+ orr r1, r1, r2, lsr #0x1a
+ mov r0, r2, lsl #0x6
+ ldr r2, _02095ADC ; =0x000082EA
+ bl _ll_udiv
+ cmp r1, #0x0
+ cmpeq r0, #0xfa0
+ bls _02095A7C
+_02095A74:
+ ldr r9, [sp, #0xb8]
+ b _0209574C
+_02095A7C:
+ ldr r0, [sp, #0xbc]
+ bl SVC_WaitByLoop
+ b _0209574C
+_02095A88:
+ add sp, sp, #0xc4
+ mov r0, r8
+ ldmia sp!, {r4-r11,pc}
+_02095A94:
+ add sp, sp, #0xc4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,pc}
+_02095AA0:
+ mov r0, r8
+ add sp, sp, #0xc4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_02095AAC: .word 0x0000FFFF
+_02095AB0: .word Work
+_02095AB4: .word 0x01050000
+_02095AB8: .word 0x02002200
+_02095ABC: .word 0x02002300
+_02095AC0: .word 0x02002500
+_02095AC4: .word 0x01020000
+_02095AC8: .word nv_cb_occurred
+_02095ACC: .word 0x03002000
+_02095AD0: .word 0x03002D00
+_02095AD4: .word 0x03002100
+_02095AD8: .word nv_result
+_02095ADC: .word 0x000082EA
+
+ arm_func_start DWC_BACKUPlCheckAddress
+DWC_BACKUPlCheckAddress:
+ ldrb r0, [r0, #0x0]
+ cmp r0, #0x7f
+ moveq r0, #0x0
+ bxeq lr
+ cmp r0, #0x1
+ movcc r0, #0x0
+ bxcc lr
+ cmp r0, #0xdf
+ movls r0, #0x1
+ movhi r0, #0x0
+ bx lr
+
+ arm_func_start DWC_BACKUPlCheckIp
+DWC_BACKUPlCheckIp:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ mov r4, r1
+ bl DWC_BACKUPlCheckAddress
+ cmp r0, #0x0
+ addeq sp, sp, #0xc
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+ add r1, sp, #0x0
+ mov r0, r5
+ mov r2, #0x4
+ bl MI_CpuCopy8
+ add r1, sp, #0x4
+ mov r0, r4
+ mov r2, #0x4
+ bl MI_CpuCopy8
+ ldr r3, [sp, #0x4]
+ ldr r2, [sp, #0x0]
+ mvn r0, #0x1
+ orr r1, r2, r3
+ cmp r1, r0
+ addeq sp, sp, #0xc
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+ mvn r0, r3
+ ands r0, r2, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start DWC_BACKUPlCheckSsid
+DWC_BACKUPlCheckSsid:
+ mov r2, #0x0
+_02095B8C:
+ ldrb r1, [r0, r2]
+ cmp r1, #0x0
+ movne r0, #0x1
+ bxne lr
+ add r2, r2, #0x1
+ cmp r2, #0x20
+ blt _02095B8C
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start DWCi_BACKUPlConvMaskAddr
+DWCi_BACKUPlConvMaskAddr: ; 0x02095BB0
+ mvn r2, #0x0
+ mov r12, #0x0
+ eor r3, r2, r2, lsr r0
+ mov r2, r12
+_02095BC0:
+ rsb r0, r2, #0x18
+ mov r0, r3, lsr r0
+ strb r0, [r1, r12]
+ add r12, r12, #0x1
+ cmp r12, #0x4
+ add r2, r2, #0x8
+ blt _02095BC0
+ bx lr
+
+ arm_func_start DWCi_BACKUPlConvMaskCidr
+DWCi_BACKUPlConvMaskCidr: ; 0x02095BE0
+ stmdb sp!, {r4,lr}
+ mov lr, #0x0
+ mov r4, lr
+ mov r2, lr
+_02095BF0:
+ ldrb r3, [r0, lr]
+ mov r12, r2
+_02095BF8:
+ mov r1, r3, asr r12
+ ands r1, r1, #0x1
+ add r12, r12, #0x1
+ addne r4, r4, #0x1
+ cmp r12, #0x8
+ blt _02095BF8
+ add lr, lr, #0x1
+ cmp lr, #0x4
+ blt _02095BF0
+ and r0, r4, #0xff
+ ldmia sp!, {r4,pc}
+
+ arm_func_start DWCi_BACKUPlSetWiFi
+DWCi_BACKUPlSetWiFi: ; 0x02095C24
+ ldr ip, _02095C34 ; =MI_CpuCopy8
+ ldr r1, _02095C38 ; =Wifi
+ mov r2, #0xe
+ bx r12
+ .balign 4
+_02095C34: .word MI_CpuCopy8
+_02095C38: .word Wifi
+
+ arm_func_start DWCi_BACKUPlWriteAll
+DWCi_BACKUPlWriteAll:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr r1, _02095CD8 ; =Address
+ mov r10, r0
+ ldr r8, [r1, #0x0]
+ mov r7, r10
+ mov r9, #0x0
+ add r4, r10, #0x400
+ add r6, r10, #0x500
+ mov r5, #0x100
+ mov r11, #0xfe
+_02095C68:
+ mov r0, r6
+ mov r1, r7
+ mov r2, r11
+ bl MATH_CalcCRC16
+ add r1, r10, r9, lsl #0x8
+ strh r0, [r1, #0xfe]
+_02095C80:
+ mov r0, r8
+ mov r1, r5
+ mov r2, r7
+ bl writeNvram
+ mov r0, r7
+ mov r1, r8
+ mov r2, r5
+ mov r3, r4
+ bl verify
+ cmp r0, #0x0
+ beq _02095C80
+ add r9, r9, #0x1
+ cmp r9, #0x4
+ add r7, r7, #0x100
+ add r8, r8, #0x100
+ blt _02095C68
+ bl writeDisable
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_02095CD8: .word Address
+
+ arm_func_start DWCi_BACKUPlWritePage
+DWCi_BACKUPlWritePage: ; 0x02095CDC
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r3, _02095D64 ; =Address
+ mov r4, r0
+ ldr r6, [r3, #0x0]
+ mov r9, r1
+ mov r8, r2
+ mov r7, #0x0
+ mov r5, #0x100
+_02095D00:
+ ldr r0, [r9, r7, lsl #0x2]
+ cmp r0, #0x0
+ beq _02095D38
+_02095D0C:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl writeNvram
+ mov r0, r4
+ mov r1, r6
+ mov r2, r5
+ mov r3, r8
+ bl verify
+ cmp r0, #0x0
+ beq _02095D0C
+_02095D38:
+ add r7, r7, #0x1
+ cmp r7, #0x4
+ add r4, r4, #0x100
+ add r6, r6, #0x100
+ blt _02095D00
+ bl writeDisable
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_02095D64: .word Address
+
+ arm_func_start DWCi_BACKUPlRead
+DWCi_BACKUPlRead:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _02095D98 ; =Address
+ mov r2, r0
+ ldr r0, [r1, #0x0]
+ mov r1, #0x400
+ bl readNvram
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_02095D98: .word Address
+
+ arm_func_start DWCi_BACKUPlInit
+DWCi_BACKUPlInit:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, #0x20
+ mov r1, r0
+ mov r2, r4
+ bl readNvram
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ ldrh r2, [r4, #0x0]
+ ldr r1, _02095DDC ; =Address
+ mov r0, #0x1
+ mov r2, r2, lsl #0x3
+ sub r2, r2, #0x400
+ str r2, [r1, #0x0]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_02095DDC: .word Address
+
+ arm_func_start DWCi_BM_SetWiFiInfo
+DWCi_BM_SetWiFiInfo:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr r2, _02095EBC ; =Address
+ mov r10, r1
+ ldr r8, [r2, #0x0]
+ bl DWCi_BACKUPlConvWifiInfo
+ ldr r1, _02095EC0 ; =0x0000A001
+ add r0, r10, #0x200
+ bl MATHi_CRC16InitTableRev
+ mov r9, #0x0
+ add r4, r10, #0x100
+ add r6, r10, #0xf0
+ mov r7, #0x100
+ mov r5, #0xe
+ mov r11, #0xfe
+_02095E1C:
+ mov r0, r8
+ mov r1, r7
+ mov r2, r10
+ bl readNvram
+ cmp r0, #0x0
+ bne _02095E44
+ bl OS_Terminate
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_02095E44:
+ ldr r0, _02095EC4 ; =Wifi
+ mov r1, r6
+ mov r2, r5
+ bl MI_CpuCopy8
+ mov r1, r10
+ mov r2, r11
+ add r0, r10, #0x200
+ bl MATH_CalcCRC16
+ strh r0, [r10, #0xfe]
+_02095E68:
+ mov r0, r8
+ mov r1, r7
+ mov r2, r10
+ bl writeNvram
+ mov r0, r10
+ mov r1, r8
+ mov r2, r7
+ mov r3, r4
+ bl verify
+ cmp r0, #0x0
+ beq _02095E68
+ add r9, r9, #0x1
+ cmp r9, #0x2
+ add r8, r8, #0x100
+ blt _02095E1C
+ bl writeDisable
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_02095EBC: .word Address
+_02095EC0: .word 0x0000A001
+_02095EC4: .word Wifi
+
+ arm_func_start DWCi_BM_GetWiFiInfo
+DWCi_BM_GetWiFiInfo:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, _02095F90 ; =Wifi
+ mov r1, r4
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ ldr r3, [r4, #0x0]
+ mvn r0, #0x0
+ ldr r2, [r4, #0x4]
+ ldr r1, _02095F94 ; =0x000007FF
+ and r0, r3, r0
+ str r0, [r4, #0x0]
+ and r1, r2, r1
+ ldr r0, _02095F98 ; =Wifi + 0x5
+ str r1, [r4, #0x4]
+ add r1, r4, #0x8
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ add r12, r4, #0x8
+ ldr r1, [r4, #0x8]
+ ldr r0, [r12, #0x4]
+ mov r1, r1, lsr #0x3
+ orr r1, r1, r0, lsl #0x1d
+ str r1, [r4, #0x8]
+ mov r0, r0, lsr #0x3
+ str r0, [r12, #0x4]
+ ldr r3, [r4, #0x8]
+ mvn r0, #0x0
+ ldr r2, [r12, #0x4]
+ ldr r1, _02095F94 ; =0x000007FF
+ and r0, r3, r0
+ str r0, [r4, #0x8]
+ and r1, r2, r1
+ ldr r0, _02095F9C ; =Wifi + 0xa
+ str r1, [r12, #0x4]
+ add r1, r4, #0x10
+ mov r2, #0x2
+ bl MI_CpuCopy8
+ ldrh r1, [r4, #0x10]
+ ldr r3, _02095FA0 ; =0x000003FF
+ ldr r0, _02095FA4 ; =Wifi + 0xc
+ mov r1, r1, asr #0x6
+ strh r1, [r4, #0x10]
+ ldrh r12, [r4, #0x10]
+ add r1, r4, #0x12
+ mov r2, #0x2
+ and r3, r12, r3
+ strh r3, [r4, #0x10]
+ bl MI_CpuCopy8
+ ldmia sp!, {r4,pc}
+ .balign 4
+_02095F90: .word Wifi
+_02095F94: .word 0x000007FF
+_02095F98: .word Wifi + 0x5
+_02095F9C: .word Wifi + 0xa
+_02095FA0: .word 0x000003FF
+_02095FA4: .word Wifi + 0xc
+
+ arm_func_start DWCi_BM_GetApInfo
+DWCi_BM_GetApInfo: ; 0x02095FA8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _02095FD8 ; =Address
+ mov r2, r0
+ ldr r0, [r1, #0x0]
+ mov r1, #0x300
+ bl readNvram
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_02095FD8: .word Address
diff --git a/arm9/asm/DWC_bm_init.s b/arm9/asm/DWC_bm_init.s
new file mode 100644
index 00000000..038abe94
--- /dev/null
+++ b/arm9/asm/DWC_bm_init.s
@@ -0,0 +1,357 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .rodata
+
+ .global DWCi_SETTING_NONE
+DWCi_SETTING_NONE: ; 0x020FF574
+ .byte 0x00, 0x00, 0x00, 0x00
+
+ .text
+
+ arm_func_start initPage
+initPage: ; 0x02095FDC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ add r1, r5, r4, lsl #0x8
+ mov r0, #0x0
+ mov r2, #0x100
+ bl MIi_CpuClear16
+ add r0, r5, r4, lsl #0x8
+ mov r1, #0xff
+ strb r1, [r0, #0xe7]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start init
+init: ; 0x02096010
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x14
+ mov r7, r0
+ mov r1, r7
+ mov r0, #0x0
+ mov r2, #0x400
+ bl MIi_CpuClear16
+ mov r2, #0x0
+ mov r1, #0xff
+_02096034:
+ add r0, r7, r2, lsl #0x8
+ add r2, r2, #0x1
+ strb r1, [r0, #0xe7]
+ cmp r2, #0x3
+ blt _02096034
+ add r0, sp, #0x0
+ bl DWCi_AUTH_GetNewWiFiInfo
+ add r0, sp, #0x0
+ bl DWCi_BACKUPlConvWifiInfo
+ mov r6, r0
+ mov r5, #0x0
+ mov r4, #0xe
+_02096064:
+ mov r0, r6
+ mov r2, r4
+ add r1, r7, #0xf0
+ bl MI_CpuCopy8
+ add r5, r5, #0x1
+ cmp r5, #0x2
+ add r7, r7, #0x100
+ blt _02096064
+ mov r0, #0x0
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start checkAp
+checkAp:
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ mov r4, r0
+ ldrb r0, [r4, #0xe7]
+ cmp r0, #0xff
+ addeq sp, sp, #0x8
+ moveq r0, #0x1
+ ldmeqia sp!, {r4,pc}
+ cmp r0, #0x2
+ addhi sp, sp, #0x8
+ movhi r0, #0x0
+ ldmhiia sp!, {r4,pc}
+ add r0, r4, #0x40
+ bl DWC_BACKUPlCheckSsid
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ ldr r1, _0209618C ; =DWCi_SETTING_NONE
+ add r0, r4, #0xc0
+ mov r2, #0x4
+ bl memcmp
+ cmp r0, #0x0
+ beq _02096140
+ add r0, r4, #0xc4
+ bl DWC_BACKUPlCheckAddress
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ ldrb r0, [r4, #0xd0]
+ cmp r0, #0x20
+ addhi sp, sp, #0x8
+ movhi r0, #0x0
+ ldmhiia sp!, {r4,pc}
+ add r1, sp, #0x0
+ bl DWCi_BACKUPlConvMaskAddr
+ add r1, sp, #0x0
+ add r0, r4, #0xc0
+ bl DWC_BACKUPlCheckIp
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_02096140:
+ ldr r1, _0209618C ; =DWCi_SETTING_NONE
+ add r0, r4, #0xc8
+ mov r2, #0x4
+ bl memcmp
+ cmp r0, #0x0
+ beq _02096180
+ add r0, r4, #0xc8
+ bl DWC_BACKUPlCheckAddress
+ cmp r0, #0x0
+ bne _02096180
+ add r0, r4, #0xcc
+ bl DWC_BACKUPlCheckAddress
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_02096180:
+ mov r0, #0x1
+ add sp, sp, #0x8
+ ldmia sp!, {r4,pc}
+ .balign 4
+_0209618C: .word DWCi_SETTING_NONE
+
+ arm_func_start DWC_BM_Init
+DWC_BM_Init: ; 0x02096190
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r10, r0
+ mov r1, #0x0
+ mov r2, #0x700
+ bl MI_CpuFill8
+ mov r0, r10
+ bl DWCi_BACKUPlInit
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ ldreq r0, _020964B4 ; =0xFFFFD8EF
+ ldmeqia sp!, {r4-r11,pc}
+ ldr r1, _020964B8 ; =0x0000A001
+ add r0, r10, #0x500
+ bl MATHi_CRC16InitTableRev
+ mov r0, r10
+ bl DWCi_BACKUPlRead
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ ldreq r0, _020964B4 ; =0xFFFFD8EF
+ ldmeqia sp!, {r4-r11,pc}
+ add r0, sp, #0x0
+ mov r1, #0x0
+ mov r2, #0x10
+ bl MI_CpuFill8
+ mov r8, r10
+ mov r7, r10
+ mov r9, #0x0
+ add r11, sp, #0x0
+ add r6, r10, #0x500
+ mov r4, #0x1
+ mov r5, #0xfe
+_02096210:
+ mov r0, r6
+ mov r1, r8
+ mov r2, r5
+ bl MATH_CalcCRC16
+ add r1, r10, r9, lsl #0x8
+ ldrh r1, [r1, #0xfe]
+ cmp r0, r1
+ bne _02096240
+ mov r0, r7
+ bl checkAp
+ cmp r0, #0x0
+ strne r4, [r11, r9, lsl #0x2]
+_02096240:
+ add r9, r9, #0x1
+ cmp r9, #0x3
+ add r8, r8, #0x100
+ add r7, r7, #0x100
+ blt _02096210
+ add r0, r10, #0x500
+ add r1, r10, #0x300
+ mov r2, #0xfe
+ bl MATH_CalcCRC16
+ add r1, r10, #0x300
+ ldrh r1, [r1, #0xfe]
+ cmp r0, r1
+ moveq r0, #0x1
+ ldr r1, [sp, #0x0]
+ streq r0, [sp, #0xc]
+ cmp r1, #0x0
+ beq _020962BC
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _020962BC
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ beq _020962BC
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ beq _020962BC
+ add r0, r10, #0xf0
+ bl DWCi_BACKUPlSetWiFi
+ add sp, sp, #0x14
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_020962BC:
+ cmp r1, #0x0
+ bne _0209630C
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ bne _0209630C
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ bne _0209630C
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ bne _0209630C
+ mov r0, r10
+ bl init
+ mov r0, r10
+ bl DWCi_BACKUPlWriteAll
+ cmp r0, #0x0
+ movne r0, #0x0
+ add sp, sp, #0x14
+ ldreq r0, _020964BC ; =0xFFFFD8F0
+ ldmia sp!, {r4-r11,pc}
+_0209630C:
+ cmp r1, #0x0
+ beq _02096320
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ bne _0209635C
+_02096320:
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ beq _02096338
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ bne _0209635C
+_02096338:
+ mov r0, r10
+ bl init
+ mov r0, r10
+ bl DWCi_BACKUPlWriteAll
+ cmp r0, #0x0
+ movne r0, #0x0
+ add sp, sp, #0x14
+ ldreq r0, _020964BC ; =0xFFFFD8F0
+ ldmia sp!, {r4-r11,pc}
+_0209635C:
+ cmp r1, #0x0
+ bne _02096394
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ bne _02096394
+ mov r0, r10
+ bl init
+ mov r0, r10
+ bl DWCi_BACKUPlWriteAll
+ cmp r0, #0x0
+ ldrne r0, _020964C0 ; =0xFFFFD8ED
+ add sp, sp, #0x14
+ ldreq r0, _020964BC ; =0xFFFFD8F0
+ ldmia sp!, {r4-r11,pc}
+_02096394:
+ cmp r1, #0x0
+ bne _020963C4
+ mov r0, r10
+ mov r1, #0x0
+ bl initPage
+ add r0, r10, #0x1f0
+ add r1, r10, #0xf0
+ mov r2, #0xe
+ bl MI_CpuCopy8
+ ldrb r0, [r10, #0x1ef]
+ strb r0, [r10, #0xef]
+ b _020963F4
+_020963C4:
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ bne _020963F4
+ mov r0, r10
+ mov r1, #0x1
+ bl initPage
+ add r0, r10, #0xf0
+ add r1, r10, #0x1f0
+ mov r2, #0xe
+ bl MI_CpuCopy8
+ ldrb r0, [r10, #0xef]
+ strb r0, [r10, #0x1ef]
+_020963F4:
+ add r0, r10, #0xf0
+ bl DWCi_BACKUPlSetWiFi
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ bne _02096414
+ mov r0, r10
+ mov r1, #0x2
+ bl initPage
+_02096414:
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ bne _02096430
+ add r1, r10, #0x300
+ mov r0, #0x0
+ mov r2, #0x100
+ bl MIi_CpuClear16
+_02096430:
+ mov r4, #0x0
+ mov r1, r4
+ add r0, sp, #0x0
+ add r5, r10, #0xef
+ mov r6, #0x1
+_02096444:
+ ldr r2, [r0, r1, lsl #0x2]
+ cmp r2, #0x0
+ bne _0209647C
+ ldrb r2, [r10, #0xef]
+ mov r7, r6, lsl r1
+ ands r2, r2, r7
+ beq _0209647C
+ ldrb r3, [r5, #0x0]
+ mvn r2, r7
+ mov r4, r6
+ and r2, r3, r2
+ strb r2, [r5, #0x0]
+ ldrb r2, [r10, #0xef]
+ strb r2, [r10, #0x1ef]
+_0209647C:
+ add r1, r1, #0x1
+ cmp r1, #0x3
+ blt _02096444
+ mov r0, r10
+ bl DWCi_BACKUPlWriteAll
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ ldreq r0, _020964BC ; =0xFFFFD8F0
+ ldmeqia sp!, {r4-r11,pc}
+ cmp r4, #0x0
+ ldrne r0, _020964C4 ; =0xFFFFD8EE
+ moveq r0, #0x0
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020964B4: .word 0xFFFFD8EF
+_020964B8: .word 0x0000A001
+_020964BC: .word 0xFFFFD8F0
+_020964C0: .word 0xFFFFD8ED
+_020964C4: .word 0xFFFFD8EE
diff --git a/arm9/asm/DWC_init.s b/arm9/asm/DWC_init.s
new file mode 100644
index 00000000..24395f70
--- /dev/null
+++ b/arm9/asm/DWC_init.s
@@ -0,0 +1,37 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ .extern _SDK_NintendoDWC
+
+ arm_func_start DWC_Init
+DWC_Init: ; 0x02096B14
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldr r0, _02096B74 ; =_SDK_NintendoDWC
+ mov r4, #0x0
+ bl OSi_ReferSymbol
+ mov r0, r6
+ bl DWC_BM_Init
+ mov r5, r0
+ bl DWC_Auth_CheckWiFiIDNeedCreate
+ cmp r0, #0x0
+ beq _02096B4C
+ mov r0, r6
+ bl DWCi_AUTH_MakeWiFiID
+ mov r4, #0x1
+_02096B4C:
+ cmp r5, #0x0
+ bge _02096B64
+ cmp r4, #0x0
+ movne r0, #0x2
+ moveq r0, #0x3
+ ldmia sp!, {r4-r6,pc}
+_02096B64:
+ cmp r4, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_02096B74: .word _SDK_NintendoDWC
diff --git a/arm9/asm/DWC_report.s b/arm9/asm/DWC_report.s
new file mode 100644
index 00000000..1a4b032e
--- /dev/null
+++ b/arm9/asm/DWC_report.s
@@ -0,0 +1,2 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
diff --git a/arm9/asm/DWC_util_wifiidtool.s b/arm9/asm/DWC_util_wifiidtool.s
new file mode 100644
index 00000000..660db18e
--- /dev/null
+++ b/arm9/asm/DWC_util_wifiidtool.s
@@ -0,0 +1,458 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .rodata
+
+ .global UNK_020FF578
+UNK_020FF578: ; 0x020FF578
+ .byte 0x01, 0x02, 0x00, 0x04, 0x03, 0x05, 0x06, 0x07
+
+ .global UNK_020FF580
+UNK_020FF580: ; 0x020FF580
+ .byte 0x05, 0x09, 0x01, 0x0E, 0x0C, 0x02, 0x0A, 0x00, 0x0B, 0x0D, 0x03, 0x04, 0x08, 0x06, 0x0F, 0x07
+
+ .text
+
+ arm_func_start DWC_Auth_CheckWiFiIDNeedCreate
+DWC_Auth_CheckWiFiIDNeedCreate:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x14
+ add r0, sp, #0x0
+ bl DWCi_BM_GetWiFiInfo
+ ldr r2, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ mov r0, #0x0
+ cmp r1, r0
+ cmpeq r2, r0
+ bne _0209650C
+ ldr r1, [sp, #0x4]
+ ldr r2, [sp, #0x0]
+ cmp r1, r0
+ cmpeq r2, r0
+ addeq sp, sp, #0x14
+ moveq r0, #0x1
+ ldmeqia sp!, {pc}
+_0209650C:
+ mov r0, #0x0
+ add sp, sp, #0x14
+ ldmia sp!, {pc}
+
+ arm_func_start DWC_Auth_GetId
+DWC_Auth_GetId: ; 0x02096518
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x18
+ mov r4, r0
+ add r0, sp, #0x0
+ bl DWCi_BM_GetWiFiInfo
+ add r0, sp, #0x0
+ ldmia r0, {r2-r3}
+ stmia r4, {r2-r3}
+ add r1, sp, #0x8
+ add r0, r4, #0x8
+ ldmia r1, {r2-r3}
+ stmia r0, {r2-r3}
+ ldr r2, [sp, #0x0]
+ ldr r1, [sp, #0x4]
+ mov r0, #0x0
+ cmp r1, r0
+ cmpeq r2, r0
+ streq r0, [r4, #0x10]
+ movne r0, #0x1
+ strne r0, [r4, #0x10]
+ add sp, sp, #0x18
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_02096570
+FUN_02096570: ; 0x02096570
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x28
+ add r2, sp, #0x0
+ mov r1, #0x0
+ strb r1, [r2, #0x0]
+ strb r1, [r2, #0x1]
+ strb r1, [r2, #0x2]
+ strb r1, [r2, #0x3]
+ strb r1, [r2, #0x4]
+ mov r5, r0
+ strb r1, [r2, #0x5]
+ bl DWCi_BM_GetWiFiInfo
+ bl RTC_Init
+ add r0, sp, #0x8
+ bl RTC_GetDate
+ cmp r0, #0x0
+ addne sp, sp, #0x28
+ movne r0, #0x0
+ ldmneia sp!, {r4-r10,pc}
+ add r0, sp, #0x18
+ bl RTC_GetTime
+ cmp r0, #0x0
+ addne sp, sp, #0x28
+ movne r0, #0x0
+ ldmneia sp!, {r4-r10,pc}
+ add r0, sp, #0x8
+ add r1, sp, #0x18
+ bl RTC_ConvertDateTimeToSecond
+ mov r4, r0
+ mov r0, #0x0
+ subs r2, r4, r0
+ sbcs r2, r1, r0
+ addlt sp, sp, #0x28
+ ldmltia sp!, {r4-r10,pc}
+ bl OS_IsTickAvailable
+ cmp r0, #0x0
+ beq _0209660C
+ ldr r0, _02096700 ; =OS_GetTick
+ adds r4, r4, r0
+_0209660C:
+ add r0, sp, #0x0
+ bl OS_GetMacAddress
+ ldrb r1, [sp, #0x0]
+ ldr r6, _02096704 ; =0x5D588B65
+ ldr r7, _02096708 ; =0x00269EC3
+ ldrb r0, [sp, #0x1]
+ mla r9, r4, r6, r7
+ mov r1, r1, lsl #0x10
+ orr r1, r1, r0, lsl #0x8
+ ldrb r2, [sp, #0x2]
+ ldr r0, _0209670C ; =0x000009BF
+ ldrb r8, [sp, #0x3]
+ orr r1, r2, r1
+ cmp r1, r0
+ movne r1, #0x1
+ mov r2, r9, lsr #0x10
+ mov r0, #0x3e8
+ mul r3, r2, r0
+ mov r2, r3, lsr #0x10
+ mov r3, r8, lsl #0x10
+ ldrb r4, [sp, #0x4]
+ ldrb r0, [sp, #0x5]
+ mov r8, #0x0
+ orr r10, r3, r4, lsl #0x8
+ strh r2, [r5, #0x10]
+ str r8, [r5, #0x8]
+ str r8, [r5, #0xc]
+ moveq r1, #0x0
+ ldr r2, [r5, #0xc]
+ ldr r3, [r5, #0x8]
+ cmp r2, r8
+ cmpeq r3, r8
+ and r4, r1, #0xff
+ orr r10, r0, r10
+ bne _020966F4
+_02096698:
+ mla r9, r6, r9, r7
+ b _020966A4
+_020966A0:
+ mla r9, r6, r9, r7
+_020966A4:
+ cmp r9, #0x0
+ beq _020966A0
+ ldrh r1, [r5, #0x12]
+ mov r0, r9, lsl #0x10
+ mov r0, r0, lsr #0x10
+ cmp r1, r0
+ beq _020966A0
+ strh r0, [r5, #0x12]
+ ldrh r0, [r5, #0x12]
+ mov r1, r10
+ mov r2, r4
+ mov r3, r8
+ bl FUN_02096988
+ str r0, [r5, #0x8]
+ str r1, [r5, #0xc]
+ ldr r0, [r5, #0xc]
+ ldr r1, [r5, #0x8]
+ cmp r0, r8
+ cmpeq r1, r8
+ beq _02096698
+_020966F4:
+ mov r0, #0x1
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_02096700: .word OS_GetTick
+_02096704: .word 0x5D588B65
+_02096708: .word 0x00269EC3
+_0209670C: .word 0x000009BF
+
+ arm_func_start FUN_02096710
+FUN_02096710: ; 0x02096710
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x14
+ mov r5, r0
+ add r0, sp, #0x0
+ mov r4, r1
+ bl DWCi_BM_GetWiFiInfo
+ add r12, r5, #0x8
+ ldmia r12, {r2-r3}
+ stmia r5, {r2-r3}
+ add r1, sp, #0x8
+ ldmia r1, {r2-r3}
+ mov r0, r5
+ mov r1, r4
+ stmia r12, {r2-r3}
+ bl DWCi_BM_SetWiFiInfo
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start DWCi_AUTH_MakeWiFiID
+DWCi_AUTH_MakeWiFiID: ; 0x02096760
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x18
+ mov r4, r0
+ add r0, sp, #0x0
+ bl DWCi_AUTH_GetNewWiFiInfo
+ cmp r0, #0x0
+ addeq sp, sp, #0x18
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ add r0, sp, #0x0
+ mov r1, r4
+ bl DWCi_BM_SetWiFiInfo
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x18
+ ldmia sp!, {r4,pc}
+
+ arm_func_start DWCi_AUTH_GetNewWiFiInfo
+DWCi_AUTH_GetNewWiFiInfo:
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x28
+ mov r8, r0
+ bl DWCi_BM_GetWiFiInfo
+ bl RTC_Init
+ add r0, sp, #0x8
+ bl RTC_GetDate
+ cmp r0, #0x0
+ addne sp, sp, #0x28
+ movne r0, #0x0
+ ldmneia sp!, {r4-r10,pc}
+ add r0, sp, #0x18
+ bl RTC_GetTime
+ cmp r0, #0x0
+ addne sp, sp, #0x28
+ movne r0, #0x0
+ ldmneia sp!, {r4-r10,pc}
+ add r0, sp, #0x8
+ add r1, sp, #0x18
+ bl RTC_ConvertDateTimeToSecond
+ mov r4, r0
+ mov r0, #0x0
+ subs r2, r4, r0
+ sbcs r2, r1, r0
+ addlt sp, sp, #0x28
+ ldmltia sp!, {r4-r10,pc}
+ bl OS_IsTickAvailable
+ cmp r0, #0x0
+ beq _02096820
+ ldr r0, _02096978 ; =OS_GetTick
+ adds r4, r4, r0
+_02096820:
+ add r0, sp, #0x0
+ bl OS_GetMacAddress
+ ldrb r1, [sp, #0x0]
+ ldr sb, _0209697C ; =0x5D588B65
+ ldr sl, _02096980 ; =0x00269EC3
+ ldrb r0, [sp, #0x1]
+ mla r5, r4, r9, r10
+ mov r1, r1, lsl #0x10
+ orr r1, r1, r0, lsl #0x8
+ ldrb r2, [sp, #0x2]
+ ldr r0, _02096984 ; =0x000009BF
+ ldrb r6, [sp, #0x3]
+ orr r1, r2, r1
+ cmp r1, r0
+ movne r1, #0x1
+ moveq r1, #0x0
+ mov r2, r5, lsr #0x10
+ mov r0, #0x3e8
+ mul r3, r2, r0
+ mov r2, r3, lsr #0x10
+ ldrb r0, [sp, #0x5]
+ ldrb r4, [sp, #0x4]
+ mov r3, r6, lsl #0x10
+ and r7, r1, #0xff
+ orr r3, r3, r4, lsl #0x8
+ strh r2, [r8, #0x10]
+ mov r4, #0x0
+ str r4, [r8, #0x0]
+ str r4, [r8, #0x4]
+ ldrh r2, [r8, #0x12]
+ orr r6, r0, r3
+ cmp r2, #0x0
+ bne _02096910
+ str r4, [r8, #0x8]
+ str r4, [r8, #0xc]
+ ldr r0, [r8, #0xc]
+ ldr r1, [r8, #0x8]
+ cmp r0, r4
+ cmpeq r1, r4
+ bne _0209696C
+_020968C0:
+ mul r0, r5, r9
+ adds r5, r0, r10
+ bne _020968D8
+_020968CC:
+ mul r0, r5, r9
+ adds r5, r0, r10
+ beq _020968CC
+_020968D8:
+ strh r5, [r8, #0x12]
+ ldrh r0, [r8, #0x12]
+ mov r1, r6
+ mov r2, r7
+ mov r3, r4
+ bl FUN_02096988
+ str r0, [r8, #0x8]
+ str r1, [r8, #0xc]
+ ldr r0, [r8, #0xc]
+ ldr r1, [r8, #0x8]
+ cmp r0, r4
+ cmpeq r1, #0x0
+ beq _020968C0
+ b _0209696C
+_02096910:
+ str r4, [r8, #0x8]
+ str r4, [r8, #0xc]
+ ldr r0, [r8, #0xc]
+ ldr r1, [r8, #0x8]
+ cmp r0, r4
+ cmpeq r1, r4
+ bne _0209696C
+ add r5, r8, #0x12
+_02096930:
+ ldrh r0, [r5, #0x0]
+ mov r1, r6
+ mov r2, r7
+ add r0, r0, #0x1
+ strh r0, [r5, #0x0]
+ ldrh r0, [r8, #0x12]
+ mov r3, r4
+ bl FUN_02096988
+ str r0, [r8, #0x8]
+ str r1, [r8, #0xc]
+ ldr r0, [r8, #0xc]
+ ldr r1, [r8, #0x8]
+ cmp r0, r4
+ cmpeq r1, r4
+ beq _02096930
+_0209696C:
+ mov r0, #0x1
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_02096978: .word OS_GetTick
+_0209697C: .word 0x5D588B65
+_02096980: .word 0x00269EC3
+_02096984: .word 0x000009BF
+
+ arm_func_start FUN_02096988
+FUN_02096988: ; 0x02096988
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x14
+ mov lr, #0x0
+ and r12, lr, #0x0
+ mvn r5, #0xff000000
+ ldr r4, _02096B08 ; =0x0000FFFF
+ and r2, r2, #0x1
+ mov r6, r12, lsl #0x2
+ and r3, r3, #0x3
+ and r5, r1, r5
+ orr r1, r3, r2, lsl #0x2
+ orr r6, r6, r2, lsr #0x1e
+ mov r7, r12, lsl #0x3
+ and r2, r0, r4
+ orr r0, r1, r5, lsl #0x3
+ orr r1, r0, r2, lsl #0x1b
+ mov r3, r12, lsl #0x1b
+ orr r3, r3, r2, lsr #0x5
+ orr r7, r7, r5, lsr #0x1d
+ orr r0, r12, r6
+ orr r0, r7, r0
+ orr r0, r3, r0
+ add r2, sp, #0x0
+ str r1, [sp, #0x0]
+ str r0, [sp, #0x4]
+_020969EC:
+ ldrb r0, [r2, #0x0]
+ add lr, lr, #0x1
+ cmp lr, #0x6
+ eor r0, r0, #0xd6
+ strb r0, [r2], #0x1
+ blt _020969EC
+ ldr r2, _02096B0C ; =UNK_020FF580
+ add r5, sp, #0x0
+ mov r4, #0x0
+_02096A10:
+ ldrb r3, [r5, #0x0]
+ add r4, r4, #0x1
+ cmp r4, #0x5
+ mov r0, r3, asr #0x4
+ and r1, r0, #0xf
+ and r0, r3, #0xf
+ ldrb r1, [r2, r1]
+ ldrb r0, [r2, r0]
+ orr r0, r0, r1, lsl #0x4
+ strb r0, [r5], #0x1
+ blt _02096A10
+ add r0, sp, #0x0
+ add r1, sp, #0x8
+ mov r2, #0x8
+ bl MI_CpuCopy8
+ ldr r4, _02096B10 ; =UNK_020FF578
+ add r5, sp, #0x8
+ mov r3, #0x0
+ add r1, sp, #0x0
+_02096A5C:
+ ldrb r2, [r5, #0x0]
+ ldrb r0, [r4, #0x0]
+ add r3, r3, #0x1
+ cmp r3, #0x5
+ strb r2, [r1, r0]
+ add r5, r5, #0x1
+ add r4, r4, #0x1
+ blt _02096A5C
+ ldrb r2, [sp, #0x5]
+ mov r0, #0x0
+ ldr r3, [sp, #0x0]
+ and r2, r2, #0x7
+ strb r0, [sp, #0x7]
+ strb r0, [sp, #0x6]
+ strb r2, [sp, #0x5]
+ ldr r2, [sp, #0x4]
+ mov r4, r3, lsl #0x1
+ mov r2, r2, lsl #0x1
+ orr r2, r2, r3, lsr #0x1f
+ str r2, [sp, #0x4]
+ ldrb r2, [sp, #0x5]
+ str r4, [sp, #0x0]
+ ldrb r3, [sp, #0x0]
+ mov r2, r2, asr #0x3
+ and r2, r2, #0x1
+ orr r2, r3, r2
+ strb r2, [sp, #0x0]
+_02096AC8:
+ ldrb r2, [r1, #0x0]
+ add r0, r0, #0x1
+ cmp r0, #0x6
+ eor r2, r2, #0x67
+ strb r2, [r1], #0x1
+ blt _02096AC8
+ ldrb r0, [sp, #0x5]
+ mov r1, #0x0
+ strb r1, [sp, #0x7]
+ and r0, r0, #0x7
+ strb r1, [sp, #0x6]
+ strb r0, [sp, #0x5]
+ ldr r0, [sp, #0x0]
+ ldr r1, [sp, #0x4]
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_02096B08: .word 0x0000FFFF
+_02096B0C: .word UNK_020FF580
+_02096B10: .word UNK_020FF578
diff --git a/arm9/asm/unk_020281E0.s b/arm9/asm/unk_020281E0.s
index e7c3eeb8..edf5e64f 100644
--- a/arm9/asm/unk_020281E0.s
+++ b/arm9/asm/unk_020281E0.s
@@ -347,7 +347,7 @@ _0202843A:
add r5, #0x40
mul r0, r4
add r0, r5, r0
- bl FUN_0209700C
+ bl DWC_IsValidFriendData
pop {r3-r5, pc}
thumb_func_start FUN_02028448
diff --git a/arm9/asm/unk_0202DB14.s b/arm9/asm/unk_0202DB14.s
index be2e9a54..1af52e10 100644
--- a/arm9/asm/unk_0202DB14.s
+++ b/arm9/asm/unk_0202DB14.s
@@ -198,7 +198,7 @@ FUN_0202DBE0: ; 0x0202DBE0
ldr r1, [r1, #0x0]
add r1, #0x48
add r1, r1, r5
- bl FUN_02096CCC
+ bl DWC_CreateExchangeToken
ldr r0, _0202DCD8 ; =UNK_021C59E4
mov r1, #0x0
ldr r0, [r0, #0x0]
diff --git a/arm9/asm/unk_020337E8.s b/arm9/asm/unk_020337E8.s
index 34148259..d535c8fc 100644
--- a/arm9/asm/unk_020337E8.s
+++ b/arm9/asm/unk_020337E8.s
@@ -13,7 +13,7 @@ FUN_020337E8: ; 0x020337E8
add r0, #0x1f
mov r1, #0x1f
bic r0, r1
- bl FUN_02096B14
+ bl DWC_Init
add r5, r0, #0x0
add r0, r4, #0x0
bl FUN_02016A18
@@ -26,14 +26,14 @@ FUN_0203380C: ; 0x0203380C
push {r4, lr}
bl FUN_02028228
add r4, r0, #0x0
- bl FUN_02096FB0
+ bl DWC_CheckUserData
cmp r0, #0x0
bne _0203382A
ldr r1, _0203382C ; =0x4144414A
add r0, r4, #0x0
- bl thunk_FUN_02097190
+ bl DWC_CreateUserData
add r0, r4, #0x0
- bl thunk_FUN_02096e4c
+ bl DWC_ClearDirtyFlag
_0203382A:
pop {r4, pc}
.balign 4
@@ -46,10 +46,10 @@ FUN_02033830: ; 0x02033830
bl FUN_02028228
add r4, r0, #0x0
add r1, sp, #0x0
- bl FUN_02096CCC
+ bl DWC_CreateExchangeToken
add r0, r4, #0x0
add r1, sp, #0x0
- bl FUN_02096DA0
+ bl DWC_GetGsProfileId
add sp, #0xc
pop {r3-r4, pc}
@@ -59,11 +59,11 @@ FUN_0203384C: ; 0x0203384C
bl FUN_020286EC
bl FUN_02028228
add r4, r0, #0x0
- bl FUN_02096F80
+ bl DWC_CheckHasProfile
cmp r0, #0x0
beq _0203386E
add r0, r4, #0x0
- bl FUN_02096F18
+ bl DWC_CheckValidConsole
cmp r0, #0x0
beq _0203386E
mov r0, #0x1
diff --git a/arm9/asm/unk_02033874.s b/arm9/asm/unk_02033874.s
index 1a099779..a321f397 100644
--- a/arm9/asm/unk_02033874.s
+++ b/arm9/asm/unk_02033874.s
@@ -23,7 +23,7 @@ FUN_02033874: ; 0x02033874
mvn r1, r1
str r1, [r0, #0x0]
add r0, r5, #0x0
- bl FUN_0209700C
+ bl DWC_IsValidFriendData
cmp r0, #0x0
bne _020338AE
add sp, #0x8
@@ -34,7 +34,7 @@ _020338AE:
_020338B0:
add r0, r5, #0x0
add r1, r4, #0x0
- bl FUN_02096B78
+ bl DWC_IsEqualFriendData
cmp r0, #0x0
beq _020338C6
ldr r0, [sp, #0x0]
@@ -45,16 +45,16 @@ _020338B0:
_020338C6:
add r0, r6, #0x0
add r1, r5, #0x0
- bl FUN_02096DA0
+ bl DWC_GetGsProfileId
cmp r0, #0x0
ble _020338F4
add r0, r6, #0x0
add r1, r5, #0x0
- bl FUN_02096DA0
+ bl DWC_GetGsProfileId
str r0, [sp, #0x4]
add r0, r6, #0x0
add r1, r4, #0x0
- bl FUN_02096DA0
+ bl DWC_GetGsProfileId
ldr r1, [sp, #0x4]
cmp r1, r0
bne _020338F4
@@ -69,7 +69,7 @@ _020338F4:
cmp r0, #0x0
bge _0203390A
add r0, r4, #0x0
- bl FUN_0209700C
+ bl DWC_IsValidFriendData
cmp r0, #0x0
bne _0203390A
ldr r0, [sp, #0x0]
@@ -102,7 +102,7 @@ FUN_02033918: ; 0x02033918
ldr r1, [sp, #0x0]
ldr r2, [sp, #0x4]
add r0, r7, #0x0
- bl FUN_020973B4
+ bl DWC_CheckFriendKey
cmp r0, #0x0
bne _02033950
add sp, #0x18
@@ -112,10 +112,10 @@ _02033950:
ldr r1, [sp, #0x0]
ldr r2, [sp, #0x4]
add r0, sp, #0xc
- bl FUN_02096D2C
+ bl DWC_CreateFriendKeyToken
add r0, r7, #0x0
add r1, sp, #0xc
- bl FUN_02096DA0
+ bl DWC_GetGsProfileId
cmp r0, #0x0
bgt _0203396C
add sp, #0x18
@@ -129,11 +129,11 @@ _0203396C:
_02033974:
add r0, r7, #0x0
add r1, sp, #0xc
- bl FUN_02096DA0
+ bl DWC_GetGsProfileId
str r0, [sp, #0x8]
add r0, r7, #0x0
add r1, r5, #0x0
- bl FUN_02096DA0
+ bl DWC_GetGsProfileId
ldr r1, [sp, #0x8]
cmp r1, r0
bne _02033994
@@ -146,7 +146,7 @@ _02033994:
cmp r0, #0x0
bge _020339A6
add r0, r5, #0x0
- bl FUN_0209700C
+ bl DWC_IsValidFriendData
cmp r0, #0x0
bne _020339A6
str r4, [r6, #0x0]
diff --git a/arm9/asm/unk_020910EC.s b/arm9/asm/unk_020910EC.s
index 185f3505..abab2d60 100644
--- a/arm9/asm/unk_020910EC.s
+++ b/arm9/asm/unk_020910EC.s
@@ -1,8 +1,6 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern OSi_ThreadInfo
-
.section .rodata
.global UNK_020FF500
@@ -50,18 +48,6 @@ UNK_020FF572: ; 0x020FF572
UNK_020FF573: ; 0x020FF573
.byte 0x00
- .global UNK_020FF574
-UNK_020FF574: ; 0x020FF574
- .byte 0x00, 0x00, 0x00, 0x00
-
- .global UNK_020FF578
-UNK_020FF578: ; 0x020FF578
- .byte 0x01, 0x02, 0x00, 0x04, 0x03, 0x05, 0x06, 0x07
-
- .global UNK_020FF580
-UNK_020FF580: ; 0x020FF580
- .byte 0x05, 0x09, 0x01, 0x0E, 0x0C, 0x02, 0x0A, 0x00, 0x0B, 0x0D, 0x03, 0x04, 0x08, 0x06, 0x0F, 0x07
-
.section .data
.global UNK_02106170
@@ -74,60 +60,8 @@ UNK_02106170: ; 0x02106170
.word UNK_020FF554
.word UNK_020FF534
- .global UNK_0210618C
-UNK_0210618C: ; 0x0210618C
- .asciz "%s%c%c%c%c%s"
-
- .balign 4, 0
- .global UNK_0210619C
-UNK_0210619C: ; 0x0210619C
- ; .asciz "0123456789abcdefghijklmnopqrstuvwxyz"
- .byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66
- .byte 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76
- .byte 0x00, 0x00, 0x00, 0x00
-
- .section .bss
-
- .global UNK_021C8C78
-UNK_021C8C78: ; 0x021C8C78
- .space 0x4
-
- .global UNK_021C8C7C
-UNK_021C8C7C: ; 0x021C8C7C
- .space 0x4
-
- .global UNK_021C8C80
-UNK_021C8C80: ; 0x021C8C80
- .space 0x4
-
- .global UNK_021C8C84
-UNK_021C8C84: ; 0x021C8C84
- .space 0x5
-
- .global UNK_021C8C89
-UNK_021C8C89: ; 0x021C8C89
- .space 0x1
-
- .global UNK_021C8C8A
-UNK_021C8C8A: ; 0x021C8C8A
- .space 0x4
-
- .global UNK_021C8C8E
-UNK_021C8C8E: ; 0x021C8C8E
- .space 0x2
-
- .global UNK_021C8C90
-UNK_021C8C90: ; 0x021C8C90
- .space 0x10
-
- .global UNK_021C8CA0
-UNK_021C8CA0: ; 0x021C8CA0
- .space 0x20
-
.text
- ; Nintendo DWC
-
arm_func_start FUN_020910EC
FUN_020910EC: ; 0x020910EC
stmdb sp!, {r4-r5,lr}
@@ -4822,2597 +4756,3 @@ _0209530C:
strb r7, [r0, #-0x4]
strb r6, [r0, #-0x3]
ldmia sp!, {r4-r9,pc}
-
- arm_func_start FUN_02095324
-FUN_02095324: ; 0x02095324
- ldr r0, _0209532C ; =UNK_021C8C84
- bx lr
- .balign 4
-_0209532C: .word UNK_021C8C84
-
- arm_func_start FUN_02095330
-FUN_02095330: ; 0x02095330
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x8
- mov r4, r0
- ldr r3, [r4, #0x8]
- ldr r2, [r4, #0xc]
- ldr r1, _020953E4 ; =UNK_021C8C84
- str r2, [sp, #0x4]
- str r3, [sp, #0x0]
- mov r2, #0x5
- bl MI_CpuCopy8
- ldr r1, [sp, #0x0]
- ldr r2, [r4, #0x4]
- ldr r0, [sp, #0x4]
- mov r2, r2, lsr #0x8
- mov r12, r1, lsr #0x5
- mov r3, r0, lsr #0x5
- orr r12, r12, r0, lsl #0x1b
- and lr, r2, #0x7
- and r0, r1, #0x1f
- orr lr, lr, r0, lsl #0x3
- ldr r2, _020953E4 ; =UNK_021C8C84
- ldr r1, _020953E8 ; =UNK_021C8C8A
- strb lr, [r2, #0x5]
- add r0, sp, #0x0
- str r12, [sp, #0x0]
- str r3, [sp, #0x4]
- mov r2, #0x4
- bl MI_CpuCopy8
- ldrh r0, [r4, #0x10]
- ldr r1, [sp, #0x4]
- ldr r3, _020953E4 ; =UNK_021C8C84
- and r1, r1, #0x3f
- and r0, r0, #0x3
- orr r0, r1, r0, lsl #0x6
- strb r0, [r3, #0xa]
- ldrh r2, [r4, #0x10]
- add r0, r4, #0x12
- ldr r1, _020953EC ; =UNK_021C8C90
- mov r4, r2, asr #0x2
- mov r2, #0x2
- strb r4, [r3, #0xb]
- bl MI_CpuCopy8
- ldr r0, _020953E4 ; =UNK_021C8C84
- add sp, sp, #0x8
- ldmia sp!, {r4,pc}
- .balign 4
-_020953E4: .word UNK_021C8C84
-_020953E8: .word UNK_021C8C8A
-_020953EC: .word UNK_021C8C90
-
- arm_func_start FUN_020953F0
-FUN_020953F0: ; 0x020953F0
- ldr r3, _02095420 ; =UNK_021C8C78
- and r12, r1, #0xff
- ldr r0, _02095424 ; =UNK_021C8C7C
- mov r1, #0x1
- strh r12, [r3, #0x0]
- str r1, [r0, #0x0]
- cmp r2, #0x0
- movne r0, #0xff
- strneh r0, [r3, #0x0]
- ldr r0, _02095420 ; =UNK_021C8C78
- ldrh r0, [r0, #0x0]
- bx lr
- .balign 4
-_02095420: .word UNK_021C8C78
-_02095424: .word UNK_021C8C7C
-
- arm_func_start FUN_02095428
-FUN_02095428:
- stmdb sp!, {r4-r6,lr}
- mov r5, #0x4
- mov r4, #0x1
-_02095434:
- mov r0, r5
- mov r1, r4
- bl PXI_IsCallbackReady
- cmp r0, #0x0
- beq _02095434
- ldr r1, _02095490 ; =FUN_020953F0
- mov r0, #0x4
- bl PXI_SetFifoRecvCallback
- mov r4, #0x40000
- mov r6, #0x7
- mov r5, #0x0
-_02095460:
- mov r0, r6
- mov r1, r5
- mov r2, r5
- mov r3, r5
- bl FUN_020955F4
- cmp r0, #0x1
- beq _02095488
- mov r0, r4
- bl SVC_WaitByLoop
- b _02095460
-_02095488:
- mov r0, #0x1
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_02095490: .word FUN_020953F0
-
- arm_func_start FUN_02095494
-FUN_02095494:
- stmdb sp!, {r4-r6,lr}
- mov r5, r2
- mov r4, r3
- mov r6, r0
- mov r0, r1
- mov r1, r5
- mov r2, r4
- bl FUN_0209555C
- cmp r0, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl memcmp
- cmp r0, #0x0
- moveq r0, #0x1
- movne r0, #0x0
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020954E0
-FUN_020954E0: ; 0x020954E0
- stmdb sp!, {r4-r8,lr}
- mov r8, r0
- mov r7, r1
- mov r6, r2
- mov r5, #0x4
- mov r4, #0x1
-_020954F8:
- mov r0, r5
- mov r1, r4
- bl PXI_IsCallbackReady
- cmp r0, #0x0
- beq _020954F8
- ldr r1, _02095558 ; =FUN_020953F0
- mov r0, #0x4
- bl PXI_SetFifoRecvCallback
- mov r0, r6
- mov r1, r7
- bl DC_StoreRange
- mov r4, #0x40000
- mov r5, #0x2
-_0209552C:
- mov r0, r5
- mov r1, r8
- mov r2, r7
- mov r3, r6
- bl FUN_020955F4
- cmp r0, #0x1
- ldmeqia sp!, {r4-r8,pc}
- mov r0, r4
- bl SVC_WaitByLoop
- b _0209552C
- ldmia sp!, {r4-r8,pc}
- .balign 4
-_02095558: .word FUN_020953F0
-
- arm_func_start FUN_0209555C
-FUN_0209555C:
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r4, r2
- mov r6, r0
- mov r0, r4
- mov r5, r1
- bl DC_InvalidateRange
- mov r8, #0x4
- mov r7, #0x1
-_02095580:
- mov r0, r8
- mov r1, r7
- bl PXI_IsCallbackReady
- cmp r0, #0x0
- beq _02095580
- ldr r1, _020955F0 ; =FUN_020953F0
- mov r0, #0x4
- bl PXI_SetFifoRecvCallback
- mov r0, r5, lsl #0x10
- mov r8, r0, lsr #0x10
- mov r7, #0x40000
- mov r9, #0x1
-_020955B0:
- mov r0, r9
- mov r1, r6
- mov r2, r8
- mov r3, r4
- bl FUN_020955F4
- cmp r0, #0x1
- beq _020955D8
- mov r0, r7
- bl SVC_WaitByLoop
- b _020955B0
-_020955D8:
- mov r0, r4
- mov r1, r5
- bl DC_InvalidateRange
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
- .balign 4
-_020955F0: .word FUN_020953F0
-
- arm_func_start FUN_020955F4
-FUN_020955F4: ; 0x020955F4
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0xc4
- ldr ip, _02095AAC ; =0x0000FFFF
- ldr sl, _02095AB0 ; =UNK_021C8CA0
- and r8, r2, r12
- and r7, r1, r12
- mov r5, r1, lsr #0x10
- mov r4, r3, lsr #0x10
- and r1, r3, r12
- orr r3, r8, #0x30000
- str r3, [sp, #0xc]
- ldr r3, _02095AB4 ; =0x01050000
- orr r2, r2, #0x20000
- orr r3, r1, r3
- str r3, [sp, #0x14]
- orr r1, r1, #0x1040000
- mov r9, r0
- and r0, r5, #0xff
- str r2, [sp, #0x1c]
- str r1, [sp, #0x24]
- ldr r1, _02095AB8 ; =0x02002200
- mov r8, #0x0
- orr r2, r4, #0x40000
- orr r1, r1, r10, lsr #0x18
- str r1, [sp, #0x28]
- and r1, r12, r10, lsr #0x8
- orr r1, r1, #0x10000
- ldr r3, _02095ABC ; =0x02002300
- str r2, [sp, #0x10]
- orr r2, r0, r3
- str r2, [sp, #0x8]
- orr r2, r4, #0x30000
- str r2, [sp, #0x20]
- ldr r2, _02095AC0 ; =0x02002500
- mov r6, r10, lsl #0x8
- str r1, [sp, #0x2c]
- and r1, r6, #0xff00
- orr r0, r0, r2
- ldr r3, _02095AC4 ; =0x01020000
- str r0, [sp, #0x18]
- orr r0, r1, r3
- str r0, [sp, #0x30]
- mov r0, #0x20000
- str r0, [sp, #0x40]
- mov r0, #0x5
- str r0, [sp, #0xac]
- mov r0, #0x3
- str r0, [sp, #0xb0]
- mov r0, #0x6
- str r0, [sp, #0xb8]
- mov r0, #0x4000
- orr r7, r7, #0x10000
- str r8, [sp, #0xb4]
- mov r4, #0x1
- str r8, [sp, #0xa8]
- mov r5, #0x4
- str r8, [sp, #0xa4]
- str r8, [sp, #0xa0]
- str r8, [sp, #0x90]
- str r8, [sp, #0x98]
- str r8, [sp, #0x9c]
- str r8, [sp, #0x94]
- str r8, [sp, #0x8c]
- str r8, [sp, #0x6c]
- str r8, [sp, #0x74]
- str r8, [sp, #0x7c]
- str r8, [sp, #0x84]
- str r8, [sp, #0x88]
- str r8, [sp, #0x80]
- str r8, [sp, #0x78]
- str r8, [sp, #0x70]
- str r8, [sp, #0x68]
- str r8, [sp, #0x64]
- str r8, [sp, #0x38]
- str r8, [sp, #0x44]
- str r8, [sp, #0x4c]
- str r8, [sp, #0x54]
- str r8, [sp, #0x5c]
- str r8, [sp, #0x60]
- str r8, [sp, #0x58]
- str r8, [sp, #0x50]
- str r8, [sp, #0x48]
- str r8, [sp, #0x3c]
- str r8, [sp, #0x34]
- mov r6, r8
- str r0, [sp, #0xbc]
-_0209574C:
- cmp r8, #0x0
- bne _02095988
- ldr r0, _02095AC8 ; =UNK_021C8C7C
- cmp r9, #0x7
- str r6, [r0, #0x0]
- addls pc, pc, r9, lsl #0x2
- b _0209574C
-_02095768:
- b _0209574C
-_0209576C:
- b _02095788
-_02095770:
- b _02095834
-_02095774:
- b _02095854
-_02095778:
- b _020958F0
-_0209577C:
- b _020958F0
-_02095780:
- b _02095948
-_02095784:
- b _02095968
-_02095788:
- ldr r1, [sp, #0x8]
- mov r0, r5
- mov r2, r6
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- ldrlt r8, [sp, #0x34]
- blt _0209574C
- ldr r2, [sp, #0x38]
- mov r0, r5
- mov r1, r7
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- ldrlt r8, [sp, #0x3c]
- blt _0209574C
- ldr r1, [sp, #0x40]
- ldr r2, [sp, #0x44]
- mov r0, r5
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- ldrlt r8, [sp, #0x48]
- blt _0209574C
- ldr r1, [sp, #0xc]
- ldr r2, [sp, #0x4c]
- mov r0, r5
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- ldrlt r8, [sp, #0x50]
- blt _0209574C
- ldr r1, [sp, #0x10]
- ldr r2, [sp, #0x54]
- mov r0, r5
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- ldrlt r8, [sp, #0x58]
- blt _0209574C
- ldr r1, [sp, #0x14]
- ldr r2, [sp, #0x5c]
- mov r0, r5
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- ldrlt r8, [sp, #0x60]
- movge r8, r4
- b _0209574C
-_02095834:
- ldr r1, _02095ACC ; =0x03002000
- mov r0, r5
- mov r2, r6
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- movge r8, r4
- ldrlt r8, [sp, #0x64]
- b _0209574C
-_02095854:
- ldr r1, [sp, #0x18]
- mov r0, r5
- mov r2, r6
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- ldrlt r8, [sp, #0x68]
- blt _020958E0
- ldr r2, [sp, #0x6c]
- mov r0, r5
- mov r1, r7
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- ldrlt r8, [sp, #0x70]
- blt _020958E0
- ldr r1, [sp, #0x1c]
- ldr r2, [sp, #0x74]
- mov r0, r5
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- ldrlt r8, [sp, #0x78]
- blt _020958E0
- ldr r1, [sp, #0x20]
- ldr r2, [sp, #0x7c]
- mov r0, r5
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- ldrlt r8, [sp, #0x80]
- blt _020958E0
- ldr r1, [sp, #0x24]
- ldr r2, [sp, #0x84]
- mov r0, r5
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- ldrlt r8, [sp, #0x88]
- movge r8, r4
-_020958E0:
- bl OS_GetTick
- str r0, [sp, #0x0]
- mov r11, r1
- b _0209574C
-_020958F0:
- ldr r1, [sp, #0x28]
- mov r0, r5
- mov r2, r6
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- ldrlt r8, [sp, #0x8c]
- blt _0209574C
- ldr r1, [sp, #0x2c]
- ldr r2, [sp, #0x90]
- mov r0, r5
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- ldrlt r8, [sp, #0x94]
- blt _0209574C
- ldr r1, [sp, #0x30]
- ldr r2, [sp, #0x98]
- mov r0, r5
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- ldrlt r8, [sp, #0x9c]
- movge r8, r4
- b _0209574C
-_02095948:
- ldr r1, _02095AD0 ; =0x03002D00
- mov r0, r5
- mov r2, r6
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- movge r8, r4
- ldrlt r8, [sp, #0xa0]
- b _0209574C
-_02095968:
- ldr r1, _02095AD4 ; =0x03002100
- mov r0, r5
- mov r2, r6
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- movge r8, r4
- ldrlt r8, [sp, #0xa4]
- b _0209574C
-_02095988:
- ldr r0, _02095AC8 ; =UNK_021C8C7C
- ldr r0, [r0, #0x0]
- cmp r0, #0x1
- bne _0209574C
- ldr r0, _02095AD8 ; =UNK_021C8C78
- ldr r8, [sp, #0xa8]
- ldrh r0, [r0, #0x0]
- cmp r0, #0x0
- bne _02095AA0
- cmp r9, #0x7
- addls pc, pc, r9, lsl #0x2
- b _0209574C
- b _0209574C
- b _020959D8
- b _020959E4
- b _020959EC
- b _020959F4
- b _020959F4
- b _02095A88
- b _02095A94
-_020959D8:
- add sp, sp, #0xc4
- mov r0, #0x1
- ldmia sp!, {r4-r11,pc}
-_020959E4:
- mov r9, r5
- b _0209574C
-_020959EC:
- ldr r9, [sp, #0xac]
- b _0209574C
-_020959F4:
- mov r0, r10
- mov r1, r4
- bl DC_InvalidateRange
- cmp r9, #0x4
- bne _02095A24
- ldrb r0, [r10, #0x0]
- ands r0, r0, #0x2
- ldrne r9, [sp, #0xb0]
- bne _0209574C
- add sp, sp, #0xc4
- mov r0, #0x0
- ldmia sp!, {r4-r11,pc}
-_02095A24:
- ldrb r1, [r10, #0x0]
- ands r0, r1, #0x1
- addeq sp, sp, #0xc4
- moveq r0, #0x1
- ldmeqia sp!, {r4-r11,pc}
- ands r0, r1, #0x20
- bne _02095A74
- bl OS_GetTick
- ldr r2, [sp, #0x0]
- ldr r3, [sp, #0xb4]
- subs r2, r0, r2
- sbc r0, r1, r11
- mov r1, r0, lsl #0x6
- orr r1, r1, r2, lsr #0x1a
- mov r0, r2, lsl #0x6
- ldr r2, _02095ADC ; =0x000082EA
- bl _ll_udiv
- cmp r1, #0x0
- cmpeq r0, #0xfa0
- bls _02095A7C
-_02095A74:
- ldr r9, [sp, #0xb8]
- b _0209574C
-_02095A7C:
- ldr r0, [sp, #0xbc]
- bl SVC_WaitByLoop
- b _0209574C
-_02095A88:
- add sp, sp, #0xc4
- mov r0, r8
- ldmia sp!, {r4-r11,pc}
-_02095A94:
- add sp, sp, #0xc4
- mov r0, #0x1
- ldmia sp!, {r4-r11,pc}
-_02095AA0:
- mov r0, r8
- add sp, sp, #0xc4
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_02095AAC: .word 0x0000FFFF
-_02095AB0: .word UNK_021C8CA0
-_02095AB4: .word 0x01050000
-_02095AB8: .word 0x02002200
-_02095ABC: .word 0x02002300
-_02095AC0: .word 0x02002500
-_02095AC4: .word 0x01020000
-_02095AC8: .word UNK_021C8C7C
-_02095ACC: .word 0x03002000
-_02095AD0: .word 0x03002D00
-_02095AD4: .word 0x03002100
-_02095AD8: .word UNK_021C8C78
-_02095ADC: .word 0x000082EA
-
- arm_func_start FUN_02095AE0
-FUN_02095AE0:
- ldrb r0, [r0, #0x0]
- cmp r0, #0x7f
- moveq r0, #0x0
- bxeq lr
- cmp r0, #0x1
- movcc r0, #0x0
- bxcc lr
- cmp r0, #0xdf
- movls r0, #0x1
- movhi r0, #0x0
- bx lr
-
- arm_func_start FUN_02095B0C
-FUN_02095B0C:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0xc
- mov r5, r0
- mov r4, r1
- bl FUN_02095AE0
- cmp r0, #0x0
- addeq sp, sp, #0xc
- moveq r0, #0x0
- ldmeqia sp!, {r4-r5,pc}
- add r1, sp, #0x0
- mov r0, r5
- mov r2, #0x4
- bl MI_CpuCopy8
- add r1, sp, #0x4
- mov r0, r4
- mov r2, #0x4
- bl MI_CpuCopy8
- ldr r3, [sp, #0x4]
- ldr r2, [sp, #0x0]
- mvn r0, #0x1
- orr r1, r2, r3
- cmp r1, r0
- addeq sp, sp, #0xc
- moveq r0, #0x0
- ldmeqia sp!, {r4-r5,pc}
- mvn r0, r3
- ands r0, r2, r0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0xc
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_02095B88
-FUN_02095B88:
- mov r2, #0x0
-_02095B8C:
- ldrb r1, [r0, r2]
- cmp r1, #0x0
- movne r0, #0x1
- bxne lr
- add r2, r2, #0x1
- cmp r2, #0x20
- blt _02095B8C
- mov r0, #0x0
- bx lr
-
- arm_func_start FUN_02095BB0
-FUN_02095BB0: ; 0x02095BB0
- mvn r2, #0x0
- mov r12, #0x0
- eor r3, r2, r2, lsr r0
- mov r2, r12
-_02095BC0:
- rsb r0, r2, #0x18
- mov r0, r3, lsr r0
- strb r0, [r1, r12]
- add r12, r12, #0x1
- cmp r12, #0x4
- add r2, r2, #0x8
- blt _02095BC0
- bx lr
-
- arm_func_start FUN_02095BE0
-FUN_02095BE0: ; 0x02095BE0
- stmdb sp!, {r4,lr}
- mov lr, #0x0
- mov r4, lr
- mov r2, lr
-_02095BF0:
- ldrb r3, [r0, lr]
- mov r12, r2
-_02095BF8:
- mov r1, r3, asr r12
- ands r1, r1, #0x1
- add r12, r12, #0x1
- addne r4, r4, #0x1
- cmp r12, #0x8
- blt _02095BF8
- add lr, lr, #0x1
- cmp lr, #0x4
- blt _02095BF0
- and r0, r4, #0xff
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_02095C24
-FUN_02095C24: ; 0x02095C24
- ldr ip, _02095C34 ; =MI_CpuCopy8
- ldr r1, _02095C38 ; =UNK_021C8C84
- mov r2, #0xe
- bx r12
- .balign 4
-_02095C34: .word MI_CpuCopy8
-_02095C38: .word UNK_021C8C84
-
- arm_func_start FUN_02095C3C
-FUN_02095C3C:
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- ldr r1, _02095CD8 ; =UNK_021C8C80
- mov r10, r0
- ldr r8, [r1, #0x0]
- mov r7, r10
- mov r9, #0x0
- add r4, r10, #0x400
- add r6, r10, #0x500
- mov r5, #0x100
- mov r11, #0xfe
-_02095C68:
- mov r0, r6
- mov r1, r7
- mov r2, r11
- bl MATH_CalcCRC16
- add r1, r10, r9, lsl #0x8
- strh r0, [r1, #0xfe]
-_02095C80:
- mov r0, r8
- mov r1, r5
- mov r2, r7
- bl FUN_020954E0
- mov r0, r7
- mov r1, r8
- mov r2, r5
- mov r3, r4
- bl FUN_02095494
- cmp r0, #0x0
- beq _02095C80
- add r9, r9, #0x1
- cmp r9, #0x4
- add r7, r7, #0x100
- add r8, r8, #0x100
- blt _02095C68
- bl FUN_02095428
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_02095CD8: .word UNK_021C8C80
-
- arm_func_start FUN_02095CDC
-FUN_02095CDC: ; 0x02095CDC
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- ldr r3, _02095D64 ; =UNK_021C8C80
- mov r4, r0
- ldr r6, [r3, #0x0]
- mov r9, r1
- mov r8, r2
- mov r7, #0x0
- mov r5, #0x100
-_02095D00:
- ldr r0, [r9, r7, lsl #0x2]
- cmp r0, #0x0
- beq _02095D38
-_02095D0C:
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl FUN_020954E0
- mov r0, r4
- mov r1, r6
- mov r2, r5
- mov r3, r8
- bl FUN_02095494
- cmp r0, #0x0
- beq _02095D0C
-_02095D38:
- add r7, r7, #0x1
- cmp r7, #0x4
- add r4, r4, #0x100
- add r6, r6, #0x100
- blt _02095D00
- bl FUN_02095428
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
- .balign 4
-_02095D64: .word UNK_021C8C80
-
- arm_func_start FUN_02095D68
-FUN_02095D68:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _02095D98 ; =UNK_021C8C80
- mov r2, r0
- ldr r0, [r1, #0x0]
- mov r1, #0x400
- bl FUN_0209555C
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_02095D98: .word UNK_021C8C80
-
- arm_func_start FUN_02095D9C
-FUN_02095D9C:
- stmdb sp!, {r4,lr}
- mov r4, r0
- mov r0, #0x20
- mov r1, r0
- mov r2, r4
- bl FUN_0209555C
- cmp r0, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4,pc}
- ldrh r2, [r4, #0x0]
- ldr r1, _02095DDC ; =UNK_021C8C80
- mov r0, #0x1
- mov r2, r2, lsl #0x3
- sub r2, r2, #0x400
- str r2, [r1, #0x0]
- ldmia sp!, {r4,pc}
- .balign 4
-_02095DDC: .word UNK_021C8C80
-
- arm_func_start FUN_02095DE0
-FUN_02095DE0:
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- ldr r2, _02095EBC ; =UNK_021C8C80
- mov r10, r1
- ldr r8, [r2, #0x0]
- bl FUN_02095330
- ldr r1, _02095EC0 ; =0x0000A001
- add r0, r10, #0x200
- bl MATHi_CRC16InitTableRev
- mov r9, #0x0
- add r4, r10, #0x100
- add r6, r10, #0xf0
- mov r7, #0x100
- mov r5, #0xe
- mov r11, #0xfe
-_02095E1C:
- mov r0, r8
- mov r1, r7
- mov r2, r10
- bl FUN_0209555C
- cmp r0, #0x0
- bne _02095E44
- bl OS_Terminate
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r11,pc}
-_02095E44:
- ldr r0, _02095EC4 ; =UNK_021C8C84
- mov r1, r6
- mov r2, r5
- bl MI_CpuCopy8
- mov r1, r10
- mov r2, r11
- add r0, r10, #0x200
- bl MATH_CalcCRC16
- strh r0, [r10, #0xfe]
-_02095E68:
- mov r0, r8
- mov r1, r7
- mov r2, r10
- bl FUN_020954E0
- mov r0, r10
- mov r1, r8
- mov r2, r7
- mov r3, r4
- bl FUN_02095494
- cmp r0, #0x0
- beq _02095E68
- add r9, r9, #0x1
- cmp r9, #0x2
- add r8, r8, #0x100
- blt _02095E1C
- bl FUN_02095428
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_02095EBC: .word UNK_021C8C80
-_02095EC0: .word 0x0000A001
-_02095EC4: .word UNK_021C8C84
-
- arm_func_start FUN_02095EC8
-FUN_02095EC8:
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r0, _02095F90 ; =UNK_021C8C84
- mov r1, r4
- mov r2, #0x6
- bl MI_CpuCopy8
- ldr r3, [r4, #0x0]
- mvn r0, #0x0
- ldr r2, [r4, #0x4]
- ldr r1, _02095F94 ; =0x000007FF
- and r0, r3, r0
- str r0, [r4, #0x0]
- and r1, r2, r1
- ldr r0, _02095F98 ; =UNK_021C8C89
- str r1, [r4, #0x4]
- add r1, r4, #0x8
- mov r2, #0x6
- bl MI_CpuCopy8
- add r12, r4, #0x8
- ldr r1, [r4, #0x8]
- ldr r0, [r12, #0x4]
- mov r1, r1, lsr #0x3
- orr r1, r1, r0, lsl #0x1d
- str r1, [r4, #0x8]
- mov r0, r0, lsr #0x3
- str r0, [r12, #0x4]
- ldr r3, [r4, #0x8]
- mvn r0, #0x0
- ldr r2, [r12, #0x4]
- ldr r1, _02095F94 ; =0x000007FF
- and r0, r3, r0
- str r0, [r4, #0x8]
- and r1, r2, r1
- ldr r0, _02095F9C ; =UNK_021C8C8E
- str r1, [r12, #0x4]
- add r1, r4, #0x10
- mov r2, #0x2
- bl MI_CpuCopy8
- ldrh r1, [r4, #0x10]
- ldr r3, _02095FA0 ; =0x000003FF
- ldr r0, _02095FA4 ; =UNK_021C8C90
- mov r1, r1, asr #0x6
- strh r1, [r4, #0x10]
- ldrh r12, [r4, #0x10]
- add r1, r4, #0x12
- mov r2, #0x2
- and r3, r12, r3
- strh r3, [r4, #0x10]
- bl MI_CpuCopy8
- ldmia sp!, {r4,pc}
- .balign 4
-_02095F90: .word UNK_021C8C84
-_02095F94: .word 0x000007FF
-_02095F98: .word UNK_021C8C89
-_02095F9C: .word UNK_021C8C8E
-_02095FA0: .word 0x000003FF
-_02095FA4: .word UNK_021C8C90
-
- arm_func_start FUN_02095FA8
-FUN_02095FA8: ; 0x02095FA8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _02095FD8 ; =UNK_021C8C80
- mov r2, r0
- ldr r0, [r1, #0x0]
- mov r1, #0x300
- bl FUN_0209555C
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_02095FD8: .word UNK_021C8C80
-
- arm_func_start FUN_02095FDC
-FUN_02095FDC: ; 0x02095FDC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r1
- add r1, r5, r4, lsl #0x8
- mov r0, #0x0
- mov r2, #0x100
- bl MIi_CpuClear16
- add r0, r5, r4, lsl #0x8
- mov r1, #0xff
- strb r1, [r0, #0xe7]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_02096010
-FUN_02096010: ; 0x02096010
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x14
- mov r7, r0
- mov r1, r7
- mov r0, #0x0
- mov r2, #0x400
- bl MIi_CpuClear16
- mov r2, #0x0
- mov r1, #0xff
-_02096034:
- add r0, r7, r2, lsl #0x8
- add r2, r2, #0x1
- strb r1, [r0, #0xe7]
- cmp r2, #0x3
- blt _02096034
- add r0, sp, #0x0
- bl FUN_020967A4
- add r0, sp, #0x0
- bl FUN_02095330
- mov r6, r0
- mov r5, #0x0
- mov r4, #0xe
-_02096064:
- mov r0, r6
- mov r2, r4
- add r1, r7, #0xf0
- bl MI_CpuCopy8
- add r5, r5, #0x1
- cmp r5, #0x2
- add r7, r7, #0x100
- blt _02096064
- mov r0, #0x0
- add sp, sp, #0x14
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_02096090
-FUN_02096090:
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x8
- mov r4, r0
- ldrb r0, [r4, #0xe7]
- cmp r0, #0xff
- addeq sp, sp, #0x8
- moveq r0, #0x1
- ldmeqia sp!, {r4,pc}
- cmp r0, #0x2
- addhi sp, sp, #0x8
- movhi r0, #0x0
- ldmhiia sp!, {r4,pc}
- add r0, r4, #0x40
- bl FUN_02095B88
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4,pc}
- ldr r1, _0209618C ; =UNK_020FF574
- add r0, r4, #0xc0
- mov r2, #0x4
- bl memcmp
- cmp r0, #0x0
- beq _02096140
- add r0, r4, #0xc4
- bl FUN_02095AE0
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4,pc}
- ldrb r0, [r4, #0xd0]
- cmp r0, #0x20
- addhi sp, sp, #0x8
- movhi r0, #0x0
- ldmhiia sp!, {r4,pc}
- add r1, sp, #0x0
- bl FUN_02095BB0
- add r1, sp, #0x0
- add r0, r4, #0xc0
- bl FUN_02095B0C
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4,pc}
-_02096140:
- ldr r1, _0209618C ; =UNK_020FF574
- add r0, r4, #0xc8
- mov r2, #0x4
- bl memcmp
- cmp r0, #0x0
- beq _02096180
- add r0, r4, #0xc8
- bl FUN_02095AE0
- cmp r0, #0x0
- bne _02096180
- add r0, r4, #0xcc
- bl FUN_02095AE0
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4,pc}
-_02096180:
- mov r0, #0x1
- add sp, sp, #0x8
- ldmia sp!, {r4,pc}
- .balign 4
-_0209618C: .word UNK_020FF574
-
- arm_func_start FUN_02096190
-FUN_02096190: ; 0x02096190
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x14
- mov r10, r0
- mov r1, #0x0
- mov r2, #0x700
- bl MI_CpuFill8
- mov r0, r10
- bl FUN_02095D9C
- cmp r0, #0x0
- addeq sp, sp, #0x14
- ldreq r0, _020964B4 ; =0xFFFFD8EF
- ldmeqia sp!, {r4-r11,pc}
- ldr r1, _020964B8 ; =0x0000A001
- add r0, r10, #0x500
- bl MATHi_CRC16InitTableRev
- mov r0, r10
- bl FUN_02095D68
- cmp r0, #0x0
- addeq sp, sp, #0x14
- ldreq r0, _020964B4 ; =0xFFFFD8EF
- ldmeqia sp!, {r4-r11,pc}
- add r0, sp, #0x0
- mov r1, #0x0
- mov r2, #0x10
- bl MI_CpuFill8
- mov r8, r10
- mov r7, r10
- mov r9, #0x0
- add r11, sp, #0x0
- add r6, r10, #0x500
- mov r4, #0x1
- mov r5, #0xfe
-_02096210:
- mov r0, r6
- mov r1, r8
- mov r2, r5
- bl MATH_CalcCRC16
- add r1, r10, r9, lsl #0x8
- ldrh r1, [r1, #0xfe]
- cmp r0, r1
- bne _02096240
- mov r0, r7
- bl FUN_02096090
- cmp r0, #0x0
- strne r4, [r11, r9, lsl #0x2]
-_02096240:
- add r9, r9, #0x1
- cmp r9, #0x3
- add r8, r8, #0x100
- add r7, r7, #0x100
- blt _02096210
- add r0, r10, #0x500
- add r1, r10, #0x300
- mov r2, #0xfe
- bl MATH_CalcCRC16
- add r1, r10, #0x300
- ldrh r1, [r1, #0xfe]
- cmp r0, r1
- moveq r0, #0x1
- ldr r1, [sp, #0x0]
- streq r0, [sp, #0xc]
- cmp r1, #0x0
- beq _020962BC
- ldr r0, [sp, #0x4]
- cmp r0, #0x0
- beq _020962BC
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- beq _020962BC
- ldr r0, [sp, #0xc]
- cmp r0, #0x0
- beq _020962BC
- add r0, r10, #0xf0
- bl FUN_02095C24
- add sp, sp, #0x14
- mov r0, #0x0
- ldmia sp!, {r4-r11,pc}
-_020962BC:
- cmp r1, #0x0
- bne _0209630C
- ldr r0, [sp, #0x4]
- cmp r0, #0x0
- bne _0209630C
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- bne _0209630C
- ldr r0, [sp, #0xc]
- cmp r0, #0x0
- bne _0209630C
- mov r0, r10
- bl FUN_02096010
- mov r0, r10
- bl FUN_02095C3C
- cmp r0, #0x0
- movne r0, #0x0
- add sp, sp, #0x14
- ldreq r0, _020964BC ; =0xFFFFD8F0
- ldmia sp!, {r4-r11,pc}
-_0209630C:
- cmp r1, #0x0
- beq _02096320
- ldr r0, [sp, #0x4]
- cmp r0, #0x0
- bne _0209635C
-_02096320:
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- beq _02096338
- ldr r0, [sp, #0xc]
- cmp r0, #0x0
- bne _0209635C
-_02096338:
- mov r0, r10
- bl FUN_02096010
- mov r0, r10
- bl FUN_02095C3C
- cmp r0, #0x0
- movne r0, #0x0
- add sp, sp, #0x14
- ldreq r0, _020964BC ; =0xFFFFD8F0
- ldmia sp!, {r4-r11,pc}
-_0209635C:
- cmp r1, #0x0
- bne _02096394
- ldr r0, [sp, #0x4]
- cmp r0, #0x0
- bne _02096394
- mov r0, r10
- bl FUN_02096010
- mov r0, r10
- bl FUN_02095C3C
- cmp r0, #0x0
- ldrne r0, _020964C0 ; =0xFFFFD8ED
- add sp, sp, #0x14
- ldreq r0, _020964BC ; =0xFFFFD8F0
- ldmia sp!, {r4-r11,pc}
-_02096394:
- cmp r1, #0x0
- bne _020963C4
- mov r0, r10
- mov r1, #0x0
- bl FUN_02095FDC
- add r0, r10, #0x1f0
- add r1, r10, #0xf0
- mov r2, #0xe
- bl MI_CpuCopy8
- ldrb r0, [r10, #0x1ef]
- strb r0, [r10, #0xef]
- b _020963F4
-_020963C4:
- ldr r0, [sp, #0x4]
- cmp r0, #0x0
- bne _020963F4
- mov r0, r10
- mov r1, #0x1
- bl FUN_02095FDC
- add r0, r10, #0xf0
- add r1, r10, #0x1f0
- mov r2, #0xe
- bl MI_CpuCopy8
- ldrb r0, [r10, #0xef]
- strb r0, [r10, #0x1ef]
-_020963F4:
- add r0, r10, #0xf0
- bl FUN_02095C24
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- bne _02096414
- mov r0, r10
- mov r1, #0x2
- bl FUN_02095FDC
-_02096414:
- ldr r0, [sp, #0xc]
- cmp r0, #0x0
- bne _02096430
- add r1, r10, #0x300
- mov r0, #0x0
- mov r2, #0x100
- bl MIi_CpuClear16
-_02096430:
- mov r4, #0x0
- mov r1, r4
- add r0, sp, #0x0
- add r5, r10, #0xef
- mov r6, #0x1
-_02096444:
- ldr r2, [r0, r1, lsl #0x2]
- cmp r2, #0x0
- bne _0209647C
- ldrb r2, [r10, #0xef]
- mov r7, r6, lsl r1
- ands r2, r2, r7
- beq _0209647C
- ldrb r3, [r5, #0x0]
- mvn r2, r7
- mov r4, r6
- and r2, r3, r2
- strb r2, [r5, #0x0]
- ldrb r2, [r10, #0xef]
- strb r2, [r10, #0x1ef]
-_0209647C:
- add r1, r1, #0x1
- cmp r1, #0x3
- blt _02096444
- mov r0, r10
- bl FUN_02095C3C
- cmp r0, #0x0
- addeq sp, sp, #0x14
- ldreq r0, _020964BC ; =0xFFFFD8F0
- ldmeqia sp!, {r4-r11,pc}
- cmp r4, #0x0
- ldrne r0, _020964C4 ; =0xFFFFD8EE
- moveq r0, #0x0
- add sp, sp, #0x14
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020964B4: .word 0xFFFFD8EF
-_020964B8: .word 0x0000A001
-_020964BC: .word 0xFFFFD8F0
-_020964C0: .word 0xFFFFD8ED
-_020964C4: .word 0xFFFFD8EE
-
- arm_func_start FUN_020964C8
-FUN_020964C8:
- stmdb sp!, {lr}
- sub sp, sp, #0x14
- add r0, sp, #0x0
- bl FUN_02095EC8
- ldr r2, [sp, #0x8]
- ldr r1, [sp, #0xc]
- mov r0, #0x0
- cmp r1, r0
- cmpeq r2, r0
- bne _0209650C
- ldr r1, [sp, #0x4]
- ldr r2, [sp, #0x0]
- cmp r1, r0
- cmpeq r2, r0
- addeq sp, sp, #0x14
- moveq r0, #0x1
- ldmeqia sp!, {pc}
-_0209650C:
- mov r0, #0x0
- add sp, sp, #0x14
- ldmia sp!, {pc}
-
- arm_func_start FUN_02096518
-FUN_02096518: ; 0x02096518
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x18
- mov r4, r0
- add r0, sp, #0x0
- bl FUN_02095EC8
- add r0, sp, #0x0
- ldmia r0, {r2-r3}
- stmia r4, {r2-r3}
- add r1, sp, #0x8
- add r0, r4, #0x8
- ldmia r1, {r2-r3}
- stmia r0, {r2-r3}
- ldr r2, [sp, #0x0]
- ldr r1, [sp, #0x4]
- mov r0, #0x0
- cmp r1, r0
- cmpeq r2, r0
- streq r0, [r4, #0x10]
- movne r0, #0x1
- strne r0, [r4, #0x10]
- add sp, sp, #0x18
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_02096570
-FUN_02096570: ; 0x02096570
- stmdb sp!, {r4-r10,lr}
- sub sp, sp, #0x28
- add r2, sp, #0x0
- mov r1, #0x0
- strb r1, [r2, #0x0]
- strb r1, [r2, #0x1]
- strb r1, [r2, #0x2]
- strb r1, [r2, #0x3]
- strb r1, [r2, #0x4]
- mov r5, r0
- strb r1, [r2, #0x5]
- bl FUN_02095EC8
- bl RTC_Init
- add r0, sp, #0x8
- bl RTC_GetDate
- cmp r0, #0x0
- addne sp, sp, #0x28
- movne r0, #0x0
- ldmneia sp!, {r4-r10,pc}
- add r0, sp, #0x18
- bl RTC_GetTime
- cmp r0, #0x0
- addne sp, sp, #0x28
- movne r0, #0x0
- ldmneia sp!, {r4-r10,pc}
- add r0, sp, #0x8
- add r1, sp, #0x18
- bl RTC_ConvertDateTimeToSecond
- mov r4, r0
- mov r0, #0x0
- subs r2, r4, r0
- sbcs r2, r1, r0
- addlt sp, sp, #0x28
- ldmltia sp!, {r4-r10,pc}
- bl OS_IsTickAvailable
- cmp r0, #0x0
- beq _0209660C
- ldr r0, _02096700 ; =OS_GetTick
- adds r4, r4, r0
-_0209660C:
- add r0, sp, #0x0
- bl OS_GetMacAddress
- ldrb r1, [sp, #0x0]
- ldr r6, _02096704 ; =0x5D588B65
- ldr r7, _02096708 ; =0x00269EC3
- ldrb r0, [sp, #0x1]
- mla r9, r4, r6, r7
- mov r1, r1, lsl #0x10
- orr r1, r1, r0, lsl #0x8
- ldrb r2, [sp, #0x2]
- ldr r0, _0209670C ; =0x000009BF
- ldrb r8, [sp, #0x3]
- orr r1, r2, r1
- cmp r1, r0
- movne r1, #0x1
- mov r2, r9, lsr #0x10
- mov r0, #0x3e8
- mul r3, r2, r0
- mov r2, r3, lsr #0x10
- mov r3, r8, lsl #0x10
- ldrb r4, [sp, #0x4]
- ldrb r0, [sp, #0x5]
- mov r8, #0x0
- orr r10, r3, r4, lsl #0x8
- strh r2, [r5, #0x10]
- str r8, [r5, #0x8]
- str r8, [r5, #0xc]
- moveq r1, #0x0
- ldr r2, [r5, #0xc]
- ldr r3, [r5, #0x8]
- cmp r2, r8
- cmpeq r3, r8
- and r4, r1, #0xff
- orr r10, r0, r10
- bne _020966F4
-_02096698:
- mla r9, r6, r9, r7
- b _020966A4
-_020966A0:
- mla r9, r6, r9, r7
-_020966A4:
- cmp r9, #0x0
- beq _020966A0
- ldrh r1, [r5, #0x12]
- mov r0, r9, lsl #0x10
- mov r0, r0, lsr #0x10
- cmp r1, r0
- beq _020966A0
- strh r0, [r5, #0x12]
- ldrh r0, [r5, #0x12]
- mov r1, r10
- mov r2, r4
- mov r3, r8
- bl FUN_02096988
- str r0, [r5, #0x8]
- str r1, [r5, #0xc]
- ldr r0, [r5, #0xc]
- ldr r1, [r5, #0x8]
- cmp r0, r8
- cmpeq r1, r8
- beq _02096698
-_020966F4:
- mov r0, #0x1
- add sp, sp, #0x28
- ldmia sp!, {r4-r10,pc}
- .balign 4
-_02096700: .word OS_GetTick
-_02096704: .word 0x5D588B65
-_02096708: .word 0x00269EC3
-_0209670C: .word 0x000009BF
-
- arm_func_start FUN_02096710
-FUN_02096710: ; 0x02096710
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x14
- mov r5, r0
- add r0, sp, #0x0
- mov r4, r1
- bl FUN_02095EC8
- add r12, r5, #0x8
- ldmia r12, {r2-r3}
- stmia r5, {r2-r3}
- add r1, sp, #0x8
- ldmia r1, {r2-r3}
- mov r0, r5
- mov r1, r4
- stmia r12, {r2-r3}
- bl FUN_02095DE0
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x14
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_02096760
-FUN_02096760: ; 0x02096760
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x18
- mov r4, r0
- add r0, sp, #0x0
- bl FUN_020967A4
- cmp r0, #0x0
- addeq sp, sp, #0x18
- moveq r0, #0x0
- ldmeqia sp!, {r4,pc}
- add r0, sp, #0x0
- mov r1, r4
- bl FUN_02095DE0
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x18
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020967A4
-FUN_020967A4:
- stmdb sp!, {r4-r10,lr}
- sub sp, sp, #0x28
- mov r8, r0
- bl FUN_02095EC8
- bl RTC_Init
- add r0, sp, #0x8
- bl RTC_GetDate
- cmp r0, #0x0
- addne sp, sp, #0x28
- movne r0, #0x0
- ldmneia sp!, {r4-r10,pc}
- add r0, sp, #0x18
- bl RTC_GetTime
- cmp r0, #0x0
- addne sp, sp, #0x28
- movne r0, #0x0
- ldmneia sp!, {r4-r10,pc}
- add r0, sp, #0x8
- add r1, sp, #0x18
- bl RTC_ConvertDateTimeToSecond
- mov r4, r0
- mov r0, #0x0
- subs r2, r4, r0
- sbcs r2, r1, r0
- addlt sp, sp, #0x28
- ldmltia sp!, {r4-r10,pc}
- bl OS_IsTickAvailable
- cmp r0, #0x0
- beq _02096820
- ldr r0, _02096978 ; =OS_GetTick
- adds r4, r4, r0
-_02096820:
- add r0, sp, #0x0
- bl OS_GetMacAddress
- ldrb r1, [sp, #0x0]
- ldr sb, _0209697C ; =0x5D588B65
- ldr sl, _02096980 ; =0x00269EC3
- ldrb r0, [sp, #0x1]
- mla r5, r4, r9, r10
- mov r1, r1, lsl #0x10
- orr r1, r1, r0, lsl #0x8
- ldrb r2, [sp, #0x2]
- ldr r0, _02096984 ; =0x000009BF
- ldrb r6, [sp, #0x3]
- orr r1, r2, r1
- cmp r1, r0
- movne r1, #0x1
- moveq r1, #0x0
- mov r2, r5, lsr #0x10
- mov r0, #0x3e8
- mul r3, r2, r0
- mov r2, r3, lsr #0x10
- ldrb r0, [sp, #0x5]
- ldrb r4, [sp, #0x4]
- mov r3, r6, lsl #0x10
- and r7, r1, #0xff
- orr r3, r3, r4, lsl #0x8
- strh r2, [r8, #0x10]
- mov r4, #0x0
- str r4, [r8, #0x0]
- str r4, [r8, #0x4]
- ldrh r2, [r8, #0x12]
- orr r6, r0, r3
- cmp r2, #0x0
- bne _02096910
- str r4, [r8, #0x8]
- str r4, [r8, #0xc]
- ldr r0, [r8, #0xc]
- ldr r1, [r8, #0x8]
- cmp r0, r4
- cmpeq r1, r4
- bne _0209696C
-_020968C0:
- mul r0, r5, r9
- adds r5, r0, r10
- bne _020968D8
-_020968CC:
- mul r0, r5, r9
- adds r5, r0, r10
- beq _020968CC
-_020968D8:
- strh r5, [r8, #0x12]
- ldrh r0, [r8, #0x12]
- mov r1, r6
- mov r2, r7
- mov r3, r4
- bl FUN_02096988
- str r0, [r8, #0x8]
- str r1, [r8, #0xc]
- ldr r0, [r8, #0xc]
- ldr r1, [r8, #0x8]
- cmp r0, r4
- cmpeq r1, #0x0
- beq _020968C0
- b _0209696C
-_02096910:
- str r4, [r8, #0x8]
- str r4, [r8, #0xc]
- ldr r0, [r8, #0xc]
- ldr r1, [r8, #0x8]
- cmp r0, r4
- cmpeq r1, r4
- bne _0209696C
- add r5, r8, #0x12
-_02096930:
- ldrh r0, [r5, #0x0]
- mov r1, r6
- mov r2, r7
- add r0, r0, #0x1
- strh r0, [r5, #0x0]
- ldrh r0, [r8, #0x12]
- mov r3, r4
- bl FUN_02096988
- str r0, [r8, #0x8]
- str r1, [r8, #0xc]
- ldr r0, [r8, #0xc]
- ldr r1, [r8, #0x8]
- cmp r0, r4
- cmpeq r1, r4
- beq _02096930
-_0209696C:
- mov r0, #0x1
- add sp, sp, #0x28
- ldmia sp!, {r4-r10,pc}
- .balign 4
-_02096978: .word OS_GetTick
-_0209697C: .word 0x5D588B65
-_02096980: .word 0x00269EC3
-_02096984: .word 0x000009BF
-
- arm_func_start FUN_02096988
-FUN_02096988: ; 0x02096988
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x14
- mov lr, #0x0
- and r12, lr, #0x0
- mvn r5, #0xff000000
- ldr r4, _02096B08 ; =0x0000FFFF
- and r2, r2, #0x1
- mov r6, r12, lsl #0x2
- and r3, r3, #0x3
- and r5, r1, r5
- orr r1, r3, r2, lsl #0x2
- orr r6, r6, r2, lsr #0x1e
- mov r7, r12, lsl #0x3
- and r2, r0, r4
- orr r0, r1, r5, lsl #0x3
- orr r1, r0, r2, lsl #0x1b
- mov r3, r12, lsl #0x1b
- orr r3, r3, r2, lsr #0x5
- orr r7, r7, r5, lsr #0x1d
- orr r0, r12, r6
- orr r0, r7, r0
- orr r0, r3, r0
- add r2, sp, #0x0
- str r1, [sp, #0x0]
- str r0, [sp, #0x4]
-_020969EC:
- ldrb r0, [r2, #0x0]
- add lr, lr, #0x1
- cmp lr, #0x6
- eor r0, r0, #0xd6
- strb r0, [r2], #0x1
- blt _020969EC
- ldr r2, _02096B0C ; =UNK_020FF580
- add r5, sp, #0x0
- mov r4, #0x0
-_02096A10:
- ldrb r3, [r5, #0x0]
- add r4, r4, #0x1
- cmp r4, #0x5
- mov r0, r3, asr #0x4
- and r1, r0, #0xf
- and r0, r3, #0xf
- ldrb r1, [r2, r1]
- ldrb r0, [r2, r0]
- orr r0, r0, r1, lsl #0x4
- strb r0, [r5], #0x1
- blt _02096A10
- add r0, sp, #0x0
- add r1, sp, #0x8
- mov r2, #0x8
- bl MI_CpuCopy8
- ldr r4, _02096B10 ; =UNK_020FF578
- add r5, sp, #0x8
- mov r3, #0x0
- add r1, sp, #0x0
-_02096A5C:
- ldrb r2, [r5, #0x0]
- ldrb r0, [r4, #0x0]
- add r3, r3, #0x1
- cmp r3, #0x5
- strb r2, [r1, r0]
- add r5, r5, #0x1
- add r4, r4, #0x1
- blt _02096A5C
- ldrb r2, [sp, #0x5]
- mov r0, #0x0
- ldr r3, [sp, #0x0]
- and r2, r2, #0x7
- strb r0, [sp, #0x7]
- strb r0, [sp, #0x6]
- strb r2, [sp, #0x5]
- ldr r2, [sp, #0x4]
- mov r4, r3, lsl #0x1
- mov r2, r2, lsl #0x1
- orr r2, r2, r3, lsr #0x1f
- str r2, [sp, #0x4]
- ldrb r2, [sp, #0x5]
- str r4, [sp, #0x0]
- ldrb r3, [sp, #0x0]
- mov r2, r2, asr #0x3
- and r2, r2, #0x1
- orr r2, r3, r2
- strb r2, [sp, #0x0]
-_02096AC8:
- ldrb r2, [r1, #0x0]
- add r0, r0, #0x1
- cmp r0, #0x6
- eor r2, r2, #0x67
- strb r2, [r1], #0x1
- blt _02096AC8
- ldrb r0, [sp, #0x5]
- mov r1, #0x0
- strb r1, [sp, #0x7]
- and r0, r0, #0x7
- strb r1, [sp, #0x6]
- strb r0, [sp, #0x5]
- ldr r0, [sp, #0x0]
- ldr r1, [sp, #0x4]
- add sp, sp, #0x14
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_02096B08: .word 0x0000FFFF
-_02096B0C: .word UNK_020FF580
-_02096B10: .word UNK_020FF578
-
- .extern _SDK_NintendoDWC
-
- arm_func_start FUN_02096B14
-FUN_02096B14: ; 0x02096B14
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldr r0, _02096B74 ; =_SDK_NintendoDWC
- mov r4, #0x0
- bl OSi_ReferSymbol
- mov r0, r6
- bl FUN_02096190
- mov r5, r0
- bl FUN_020964C8
- cmp r0, #0x0
- beq _02096B4C
- mov r0, r6
- bl FUN_02096760
- mov r4, #0x1
-_02096B4C:
- cmp r5, #0x0
- bge _02096B64
- cmp r4, #0x0
- movne r0, #0x2
- moveq r0, #0x3
- ldmia sp!, {r4-r6,pc}
-_02096B64:
- cmp r4, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_02096B74: .word _SDK_NintendoDWC
-
- ; Nintendo Wifi (?)
-
- arm_func_start FUN_02096B78
-FUN_02096B78: ; 0x02096B78
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r4, r1
- mov r7, r0
- bl FUN_020974C8
- mov r5, r0
- mov r0, r4
- bl FUN_020974C8
- cmp r5, r0
- addne sp, sp, #0x4
- movne r0, #0x0
- ldmneia sp!, {r4-r7,pc}
- cmp r5, #0x3
- bne _02096BD8
- mov r0, r7
- bl FUN_02097544
- mov r5, r0
- mov r0, r4
- bl FUN_02097544
- cmp r5, r0
- moveq r0, #0x1
- add sp, sp, #0x4
- movne r0, #0x0
- ldmia sp!, {r4-r7,pc}
-_02096BD8:
- cmp r5, #0x1
- bne _02096C34
- mov r0, r7
- bl FUN_02097568
- mov r5, r0
- mov r6, r1
- mov r0, r4
- bl FUN_02097568
- cmp r6, r1
- cmpeq r5, r0
- bne _02096C28
- mov r0, r7
- bl FUN_02097560
- mov r5, r0
- mov r0, r4
- bl FUN_02097560
- cmp r5, r0
- addeq sp, sp, #0x4
- moveq r0, #0x1
- ldmeqia sp!, {r4-r7,pc}
-_02096C28:
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r7,pc}
-_02096C34:
- cmp r5, #0x2
- bne _02096C6C
- mov r0, r7
- bl FUN_0209754C
- mov r5, r0
- mov r6, r1
- mov r0, r4
- bl FUN_0209754C
- cmp r6, r1
- cmpeq r5, r0
- moveq r0, #0x1
- add sp, sp, #0x4
- movne r0, #0x0
- ldmia sp!, {r4-r7,pc}
-_02096C6C:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_02096C78
-FUN_02096C78: ; 0x02096C78
- ldr ip, _02096C8C ; =FUN_02097218
- mov r3, r0
- mov r0, r1
- ldr r1, [r3, #0x24]
- bx r12
- .balign 4
-_02096C8C: .word FUN_02097218
-
- arm_func_start FUN_02096C90
-FUN_02096C90: ; 0x02096C90
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r1
- mov r5, r0
- mov r1, #0x0
- mov r2, #0xc
- bl MI_CpuFill8
- mov r0, r5
- mov r1, r4
- bl FUN_020974F4
- mov r0, r5
- mov r1, #0x3
- bl FUN_02097440
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_02096CCC
-FUN_02096CCC: ; 0x02096CCC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r1
- mov r5, r0
- mov r0, r4
- mov r1, #0x0
- mov r2, #0xc
- bl MI_CpuFill8
- mov r0, r5
- bl FUN_0209702C
- cmp r0, #0x0
- addeq r0, r5, #0x4
- ldmeqia r0, {r0-r2}
- addeq sp, sp, #0x4
- stmeqia r4, {r0-r2}
- ldmeqia sp!, {r4-r5,pc}
- ldr r1, [r5, #0x1c]
- mov r0, r4
- bl FUN_020974F4
- mov r0, r4
- mov r1, #0x3
- bl FUN_02097440
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_02096D2C
-FUN_02096D2C: ; 0x02096D2C
- stmdb sp!, {r4-r6,lr}
- mov r5, r1
- mov r4, r2
- mov r6, r0
- mov r1, #0x0
- mov r2, #0xc
- bl MI_CpuFill8
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl FUN_020974FC
- mov r0, r6
- mov r1, #0x2
- bl FUN_02097440
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_02096D68
-FUN_02096D68: ; 0x02096D68
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r3, r0
- ldr r0, [r3, #0x1c]
- mov r2, #0x0
- mov r1, r2
- cmp r0, #0x0
- beq _02096D94
- ldr r1, [r3, #0x24]
- bl FUN_020973D0
- mov r2, r0
-_02096D94:
- mov r0, r2
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_02096DA0
-FUN_02096DA0: ; 0x02096DA0
- stmdb sp!, {r4-r6,lr}
- mov r4, r1
- mov r6, r0
- mov r0, r4
- bl FUN_020974C8
- cmp r0, #0x1
- beq _02096E14
- cmp r0, #0x2
- beq _02096DD0
- cmp r0, #0x3
- beq _02096E08
- b _02096E1C
-_02096DD0:
- mov r0, r4
- bl FUN_0209754C
- ldr r2, [r6, #0x24]
- mov r4, r0
- mov r5, r1
- bl FUN_02097344
- cmp r0, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- ldr r2, [r6, #0x24]
- mov r0, r4
- mov r1, r5
- bl FUN_02097324
- ldmia sp!, {r4-r6,pc}
-_02096E08:
- mov r0, r4
- bl FUN_02097544
- ldmia sp!, {r4-r6,pc}
-_02096E14:
- mvn r0, #0x0
- ldmia sp!, {r4-r6,pc}
-_02096E1C:
- mov r0, #0x0
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_02096E24
-FUN_02096E24: ; 0x02096E24
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_020974C8
- cmp r0, #0x2
- movne r0, #0x0
- movne r1, r0
- ldmneia sp!, {r4,pc}
- mov r0, r4
- bl FUN_0209754C
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_02096E4C
-FUN_02096E4C: ; 0x02096E4C
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x400
- mov r4, r0
- ldr r1, [r4, #0x20]
- add r0, sp, #0x0
- bic r2, r1, #0x1
- ldr r1, _02096E8C ; =0xEDB88320
- str r2, [r4, #0x20]
- bl MATHi_CRC32InitTableRev
- add r0, sp, #0x0
- mov r1, r4
- mov r2, #0x3c
- bl MATH_CalcCRC32
- str r0, [r4, #0x3c]
- add sp, sp, #0x400
- ldmia sp!, {r4,pc}
- .balign 4
-_02096E8C: .word 0xEDB88320
-
- arm_func_start thunk_FUN_02096e4c
-thunk_FUN_02096e4c: ; 0x02096E90
- ldr ip, _02096E98 ; =FUN_02096E4C
- bx r12
- .balign 4
-_02096E98: .word FUN_02096E4C
-
- arm_func_start FUN_02096E9C
-FUN_02096E9C: ; 0x02096E9C
- ldr r0, [r0, #0x20]
- and r0, r0, #0x1
- cmp r0, #0x1
- moveq r0, #0x1
- movne r0, #0x0
- bx lr
-
- arm_func_start FUN_02096EB4
-FUN_02096EB4: ; 0x02096EB4
- ldr ip, _02096EBC ; =FUN_02096E9C
- bx r12
- .balign 4
-_02096EBC: .word FUN_02096E9C
-
- arm_func_start FUN_02096EC0
-FUN_02096EC0: ; 0x02096EC0
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x400
- mov r4, r0
- add r3, r4, #0x10
- mov r12, r2
- ldmia r1, {r0-r2}
- stmia r3, {r0-r2}
- ldr r1, _02096F14 ; =0xEDB88320
- add r0, sp, #0x0
- str r12, [r4, #0x1c]
- bl MATHi_CRC32InitTableRev
- add r0, sp, #0x0
- mov r1, r4
- mov r2, #0x3c
- bl MATH_CalcCRC32
- str r0, [r4, #0x3c]
- ldr r0, [r4, #0x20]
- orr r0, r0, #0x1
- str r0, [r4, #0x20]
- add sp, sp, #0x400
- ldmia sp!, {r4,pc}
- .balign 4
-_02096F14: .word 0xEDB88320
-
- arm_func_start FUN_02096F18
-FUN_02096F18: ; 0x02096F18
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x18
- mov r4, r0
- add r0, r4, #0x10
- bl FUN_020974C8
- cmp r0, #0x0
- addeq sp, sp, #0x18
- moveq r0, #0x1
- ldmeqia sp!, {r4,pc}
- add r0, sp, #0x0
- bl FUN_02096518
- ldr r0, [sp, #0x10]
- cmp r0, #0x0
- addeq sp, sp, #0x18
- moveq r0, #0x0
- ldmeqia sp!, {r4,pc}
- add r0, r4, #0x10
- bl FUN_02097568
- ldr r2, [sp, #0x4]
- ldr r3, [sp, #0x0]
- cmp r2, r1
- cmpeq r3, r0
- moveq r0, #0x1
- movne r0, #0x0
- add sp, sp, #0x18
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_02096F80
-FUN_02096F80: ; 0x02096F80
- stmdb sp!, {r4,lr}
- mov r4, r0
- add r0, r4, #0x10
- bl FUN_0209703C
- cmp r0, #0x0
- beq _02096FA8
- ldr r0, [r4, #0x1c]
- cmp r0, #0x0
- movgt r0, #0x1
- ldmgtia sp!, {r4,pc}
-_02096FA8:
- mov r0, #0x0
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_02096FB0
-FUN_02096FB0: ; 0x02096FB0
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x400
- ldr r1, _02096FF0 ; =0xEDB88320
- mov r4, r0
- add r0, sp, #0x0
- bl MATHi_CRC32InitTableRev
- add r0, sp, #0x0
- mov r1, r4
- mov r2, #0x3c
- bl MATH_CalcCRC32
- ldr r1, [r4, #0x3c]
- cmp r0, r1
- moveq r0, #0x1
- movne r0, #0x0
- add sp, sp, #0x400
- ldmia sp!, {r4,pc}
- .balign 4
-_02096FF0: .word 0xEDB88320
-
- arm_func_start thunk_FUN_02097190
-thunk_FUN_02097190: ; 0x02096FF4
- ldr ip, _02096FFC ; =FUN_02097190
- bx r12
- .balign 4
-_02096FFC: .word FUN_02097190
-
- arm_func_start FUN_02097000
-FUN_02097000: ; 0x02097000
- ldr ip, _02097008 ; =FUN_0209700C
- bx r12
- .balign 4
-_02097008: .word FUN_0209700C
-
- arm_func_start FUN_0209700C
-FUN_0209700C: ; 0x0209700C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl FUN_020974C8
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_0209702C
-FUN_0209702C:
- ldr ip, _02097038 ; =FUN_0209703C
- add r0, r0, #0x10
- bx r12
- .balign 4
-_02097038: .word FUN_0209703C
-
- arm_func_start FUN_0209703C
-FUN_0209703C:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl FUN_020974C8
- cmp r0, #0x1
- moveq r0, #0x1
- movne r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_0209705C
-FUN_0209705C: ; 0x0209705C
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x18
- mov r4, r0
- add r0, sp, #0x0
- bl FUN_02096518
- ldr r0, [sp, #0x10]
- cmp r0, #0x0
- beq _020970A4
- mov r0, r4
- bl FUN_02097568
- ldr r2, [sp, #0x4]
- ldr r3, [sp, #0x0]
- cmp r2, r1
- cmpeq r3, r0
- moveq r0, #0x1
- add sp, sp, #0x18
- movne r0, #0x0
- ldmia sp!, {r4,pc}
-_020970A4:
- mov r0, r4
- bl FUN_02097568
- ldr r2, [sp, #0xc]
- ldr r3, [sp, #0x8]
- cmp r2, r1
- cmpeq r3, r0
- moveq r0, #0x1
- movne r0, #0x0
- add sp, sp, #0x18
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020970CC
-FUN_020970CC: ; 0x020970CC
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x38
- mov r6, r0
- add r0, sp, #0x14
- bl OS_GetLowEntropyData
- mov r3, #0x1
- add r2, sp, #0x14
-_020970E8:
- add r0, r2, r3, lsl #0x2
- ldr r1, [r2, r3, lsl #0x2]
- ldr r0, [r0, #-0x4]
- eor r0, r1, r0
- str r0, [r2, r3, lsl #0x2]
- add r3, r3, #0x1
- cmp r3, #0x8
- blo _020970E8
- add r0, sp, #0x0
- ldr r5, [sp, #0x30]
- mov r4, #0x0
- bl FUN_02096518
- ldr r0, [sp, #0x10]
- cmp r0, #0x0
- beq _02097138
- ldr r1, [sp, #0x0]
- ldr r2, [sp, #0x4]
- mov r0, r6
- bl FUN_02097510
- b _02097148
-_02097138:
- ldr r1, [sp, #0x8]
- ldr r2, [sp, #0xc]
- mov r0, r6
- bl FUN_02097510
-_02097148:
- ldr r0, _02097184 ; =0x6C078965
- ldr r1, _02097188 ; =0x5D588B65
- umull r3, r2, r5, r0
- mla r2, r5, r1, r2
- ldr r1, _0209718C ; =0x00269EC3
- mla r2, r4, r0, r2
- adds r0, r3, r1
- mov r0, r6
- adc r1, r2, #0x0
- bl FUN_02097508
- mov r0, r6
- mov r1, #0x1
- bl FUN_02097440
- add sp, sp, #0x38
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_02097184: .word 0x6C078965
-_02097188: .word 0x5D588B65
-_0209718C: .word 0x00269EC3
-
- arm_func_start FUN_02097190
-FUN_02097190: ; 0x02097190
- stmdb sp!, {r4-r5,lr}
- ldr ip, _02097210 ; =0x00000404
- sub sp, sp, r12
- mov r4, r1
- mov r1, #0x0
- mov r2, #0x40
- mov r5, r0
- bl MI_CpuFill8
- mov r0, #0x40
- str r0, [r5, #0x0]
- mov r0, #0x0
- str r0, [r5, #0x1c]
- add r0, r5, #0x4
- str r4, [r5, #0x24]
- bl FUN_020970CC
- add r0, r5, #0x10
- mov r1, #0x0
- bl FUN_02097440
- ldr r1, _02097214 ; =0xEDB88320
- add r0, sp, #0x0
- bl MATHi_CRC32InitTableRev
- add r0, sp, #0x0
- mov r1, r5
- mov r2, #0x3c
- bl MATH_CalcCRC32
- str r0, [r5, #0x3c]
- ldr r0, [r5, #0x20]
- orr r0, r0, #0x1
- str r0, [r5, #0x20]
- ldr ip, _02097210 ; =0x00000404
- add sp, sp, r12
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_02097210: .word 0x00000404
-_02097214: .word 0xEDB88320
-
- arm_func_start FUN_02097218
-FUN_02097218: ; 0x02097218
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x40
- mov r6, r0
- mov r4, r1
- mov r5, r2
- bl FUN_02097568
- add r3, sp, #0x14
- mov r2, #0x2b
- bl FUN_020972A8
- mov r0, r6
- bl FUN_02097560
- mov r1, #0x0
- mov r2, #0x20
- add r3, sp, #0x29
- bl FUN_020972A8
- mov r1, r4, lsr #0x18
- and r1, r1, #0xff
- str r1, [sp, #0x0]
- mov r1, r4, lsr #0x10
- and r1, r1, #0xff
- str r1, [sp, #0x4]
- mov r1, r4, lsr #0x8
- and r1, r1, #0xff
- str r1, [sp, #0x8]
- and r1, r4, #0xff
- str r1, [sp, #0xc]
- add r2, sp, #0x29
- str r2, [sp, #0x10]
- ldr r2, _020972A4 ; =UNK_0210618C
- mov r0, r5
- mov r1, #0x15
- add r3, sp, #0x14
- bl OS_SNPrintf
- add sp, sp, #0x40
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020972A4: .word UNK_0210618C
-
- arm_func_start FUN_020972A8
-FUN_020972A8: ; 0x020972A8
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr lr, _0209731C ; =0x66666667
- add r4, r2, #0x4
- smull r12, r2, lr, r4
- mov r2, r2, asr #0x1
- mov r12, r4, lsr #0x1f
- add r2, r12, r2
- cmp r2, #0x0
- ldr r6, _02097320 ; =UNK_0210619C
- mov r7, #0x0
- ble _0209730C
- add r4, r3, r2
- sub r4, r4, #0x1
- mov r12, #0x1f
-_020972E4:
- and r5, r0, r12
- ldrsb r5, [r6, r5]
- mov r0, r0, lsr #0x5
- mov lr, r1, lsr #0x5
- strb r5, [r4, -r7]
- add r7, r7, #0x1
- orr r0, r0, r1, lsl #0x1b
- mov r1, lr
- cmp r7, r2
- blt _020972E4
-_0209730C:
- mov r0, #0x0
- strb r0, [r3, r2]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_0209731C: .word 0x66666667
-_02097320: .word UNK_0210619C
-
- arm_func_start FUN_02097324
-FUN_02097324: ; 0x02097324
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_02097344
- cmp r0, #0x0
- mvnne r0, #0x0
- andne r0, r4, r0
- moveq r0, #0x0
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_02097344
-FUN_02097344:
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x108
- mov r4, r1
- and r3, r4, #0x0
- mov r1, #0x0
- and r12, r0, #0x80000000
- cmp r3, r1
- cmpeq r12, r1
- addne sp, sp, #0x108
- movne r0, r1
- ldmneia sp!, {r4,pc}
- str r0, [sp, #0x0]
- add r0, sp, #0x8
- mov r1, #0x7
- str r2, [sp, #0x4]
- bl MATHi_CRC8InitTable
- add r0, sp, #0x8
- add r1, sp, #0x0
- mov r2, #0x8
- bl MATH_CalcCRC8
- and r2, r0, #0x7f
- mov r1, r2, asr #0x1f
- mov r0, #0x0
- cmp r1, r0
- cmpeq r2, r4
- moveq r0, #0x1
- add sp, sp, #0x108
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020973B4
-FUN_020973B4: ; 0x020973B4
- ldr ip, _020973CC ; =FUN_02097344
- mov r3, r0
- mov r0, r1
- mov r1, r2
- ldr r2, [r3, #0x24]
- bx r12
- .balign 4
-_020973CC: .word FUN_02097344
-
- arm_func_start FUN_020973D0
-FUN_020973D0: ; 0x020973D0
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x108
- mov r4, r0
- str r1, [sp, #0x4]
- add r0, sp, #0x8
- mov r1, #0x7
- str r4, [sp, #0x0]
- bl MATHi_CRC8InitTable
- add r0, sp, #0x8
- add r1, sp, #0x0
- mov r2, #0x8
- bl MATH_CalcCRC8
- and r0, r0, #0x7f
- orr r1, r0, #0x0
- orr r0, r4, #0x0
- add sp, sp, #0x108
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_02097414
-FUN_02097414: ; 0x02097414
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_020974C8
- cmp r0, #0x3
- ldmneia sp!, {r4,pc}
- mov r0, r4
- bl FUN_020974E0
- orr r1, r0, #0x4
- mov r0, r4
- bl FUN_0209746C
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_02097440
-FUN_02097440: ; 0x02097440
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r1
- bl FUN_020974E0
- bic r1, r0, #0x3
- mov r0, r5
- orr r1, r1, r4
- bl FUN_0209746C
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_0209746C
-FUN_0209746C: ; 0x0209746C
- ldr ip, _0209747C ; =FUN_02097588
- ldr r3, _02097480 ; =0x001FFFFF
- mov r2, #0xb
- bx r12
- .balign 4
-_0209747C: .word FUN_02097588
-_02097480: .word 0x001FFFFF
-
- arm_func_start FUN_02097484
-FUN_02097484: ; 0x02097484
- ldr ip, _0209748C ; =FUN_020974C8
- bx r12
- .balign 4
-_0209748C: .word FUN_020974C8
-
- arm_func_start FUN_02097490
-FUN_02097490: ; 0x02097490
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_020974C8
- cmp r0, #0x3
- bne _020974C0
- mov r0, r4
- bl FUN_020974E0
- and r0, r0, #0x4
- cmp r0, #0x4
- moveq r0, #0x1
- movne r0, #0x0
- ldmia sp!, {r4,pc}
-_020974C0:
- mov r0, #0x0
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020974C8
-FUN_020974C8: ; 0x020974C8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl FUN_020974E0
- and r0, r0, #0x3
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020974E0
-FUN_020974E0: ; 0x020974E0
- ldr r1, [r0, #0x0]
- ldr r0, _020974F0 ; =0x001FFFFF
- and r0, r0, r1, lsr #0xb
- bx lr
- .balign 4
-_020974F0: .word 0x001FFFFF
-
- arm_func_start FUN_020974F4
-FUN_020974F4: ; 0x020974F4
- str r1, [r0, #0x4]
- bx lr
-
- arm_func_start FUN_020974FC
-FUN_020974FC: ; 0x020974FC
- str r1, [r0, #0x4]
- str r2, [r0, #0x8]
- bx lr
-
- arm_func_start FUN_02097508
-FUN_02097508: ; 0x02097508
- str r1, [r0, #0x8]
- bx lr
-
- arm_func_start FUN_02097510
-FUN_02097510: ; 0x02097510
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r12, #0x0
- mov r4, r1
- mov r1, r2
- ldr r3, _02097540 ; =0x000007FF
- mov r2, r12
- mov r5, r0
- bl FUN_02097588
- str r4, [r5, #0x4]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_02097540: .word 0x000007FF
-
- arm_func_start FUN_02097544
-FUN_02097544:
- ldr r0, [r0, #0x4]
- bx lr
-
- arm_func_start FUN_0209754C
-FUN_0209754C: ; 0x0209754C
- ldr r1, [r0, #0x8]
- ldr r0, [r0, #0x4]
- orr r1, r1, #0x0
- orr r0, r0, #0x0
- bx lr
-
- arm_func_start FUN_02097560
-FUN_02097560:
- ldr r0, [r0, #0x8]
- bx lr
-
- arm_func_start FUN_02097568
-FUN_02097568: ; 0x02097568
- ldr r2, [r0, #0x0]
- ldr r1, _02097584 ; =0x000007FF
- ldr r0, [r0, #0x4]
- and r1, r2, r1
- orr r1, r1, #0x0
- orr r0, r0, #0x0
- bx lr
- .balign 4
-_02097584: .word 0x000007FF
-
- arm_func_start FUN_02097588
-FUN_02097588: ; 0x02097588
- mvn r12, r3
- ands r12, r1, r12
- movne r0, #0x0
- bxne lr
- mvn r3, r3, lsl r2
- ldr r12, [r0, #0x0]
- and r3, r12, r3
- orr r1, r3, r1, lsl r2
- str r1, [r0, #0x0]
- mov r0, #0x1
- bx lr
diff --git a/arm9/global.inc b/arm9/global.inc
index 12497154..07ea6384 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -5474,47 +5474,47 @@
.extern FUN_020910EC
.extern FUN_0209521C
.extern FUN_020952AC
-.extern FUN_02095324
-.extern FUN_02095330
-.extern FUN_02095AE0
-.extern FUN_02095B0C
-.extern FUN_02095BB0
-.extern FUN_02095BE0
-.extern FUN_02095CDC
-.extern FUN_02095D68
-.extern FUN_02095EC8
-.extern FUN_02095FA8
-.extern FUN_02096190
+.extern DWCi_BACKUPlGetWifi
+.extern DWCi_BACKUPlConvWifiInfo
+.extern DWC_BACKUPlCheckAddress
+.extern DWC_BACKUPlCheckIp
+.extern DWCi_BACKUPlConvMaskAddr
+.extern DWCi_BACKUPlConvMaskCidr
+.extern DWCi_BACKUPlWritePage
+.extern DWCi_BACKUPlRead
+.extern DWCi_BM_GetWiFiInfo
+.extern DWCi_BM_GetApInfo
+.extern DWC_BM_Init
.extern FUN_02096570
.extern FUN_02096710
-.extern FUN_02096760
-.extern FUN_020967A4
-.extern FUN_02096B14
-.extern FUN_02096B78
-.extern FUN_02096C78
-.extern FUN_02096C90
-.extern FUN_02096CCC
-.extern FUN_02096D2C
-.extern FUN_02096D68
-.extern FUN_02096DA0
-.extern FUN_02096E24
-.extern FUN_02096EB4
-.extern FUN_02096EC0
-.extern FUN_02096F18
-.extern FUN_02096F80
-.extern FUN_02096FB0
-.extern FUN_02097000
-.extern FUN_0209700C
-.extern FUN_0209702C
-.extern FUN_0209703C
-.extern FUN_0209705C
-.extern FUN_020970CC
-.extern FUN_02097218
-.extern FUN_020973B4
-.extern FUN_02097414
-.extern FUN_02097484
-.extern FUN_02097490
-.extern FUN_02097508
+.extern DWCi_AUTH_MakeWiFiID
+.extern DWCi_AUTH_GetNewWiFiInfo
+.extern DWC_Init
+.extern DWC_IsEqualFriendData
+.extern DWC_LoginIdToUserName
+.extern DWC_SetGsProfileId
+.extern DWC_CreateExchangeToken
+.extern DWC_CreateFriendKeyToken
+.extern DWC_CreateFriendKey
+.extern DWC_GetGsProfileId
+.extern DWC_GetFriendKey
+.extern DWC_CheckDirtyFlag
+.extern DWCi_Acc_SetLoginIdToUserData
+.extern DWC_CheckValidConsole
+.extern DWC_CheckHasProfile
+.extern DWC_CheckUserData
+.extern DWCi_Acc_IsValidFriendData
+.extern DWC_IsValidFriendData
+.extern DWCi_Acc_IsAuthentic
+.extern DWCi_Acc_IsValidLoginId
+.extern DWCi_Acc_CheckConsoleUserId
+.extern DWCi_Acc_CreateTempLoginId
+.extern DWCi_Acc_LoginIdToUserName
+.extern DWC_CheckFriendKey
+.extern DWCi_SetBuddyFriendData
+.extern DWC_GetFriendDataType
+.extern DWC_IsBuddyFriendData
+.extern DWCi_Acc_SetPlayerId
.extern WCM_GetPhase
.extern WCM_TerminateAsync
.extern WCM_DisconnectAsync
@@ -7874,8 +7874,8 @@
.extern sys_writec
.extern tempName_NNS_FndAllocFromExpHeapEx
.extern tempName_NNS_FndCreateExpHeapEx
-.extern thunk_FUN_02096e4c
-.extern thunk_FUN_02097190
+.extern DWC_ClearDirtyFlag
+.extern DWC_CreateUserData
.extern thunk_FUN_020adc8c
.extern thunk_FUN_020adc8c_2
.extern thunk_FUN_020ae84c
@@ -7897,3 +7897,10 @@
.extern WCMi_EntryApList
.extern WCMi_CpsifRecvCallback
.extern WCMi_ShelterRssi
+.extern DWC_Auth_GetId
+.extern DWC_BACKUPlCheckSsid
+.extern DWCi_BACKUPlInit
+.extern DWCi_BACKUPlSetWiFi
+.extern DWCi_BACKUPlWriteAll
+.extern DWCi_BM_SetWiFiInfo
+.extern DWC_Auth_CheckWiFiIDNeedCreate
diff --git a/arm9/modules/04/asm/arm_04.s b/arm9/modules/04/asm/arm_04.s
index 1f9a41fa..835a8975 100644
--- a/arm9/modules/04/asm/arm_04.s
+++ b/arm9/modules/04/asm/arm_04.s
@@ -457,7 +457,7 @@ _021D9378:
_021D93AC:
add r0, r5, #0x1f
bic r0, r0, #0x1f
- bl FUN_02096760
+ bl DWCi_AUTH_MakeWiFiID
ldr r0, _021D940C ; =0x0220BF98
mov r1, r5
mov r2, #0
@@ -718,7 +718,7 @@ MOD04_021D96EC: ; 0x021D96EC
cmp r4, #1
bne _021D9758
ldr r0, _021D97EC ; =0x0221046C
- bl FUN_02095EC8
+ bl DWCi_BM_GetWiFiInfo
_021D9758:
ldr r0, _021D97E8 ; =0x02210468
ldr r2, _021D97F0 ; =0x000011CC
@@ -1482,7 +1482,7 @@ MOD04_021DA238: ; 0x021DA238
sub sp, sp, #0x18
mov r4, r0
add r0, sp, #0
- bl FUN_02095EC8
+ bl DWCi_BM_GetWiFiInfo
add r1, sp, #0
mov r0, r4
bl MOD04_021D9F78
@@ -3343,7 +3343,7 @@ _021DBCB4:
ldr r0, [r4]
bl MOD04_021DAE4C
add r0, sp, #0x68
- bl FUN_02095EC8
+ bl DWCi_BM_GetWiFiInfo
ldr r2, [sp, #0x68]
ldr r1, [sp, #0x6c]
mov r0, #0
@@ -8747,7 +8747,7 @@ MOD04_021E0628: ; 0x021E0628
ldr r1, [r2, #0xc]
add r2, sp, #8
add r0, r0, #4
- bl FUN_02097218
+ bl DWCi_Acc_LoginIdToUserName
ldr r1, _021E07D0 ; =0x00000705
add r2, sp, #8
mov r0, r5
@@ -8791,7 +8791,7 @@ _021E0704:
ldr r1, [r2, #0xc]
add r2, sp, #0x1d
add r0, r0, #4
- bl FUN_02097218
+ bl DWCi_Acc_LoginIdToUserName
add r1, sp, #0x1d
add r0, r4, #0x8e
bl strcmp
@@ -8802,13 +8802,13 @@ _021E0704:
ldr r0, [r0]
ldr r1, [r0, #0xc]
add r0, r0, #0x3c
- bl FUN_02097218
+ bl DWCi_Acc_LoginIdToUserName
ldr r0, _021E07CC ; =0x022106C8
ldr r2, [r4, #4]
ldr r1, [r0]
ldr r0, [r1, #0x1c]
add r1, r1, #0x3c
- bl FUN_02096EC0
+ bl DWCi_Acc_SetLoginIdToUserData
mov r0, r5
bl MOD04_021F0D54
ldr r0, _021E07CC ; =0x022106C8
@@ -8876,7 +8876,7 @@ MOD04_021E07E4: ; 0x021E07E4
str r2, [r1, #0x24]
ldr r0, [r0]
ldr r0, [r0, #0x1c]
- bl FUN_0209702C
+ bl DWCi_Acc_IsAuthentic
cmp r0, #0
beq _021E0898
ldr r0, _021E09DC ; =0x022106C8
@@ -9002,7 +9002,7 @@ MOD04_021E0A00: ; 0x021E0A00
str r5, [r2]
str r4, [r1]
ldr r0, [r0, #0x1c]
- bl FUN_0209702C
+ bl DWCi_Acc_IsAuthentic
cmp r0, #0
beq _021E0A68
ldr r0, _021E0BB8 ; =0x022106C8
@@ -9011,20 +9011,20 @@ MOD04_021E0A00: ; 0x021E0A00
add r2, r1, #0x248
ldr r1, [r0, #0x24]
add r0, r0, #0x10
- bl FUN_02097218
+ bl DWCi_Acc_LoginIdToUserName
b _021E0B1C
_021E0A68:
ldr r0, _021E0BB8 ; =0x022106C8
ldr r0, [r0]
add r0, r0, #0x3c
- bl FUN_0209703C
+ bl DWCi_Acc_IsValidLoginId
cmp r0, #0
bne _021E0AD0
ldr r0, _021E0BB8 ; =0x022106C8
ldr r0, [r0]
ldr r0, [r0, #0x1c]
add r0, r0, #4
- bl FUN_0209705C
+ bl DWCi_Acc_CheckConsoleUserId
cmp r0, #0
beq _021E0ABC
ldr r0, _021E0BB8 ; =0x022106C8
@@ -9039,7 +9039,7 @@ _021E0ABC:
ldr r0, _021E0BB8 ; =0x022106C8
ldr r0, [r0]
add r0, r0, #0x3c
- bl FUN_020970CC
+ bl DWCi_Acc_CreateTempLoginId
b _021E0B04
_021E0AD0:
bl OS_GetTick
@@ -9054,14 +9054,14 @@ _021E0AD0:
ldr r3, [r3]
adc r1, r4, #0
add r0, r3, #0x3c
- bl FUN_02097508
+ bl DWCi_Acc_SetPlayerId
_021E0B04:
ldr r0, _021E0BB8 ; =0x022106C8
ldr r2, [r0]
ldr r1, [r2, #0xc]
add r0, r2, #0x3c
add r2, r2, #0x248
- bl FUN_02097218
+ bl DWCi_Acc_LoginIdToUserName
_021E0B1C:
ldr r0, _021E0BB8 ; =0x022106C8
ldr r0, [r0]
@@ -9534,7 +9534,7 @@ MOD04_021E110C: ; 0x021E110C
_021E115C:
ldr r0, [r2, #0x18]
add r0, r0, r7
- bl FUN_02097484
+ bl DWC_GetFriendDataType
cmp r0, #1
bne _021E11C8
bl MOD04_021E0F00
@@ -9542,7 +9542,7 @@ _021E115C:
add r2, sp, #8
ldr r1, [r1, #0x18]
add r1, r1, r7
- bl FUN_02096C78
+ bl DWC_LoginIdToUserName
add r0, sp, #8
add r1, sl, #0x8e
bl strcmp
@@ -9552,31 +9552,31 @@ _021E115C:
ldr r1, [sl, #4]
ldr r0, [r0, #0x18]
add r0, r0, r7
- bl FUN_02096C90
+ bl DWC_SetGsProfileId
ldr r0, [r4]
ldr r0, [r0, #0x18]
add r0, r0, r7
- bl FUN_02097414
+ bl DWCi_SetBuddyFriendData
mov r8, r5
b _021E125C
_021E11C8:
ldr r0, [r4]
ldr r0, [r0, #0x18]
add r0, r0, r7
- bl FUN_02097484
+ bl DWC_GetFriendDataType
cmp r0, #3
beq _021E11F8
ldr r0, [r4]
ldr r0, [r0, #0x18]
add r0, r0, r7
- bl FUN_02097484
+ bl DWC_GetFriendDataType
cmp r0, #2
bne _021E125C
_021E11F8:
ldr r0, [r4]
ldr r0, [r0, #0x18]
add r0, r0, r7
- bl FUN_02097490
+ bl DWC_IsBuddyFriendData
cmp r0, #1
streq fp, [sp]
beq _021E125C
@@ -9585,18 +9585,18 @@ _021E11F8:
ldr r1, [r4]
ldr r1, [r1, #0x18]
add r1, r1, r7
- bl FUN_02096DA0
+ bl DWC_GetGsProfileId
cmp r6, r0
bne _021E125C
ldr r0, [r4]
mov r1, r6
ldr r0, [r0, #0x18]
add r0, r0, r7
- bl FUN_02096C90
+ bl DWC_SetGsProfileId
ldr r0, [r4]
ldr r0, [r0, #0x18]
add r0, r0, r7
- bl FUN_02097414
+ bl DWCi_SetBuddyFriendData
ldr r8, [sp, #4]
_021E125C:
ldr r2, [r4]
@@ -9650,7 +9650,7 @@ MOD04_021E12B8: ; 0x021E12B8
_021E1304:
ldr r0, [r1, #0x18]
add r0, r0, r7
- bl FUN_02097484
+ bl DWC_GetFriendDataType
cmp r0, #1
bne _021E136C
bl MOD04_021E0F00
@@ -9658,7 +9658,7 @@ _021E1304:
add r2, sp, #4
ldr r1, [r1, #0x18]
add r1, r1, r7
- bl FUN_02096C78
+ bl DWC_LoginIdToUserName
ldr r1, [sp]
add r0, sp, #4
bl strcmp
@@ -9671,20 +9671,20 @@ _021E1304:
ldr r1, [sb, #4]
ldr r0, [r0, #0x18]
add r0, r0, r7
- bl FUN_02096C90
+ bl DWC_SetGsProfileId
mov fp, r5
b _021E13CC
_021E136C:
ldr r0, [r4]
ldr r0, [r0, #0x18]
add r0, r0, r7
- bl FUN_02097484
+ bl DWC_GetFriendDataType
cmp r0, #3
beq _021E139C
ldr r0, [r4]
ldr r0, [r0, #0x18]
add r0, r0, r7
- bl FUN_02097484
+ bl DWC_GetFriendDataType
cmp r0, #2
bne _021E13CC
_021E139C:
@@ -9693,7 +9693,7 @@ _021E139C:
ldr r1, [r4]
ldr r1, [r1, #0x18]
add r1, r1, r7
- bl FUN_02096DA0
+ bl DWC_GetGsProfileId
cmp r6, r0
bne _021E13CC
mov r0, sl
@@ -9742,7 +9742,7 @@ MOD04_021E1414: ; 0x021E1414
ldr r0, [r1]
ldr r0, [r0, #0x18]
add r0, r0, r6
- bl FUN_02097484
+ bl DWC_GetFriendDataType
cmp r0, #0
beq _021E15FC
ldr r7, _021E1670 ; =0x022106D0
@@ -9813,12 +9813,12 @@ _021E1548:
ldr r1, [r1]
ldr r0, [r0, #0x18]
add r0, r0, r6
- bl FUN_02096C90
+ bl DWC_SetGsProfileId
ldr r0, _021E1670 ; =0x022106D0
ldr r0, [r0]
ldr r0, [r0, #0x18]
add r0, r0, r6
- bl FUN_02097414
+ bl DWCi_SetBuddyFriendData
mov r0, r8
bl MOD04_021E1DA4
ldr r0, _021E1670 ; =0x022106D0
@@ -9871,7 +9871,7 @@ _021E1618:
ldr r1, [r1, #0x18]
mov r0, #0xc
mla r0, r8, r0, r1
- bl FUN_02097484
+ bl DWC_GetFriendDataType
cmp r0, #0
addne sp, sp, #4
ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
@@ -9951,7 +9951,7 @@ _021E1720:
_021E172C:
bl MOD04_021E0F00
mov r1, r5
- bl FUN_02096DA0
+ bl DWC_GetGsProfileId
mov r5, r0
cmp r5, #0
ble _021E176C
@@ -10042,23 +10042,23 @@ _021E1858:
cmp sb, r0
bne _021E18CC
mov r0, r6
- bl FUN_02097484
+ bl DWC_GetFriendDataType
cmp r0, #2
bne _021E1894
mov r0, r4
- bl FUN_02097484
+ bl DWC_GetFriendDataType
cmp r0, #3
bne _021E1894
mov r0, r5
mov r1, sb
- bl FUN_02096C90
+ bl DWC_SetGsProfileId
_021E1894:
mov r0, r4
- bl FUN_02097490
+ bl DWC_IsBuddyFriendData
cmp r0, #0
beq _021E18AC
mov r0, r5
- bl FUN_02097414
+ bl DWCi_SetBuddyFriendData
_021E18AC:
mov r0, fp
mov r1, r7
@@ -10105,12 +10105,12 @@ _021E1920:
bne _021E199C
mov r0, #0xc
mla r0, r6, r0, r7
- bl FUN_02097490
+ bl DWC_IsBuddyFriendData
cmp r0, #0
beq _021E1974
mov r0, #0xc
mla r0, r4, r0, r7
- bl FUN_02097490
+ bl DWC_IsBuddyFriendData
cmp r0, #0
bne _021E1974
mov r0, r7
@@ -10232,15 +10232,15 @@ _021E1AD8:
bne _021E1B24
mul sl, r4, r7
add r0, r6, sl
- bl FUN_02097490
+ bl DWC_IsBuddyFriendData
cmp r0, #0
bne _021E1B30
add sl, r6, sl
ldr r1, [sp, #0x38]
mov r0, sl
- bl FUN_02096C90
+ bl DWC_SetGsProfileId
mov r0, sl
- bl FUN_02097414
+ bl DWCi_SetBuddyFriendData
ldr r0, [r8]
strb sb, [r0, #0x1d]
b _021E1B30
@@ -10312,7 +10312,7 @@ _021E1C08:
ldr r1, [sl]
ldrb r2, [r1, #0x1c]
mla r1, r2, r8, r6
- bl FUN_02096DA0
+ bl DWC_GetGsProfileId
cmp r0, sb
bne _021E1C9C
bl MOD04_021E0F00
@@ -10322,7 +10322,7 @@ _021E1C08:
add r2, sp, #0x20
ldrb r3, [r3, #0x1c]
mla r1, r3, r1, r6
- bl FUN_02096C78
+ bl DWC_LoginIdToUserName
ldr r0, _021E1CC4 ; =0x022106D0
mov r1, #0
ldr r4, [r0]
@@ -10585,7 +10585,7 @@ MOD04_021E1F84: ; 0x021E1F84
bl MOD04_021E0F00
mov r1, #0xc
mla r1, r5, r1, r4
- bl FUN_02096DA0
+ bl DWC_GetGsProfileId
cmp r0, #0
beq _021E1FD4
mvn r1, #0
@@ -15142,7 +15142,7 @@ _021E5E50:
ldrb r2, [r2, #0x304]
mov r0, fp
mla r1, r2, r1, r3
- bl FUN_02096DA0
+ bl DWC_GetGsProfileId
movs sl, r0
beq _021E5DB4
mvn r0, #0
@@ -15159,7 +15159,7 @@ _021E5E50:
add r1, fp, r1
ldrb r1, [r1, #0x304]
mla r0, r1, r0, r2
- bl FUN_02097000
+ bl DWCi_Acc_IsValidFriendData
cmp r0, #0
beq _021E5DB4
mov r6, r7
@@ -21924,7 +21924,7 @@ MOD04_021EBC60: ; 0x021EBC60
and r1, r1, #3
orr r1, r2, r1, lsl #4
strb r1, [r0, #0xd0c]
- bl FUN_02095FA8
+ bl DWCi_BM_GetApInfo
ldr r0, _021EBE14 ; =0x02210E4C
mov r1, #0x2300
ldr r0, [r0]
@@ -53611,7 +53611,7 @@ MOD04_022071C0: ; 0x022071C0
mov r1, #0x14
bl MOD04_022083B4
add r0, sp, #0
- bl FUN_02095EC8
+ bl DWCi_BM_GetWiFiInfo
ldr r1, [sp]
ldr r2, [sp, #4]
mov r0, #0
diff --git a/arm9/modules/04/asm/thumb_04.s b/arm9/modules/04/asm/thumb_04.s
index d10d80bb..56664ef1 100644
--- a/arm9/modules/04/asm/thumb_04.s
+++ b/arm9/modules/04/asm/thumb_04.s
@@ -159,7 +159,7 @@ _021D7608:
ldr r1, [r0]
ldr r0, _021D7658 ; =0x00001EF0
ldr r0, [r1, r0]
- bl FUN_02096F80
+ bl DWC_CheckHasProfile
cmp r0, #0
bne _021D762C
mov r0, #1
@@ -169,7 +169,7 @@ _021D762C:
ldr r1, [r0]
ldr r0, _021D7658 ; =0x00001EF0
ldr r0, [r1, r0]
- bl FUN_02096F18
+ bl DWC_CheckValidConsole
cmp r0, #0
beq _021D7640
mov r0, #0
@@ -719,14 +719,14 @@ MOD04_021D7A7C: ; 0x021D7A7C
ldr r1, [r0]
ldr r0, _021D7AFC ; =0x00001EF0
ldr r0, [r1, r0]
- bl FUN_02096EB4
+ bl DWC_CheckDirtyFlag
cmp r0, #0
beq _021D7AB0
ldr r0, _021D7AF8 ; =0x0220FBC0
ldr r1, [r0]
ldr r0, _021D7AFC ; =0x00001EF0
ldr r0, [r1, r0]
- bl thunk_FUN_02096e4c
+ bl DWC_ClearDirtyFlag
ldr r0, _021D7AF8 ; =0x0220FBC0
ldr r1, [r0]
mov r0, #0x1f
@@ -1979,7 +1979,7 @@ _021D8400:
lsl r1, r1, #8
ldr r0, [r0, r1]
add r0, r0, r4
- bl FUN_02097490
+ bl DWC_IsBuddyFriendData
cmp r0, #0
beq _021D844A
mov r0, #0x11
@@ -2192,7 +2192,7 @@ MOD04_021D85B4: ; 0x021D85B4
ldr r1, [r0]
ldr r0, _021D8618 ; =0x00001EF0
ldr r0, [r1, r0]
- bl FUN_02096F80
+ bl DWC_CheckHasProfile
cmp r0, #0
bne _021D85D8
ldr r0, _021D8614 ; =0x0220FBC0
@@ -2200,7 +2200,7 @@ MOD04_021D85B4: ; 0x021D85B4
ldr r0, _021D8618 ; =0x00001EF0
ldr r0, [r1, r0]
add r1, sp, #0xc
- bl FUN_02096CCC
+ bl DWC_CreateExchangeToken
b _021D85E6
_021D85D8:
ldr r0, _021D8614 ; =0x0220FBC0
@@ -2208,7 +2208,7 @@ _021D85D8:
ldr r0, _021D8618 ; =0x00001EF0
ldr r0, [r1, r0]
add r1, sp, #0
- bl FUN_02096CCC
+ bl DWC_CreateExchangeToken
_021D85E6:
mov r4, #0
mov r7, #0x11
@@ -2221,11 +2221,11 @@ _021D85F0:
lsl r0, r0, #8
ldr r0, [r1, r0]
add r0, r0, r5
- bl FUN_02097484
+ bl DWC_GetFriendDataType
ldr r0, [r6]
ldr r0, [r0, r7]
add r0, r0, r5
- bl FUN_02097490
+ bl DWC_IsBuddyFriendData
add r4, r4, #1
add r5, #0xc
cmp r4, #0x20
diff --git a/arm9/modules/13/asm/module_13_arm2.s b/arm9/modules/13/asm/module_13_arm2.s
index 6245d91c..b0291130 100644
--- a/arm9/modules/13/asm/module_13_arm2.s
+++ b/arm9/modules/13/asm/module_13_arm2.s
@@ -5713,7 +5713,7 @@ _0222338C:
mov r1, #0x20
bl MOD13_0223B004
str r0, [sp]
- bl FUN_02096190
+ bl DWC_BM_Init
add r0, sp, #0
bl MOD13_0223AF90
add sp, sp, #4
@@ -7885,7 +7885,7 @@ MOD13_02224FEC: ; 0x02224FEC
mov r0, fp
bl MOD13_0223A4F0
add r0, sp, #0x1c
- bl FUN_02095EC8
+ bl DWCi_BM_GetWiFiInfo
ldr sb, [sp, #0x1c]
ldr sl, [sp, #0x20]
mov r3, #0
@@ -8250,7 +8250,7 @@ _02225578:
b _022255E4
_02225584:
add r0, sp, #0
- bl FUN_02095EC8
+ bl DWCi_BM_GetWiFiInfo
ldr r0, _022255F4 ; =0x0224308C
ldrb r0, [r0]
cmp r0, #0
@@ -8485,7 +8485,7 @@ _02225844:
bl MOD13_022393D8
mov r5, r0
add r0, sp, #0x30
- bl FUN_02095EC8
+ bl DWCi_BM_GetWiFiInfo
ldr r1, [sp, #0x30]
ldr r0, [sp, #0x34]
mov r6, #0
@@ -14113,7 +14113,7 @@ _0222A464:
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_0222A48C:
add r0, sp, #8
- bl FUN_02095AE0
+ bl DWC_BACKUPlCheckAddress
cmp r0, #0
movne r0, #1
moveq r0, #0
@@ -15568,11 +15568,11 @@ MOD13_0222B87C: ; 0x0222B87C
cmp r0, #0
bne _0222B8C8
add r0, r4, #0xc8
- bl FUN_02095AE0
+ bl DWC_BACKUPlCheckAddress
cmp r0, #0
bne _0222B8C8
add r0, r4, #0xcc
- bl FUN_02095AE0
+ bl DWC_BACKUPlCheckAddress
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
@@ -15581,18 +15581,18 @@ _0222B8C8:
cmp r0, #0
bne _0222B914
add r0, r4, #0xc0
- bl FUN_02095AE0
+ bl DWC_BACKUPlCheckAddress
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
add r0, r4, #0xc4
- bl FUN_02095AE0
+ bl DWC_BACKUPlCheckAddress
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
add r0, r4, #0xc0
add r1, r4, #0xf0
- bl FUN_02095B0C
+ bl DWC_BACKUPlCheckIp
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
@@ -17255,7 +17255,7 @@ _0222D02C:
bl MOD13_02234164
mov r4, r0
add r0, r4, #0xf0
- bl FUN_02095BE0
+ bl DWCi_BACKUPlConvMaskCidr
strb r0, [r4, #0xd0]
ldrb r0, [r4, #0xf5]
cmp r0, #0
@@ -21999,11 +21999,11 @@ MOD13_02231090: ; 0x02231090
bl MOD04_021EB9D8
cmp r0, #0
ldmeqia sp!, {r4, pc}
- bl FUN_02095324
+ bl DWCi_BACKUPlGetWifi
add r1, r4, #0xf0
mov r2, #0xe
bl MI_CpuCopy8
- bl FUN_02095324
+ bl DWCi_BACKUPlGetWifi
add r1, r4, #0x1f0
mov r2, #0xe
bl MI_CpuCopy8
@@ -24971,7 +24971,7 @@ _022337BC:
add r1, sp, #4
ldr r0, [r0]
str r2, [sp]
- bl FUN_02095CDC
+ bl DWCi_BACKUPlWritePage
add r0, sp, #0
bl MOD13_0223AF90
add sp, sp, #0x14
@@ -25000,9 +25000,9 @@ _02233830:
cmp r3, #3
blt _02233830
add r0, sp, #0
- bl FUN_020967A4
+ bl DWCi_AUTH_GetNewWiFiInfo
add r0, sp, #0
- bl FUN_02095330
+ bl DWCi_BACKUPlConvWifiInfo
mov r6, #0
ldr r4, _022338B4 ; =0x02243150
mov r8, r0
@@ -25257,7 +25257,7 @@ _02233BB4:
mov r2, #4
bl MI_CpuCopy8
add r0, r5, #0xf0
- bl FUN_02095BE0
+ bl DWCi_BACKUPlConvMaskCidr
strb r0, [r4, #0xd0]
_02233BE0:
ldrb r0, [r5, #0xf6]
@@ -25340,7 +25340,7 @@ _02233CE8:
ldrb r0, [r4, #0xd0]
ldr r1, [r1]
add r1, r1, #0x4f0
- bl FUN_02095BB0
+ bl DWCi_BACKUPlConvMaskAddr
add sp, sp, #4
ldmia sp!, {r4, r5, pc}
.align 2, 0
@@ -25734,7 +25734,7 @@ MOD13_0223418C: ; 0x0223418C
bl MATHi_CRC16InitTableRev
ldr r0, _022341D0 ; =0x02243150
ldr r0, [r0]
- bl FUN_02095D68
+ bl DWCi_BACKUPlRead
add sp, sp, #4
ldmia sp!, {pc}
.align 2, 0
@@ -31696,7 +31696,7 @@ MOD13_0223923C: ; 0x0223923C
ldr r0, _0223932C ; =0x0000064C
ldr r1, [r1]
add r0, r1, r0
- bl FUN_02095D68
+ bl DWCi_BACKUPlRead
bl OS_GetTick
bl MOD13_022338FC
ldr r1, _02239328 ; =0x0224318C
diff --git a/arm9/modules/55/asm/module_55.s b/arm9/modules/55/asm/module_55.s
index 79cee761..3215db95 100644
--- a/arm9/modules/55/asm/module_55.s
+++ b/arm9/modules/55/asm/module_55.s
@@ -2086,7 +2086,7 @@ _021D85B2:
ldr r0, [sp, #4]
add r6, r1, #0
bl FUN_02028228
- bl FUN_02096D68
+ bl DWC_CreateFriendKey
eor r1, r6
eor r0, r7
orr r0, r1
@@ -3492,7 +3492,7 @@ MOD55_021D90D8: ; 0x021D90D8
ldrb r1, [r1, #0x18]
sub r1, r1, #1
bl FUN_0202838C
- bl FUN_02096E24
+ bl DWC_GetFriendKey
str r1, [sp, #4]
add r4, r0, #0
ldr r0, [sp, #4]
@@ -3557,7 +3557,7 @@ MOD55_021D9184: ; 0x021D9184
add r7, r1, #0
bl FUN_020286EC
bl FUN_02028228
- bl FUN_02096D68
+ bl DWC_CreateFriendKey
add r6, r0, #0
add r4, r1, #0
ldr r0, [r5, #4]
@@ -5538,7 +5538,7 @@ MOD55_021DA224: ; 0x021DA224
bl FUN_02028228
add r1, r4, #0
add r2, r6, #0
- bl FUN_020973B4
+ bl DWC_CheckFriendKey
cmp r0, #0
bne _021DA24C
mov r0, #0
@@ -5562,7 +5562,7 @@ _021DA262:
bl FUN_0202838C
add r1, r4, #0
add r2, r6, #0
- bl FUN_02096D2C
+ bl DWC_CreateFriendKeyToken
_021DA276:
mov r0, #0
pop {r3, r4, r5, r6, r7, pc}
diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s
index 183fe0d3..08de4669 100644
--- a/arm9/modules/56/asm/module_56.s
+++ b/arm9/modules/56/asm/module_56.s
@@ -1539,7 +1539,7 @@ _02212A9A:
bl MOD56_022128A4
ldr r0, [r5]
bl FUN_02028228
- bl FUN_02096F80
+ bl DWC_CheckHasProfile
cmp r0, #0
bne _02212AFA
mov r0, #0
@@ -1577,7 +1577,7 @@ _02212A9A:
_02212AFA:
ldr r0, [r5]
bl FUN_02028228
- bl FUN_02096F18
+ bl DWC_CheckValidConsole
cmp r0, #0
bne _02212B1A
add r0, r5, #0
diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s
index bf202f2f..12992a4e 100644
--- a/arm9/modules/80/asm/module_80.s
+++ b/arm9/modules/80/asm/module_80.s
@@ -18661,7 +18661,7 @@ _022369CC:
bl FUN_02023830
add r6, r0, #0
add r0, r4, #0
- bl FUN_02096D68
+ bl DWC_CreateFriendKey
add r3, r0, #0
add r2, r1, #0
add r0, r6, #0
diff --git a/arm9/modules/82/asm/module_82.s b/arm9/modules/82/asm/module_82.s
index 18e1984d..d96f335e 100644
--- a/arm9/modules/82/asm/module_82.s
+++ b/arm9/modules/82/asm/module_82.s
@@ -2282,7 +2282,7 @@ _0222E7C2:
add r4, r0, #0
ldr r0, [r5]
ldr r0, [r0, #0x14]
- bl FUN_02096D68
+ bl DWC_CreateFriendKey
add r3, r0, #0
add r2, r1, #0
add r0, r4, #0