summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lsf5
-rw-r--r--arm9/global.inc21
-rw-r--r--arm9/modules/04/asm/arm_04.s1727
-rw-r--r--arm9/modules/04/asm/mod04_021D74E0.s (renamed from arm9/modules/04/asm/thumb_04.s)850
-rw-r--r--arm9/modules/04/asm/mod04_021D868C.s845
-rw-r--r--arm9/modules/04/asm/mod04_021D8D18.s1233
-rw-r--r--arm9/modules/04/asm/mod04_021D9C2C.s549
7 files changed, 2660 insertions, 2570 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index e8f534d0..08253453 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -656,7 +656,10 @@ Overlay MODULE_03
Overlay MODULE_04
{
After arm9
- Object thumb_04.o
+ Object mod04_021D74E0.o
+ Object mod04_021D868C.o
+ Object mod04_021D8D18.o
+ Object mod04_021D9C2C.o
Object arm_04.o
}
diff --git a/arm9/global.inc b/arm9/global.inc
index 2cf762ee..09d6fe08 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -6109,13 +6109,27 @@
.extern MOD04_021D8CF0
.extern MOD04_021D8D04
.extern MOD04_021D8F08
+.extern MOD04_021D97F8
+.extern MOD04_021D988C
+.extern MOD04_021D98DC
+.extern MOD04_021D991C
+.extern MOD04_021D9974
+.extern MOD04_021D9ACC
+.extern MOD04_021D9C1C
.extern MOD04_021D9C2C
.extern MOD04_021D9F78
+.extern MOD04_021DA238
.extern MOD04_021DA2F4
.extern MOD04_021DA334
.extern MOD04_021DA388
.extern MOD04_021DA3DC
.extern MOD04_021DAB68
+.extern MOD04_021DAC98
+.extern MOD04_021DAE4C
+.extern MOD04_021DB440
+.extern MOD04_021DB4A4
+.extern MOD04_021DB570
+.extern MOD04_021DB608
.extern MOD04_021DCA84
.extern MOD04_021DD6F0
.extern MOD04_021DD718
@@ -6178,9 +6192,11 @@
.extern MOD04_021EB59C
.extern MOD04_021EB9A4
.extern MOD04_021EB9D8
+.extern MOD04_021EBAB8
.extern MOD04_021EBAE8
.extern MOD04_021EBB80
.extern MOD04_021EBC60
+.extern MOD04_021EE5F4
.extern MOD04_021EEFA8
.extern MOD04_021EEFFC
.extern MOD04_021EF06C
@@ -8251,6 +8267,11 @@
.extern TP_SetCalibrateParam
.extern TP_WaitBusy
.extern TP_WaitRawResult
+.extern UNK04_0220BEB4
+.extern UNK04_02210480
+.extern UNK04_02210484
+.extern UNK04_02210488
+.extern UNK04_0221048C
.extern UNK05_021F64C8
.extern UNK05_021F8B84
.extern UNK05_021F8B88
diff --git a/arm9/modules/04/asm/arm_04.s b/arm9/modules/04/asm/arm_04.s
index 259f9f52..bbdafb6a 100644
--- a/arm9/modules/04/asm/arm_04.s
+++ b/arm9/modules/04/asm/arm_04.s
@@ -3,1510 +3,6 @@
.section .text
.balign 4, 0
- arm_func_start MOD04_021D8D18
-MOD04_021D8D18: ; 0x021D8D18
- stmdb sp!, {r4, lr}
- ldr r2, _021D8D58 ; =UNK04_02210468
- ldr r1, _021D8D5C ; =0x000013D8
- ldr r2, [r2]
- mov r4, r0
- add r0, r2, r1
- bl OS_LockMutex
- ldr r2, _021D8D58 ; =UNK04_02210468
- ldr r1, _021D8D5C ; =0x000013D8
- ldr r0, [r2]
- add r0, r0, #0x1000
- str r4, [r0, #4]
- ldr r0, [r2]
- add r0, r0, r1
- bl OS_UnlockMutex
- ldmia sp!, {r4, pc}
- .align 2, 0
-_021D8D58: .word UNK04_02210468
-_021D8D5C: .word 0x000013D8
- arm_func_end MOD04_021D8D18
-
- arm_func_start MOD04_021D8D60
-MOD04_021D8D60: ; 0x021D8D60
- stmdb sp!, {r4, r5, r6, lr}
- sub sp, sp, #0x98
- ldr r4, _021D8EE0 ; =UNK04_0221046C
- mov r3, #0
- ldr r5, [r4, #4]
- ldr ip, [r4]
- cmp r5, r3
- mov r5, r0
- mov r6, r1
- mov r4, r2
- cmpeq ip, r3
- bne _021D8DC0
- ldr r0, _021D8EE4 ; =UNK04_0220BEF8
- bl strlen
- mov r3, r0
- ldr r1, _021D8EE8 ; =UNK04_0220BF04
- ldr r2, _021D8EE4 ; =UNK04_0220BEF8
- mov r0, r5
- bl MOD04_021DAB68
- cmp r0, #0
- beq _021D8E18
- add sp, sp, #0x98
- mov r0, #8
- ldmia sp!, {r4, r5, r6, pc}
-_021D8DC0:
- ldr r0, _021D8EEC ; =UNK04_0220BF0C
- bl strlen
- mov r3, r0
- ldr r1, _021D8EE8 ; =UNK04_0220BF04
- ldr r2, _021D8EEC ; =UNK04_0220BF0C
- mov r0, r5
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x98
- movne r0, #8
- ldmneia sp!, {r4, r5, r6, pc}
- mov r0, r6
- bl strlen
- mov r3, r0
- ldr r1, _021D8EF0 ; =UNK04_0220BF14
- mov r0, r5
- mov r2, r6
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x98
- movne r0, #8
- ldmneia sp!, {r4, r5, r6, pc}
-_021D8E18:
- ldr r1, _021D8EE0 ; =UNK04_0221046C
- add r0, sp, #0
- bl MOD04_021D9F78
- cmp r0, #0
- addeq sp, sp, #0x98
- moveq r0, #5
- ldmeqia sp!, {r4, r5, r6, pc}
- ldr r0, _021D8EF4 ; =UNK04_0221048C
- add r1, sp, #0
- ldr r2, [r0]
- mov r0, r5
- bl MOD04_021D9C2C
- cmp r0, #0
- addeq sp, sp, #0x98
- moveq r0, #8
- ldmeqia sp!, {r4, r5, r6, pc}
- ldr r0, _021D8EF8 ; =UNK04_02210460
- ldr r0, [r0]
- cmp r0, #1
- bne _021D8E94
- ldr r0, _021D8EFC ; =UNK04_0220BF1C
- bl strlen
- mov r3, r0
- ldr r1, _021D8F00 ; =UNK04_0220BF20
- ldr r2, _021D8EFC ; =UNK04_0220BF1C
- mov r0, r5
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x98
- movne r0, #8
- ldmneia sp!, {r4, r5, r6, pc}
-_021D8E94:
- mov r0, r4
- bl wcslen
- cmp r0, #0
- beq _021D8ED4
- mov r0, r4
- bl wcslen
- mov r3, r0
- ldr r1, _021D8F04 ; =UNK04_0220BF28
- mov r0, r5
- mov r2, r4
- mov r3, r3, lsl #1
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x98
- movne r0, #8
- ldmneia sp!, {r4, r5, r6, pc}
-_021D8ED4:
- mov r0, #0
- add sp, sp, #0x98
- ldmia sp!, {r4, r5, r6, pc}
- .align 2, 0
-_021D8EE0: .word UNK04_0221046C
-_021D8EE4: .word UNK04_0220BEF8
-_021D8EE8: .word UNK04_0220BF04
-_021D8EEC: .word UNK04_0220BF0C
-_021D8EF0: .word UNK04_0220BF14
-_021D8EF4: .word UNK04_0221048C
-_021D8EF8: .word UNK04_02210460
-_021D8EFC: .word UNK04_0220BF1C
-_021D8F00: .word UNK04_0220BF20
-_021D8F04: .word UNK04_0220BF28
- arm_func_end MOD04_021D8D60
-
- arm_func_start MOD04_021D8F08
-MOD04_021D8F08: ; 0x021D8F08
- stmdb sp!, {r4, r5, lr}
- sub sp, sp, #4
- ldr r0, _021D91BC ; =UNK04_02210468
- mov r1, #0
- ldr r0, [r0]
- str r1, [sp]
- add r0, r0, #0x1000
- ldr r0, [r0, #0x314]
- ldr r1, _021D91C0 ; =UNK04_0220BF34
- bl MOD04_021DA388
- str r0, [sp]
- cmp r0, #0
- beq _021D8F40
- bl MOD04_021DCA84
-_021D8F40:
- ldr r0, _021D91BC ; =UNK04_02210468
- mov r2, #0
- ldr r1, [r0]
- ldr r0, _021D91C4 ; =errno
- str r2, [sp]
- str r2, [r0]
- add r0, r1, #0x1000
- ldr r0, [r0, #0x314]
- ldr r1, _021D91C8 ; =UNK04_0220BF3C
- bl MOD04_021DA388
- bl atol
- ldr r1, _021D91C4 ; =errno
- ldr r1, [r1]
- cmp r1, #0x22
- bne _021D8F9C
- ldr r0, _021D91BC ; =UNK04_02210468
- ldr r2, _021D91CC ; =0x00004E85
- ldr r1, [r0]
- add sp, sp, #4
- add r1, r1, #0x1000
- str r2, [r1, #8]
- mov r0, #0xc
- ldmia sp!, {r4, r5, pc}
-_021D8F9C:
- cmp r0, #0xc8
- beq _021D8FC8
- ldr r2, _021D91BC ; =UNK04_02210468
- ldr r1, _021D91D0 ; =0x000059D8
- ldr r2, [r2]
- add r1, r0, r1
- add r0, r2, #0x1000
- str r1, [r0, #8]
- add sp, sp, #4
- mov r0, #0x12
- ldmia sp!, {r4, r5, pc}
-_021D8FC8:
- ldr r0, _021D91BC ; =UNK04_02210468
- ldr r2, _021D91D4 ; =0x0000100C
- ldr r3, [r0]
- ldr r1, _021D91D8 ; =UNK04_0220BF48
- add r0, r3, #0x1000
- ldr r0, [r0, #0x314]
- add r2, r3, r2
- mov r3, #4
- bl MOD04_021DA334
- cmp r0, #0
- bgt _021D9014
- ldr r0, _021D91BC ; =UNK04_02210468
- ldr r2, _021D91CC ; =0x00004E85
- ldr r1, [r0]
- add sp, sp, #4
- add r1, r1, #0x1000
- str r2, [r1, #8]
- mov r0, #0xe
- ldmia sp!, {r4, r5, pc}
-_021D9014:
- ldr r1, _021D91BC ; =UNK04_02210468
- ldr r0, _021D91D4 ; =0x0000100C
- ldr r2, [r1]
- add r1, sp, #0
- add r0, r2, r0
- mov r2, #0xa
- bl strtol
- ldr r2, _021D91BC ; =UNK04_02210468
- ldr r1, _021D91D4 ; =0x0000100C
- ldr r5, [r2]
- mov r4, r0
- add r0, r5, r1
- bl strlen
- ldr r1, _021D91D4 ; =0x0000100C
- ldr r2, [sp]
- add r1, r5, r1
- add r0, r1, r0
- cmp r2, r0
- ldrne r1, _021D91CC ; =0x00004E85
- addne r0, r5, #0x1000
- strne r1, [r0, #8]
- addne sp, sp, #4
- movne r0, #0xc
- ldmneia sp!, {r4, r5, pc}
- ldr r0, _021D91DC ; =0x00004E20
- add r1, r5, #0x1000
- add r0, r4, r0
- str r0, [r1, #8]
- cmp r4, #0x64
- bge _021D91B0
- ldr ip, _021D91BC ; =UNK04_02210468
- mov r0, #0
- ldr r1, [ip]
- ldr r5, _021D91E0 ; =0x00001052
- add r1, r1, #0x1000
- strb r0, [r1, #0x52]
- ldr r2, [ip]
- ldr r1, _021D91E4 ; =UNK04_0220BF54
- add r2, r2, #0x1000
- strb r0, [r2, #0x1f]
- ldr r2, [ip]
- ldr r3, _021D91E8 ; =0x0000012D
- add r2, r2, #0x1000
- strb r0, [r2, #0x17f]
- ldr r2, [ip]
- add r2, r2, #0x1000
- strb r0, [r2, #0x10]
- ldr r2, [ip]
- add r2, r2, #0x1000
- strb r0, [r2, #0x188]
- ldr r2, [ip]
- add r0, r2, #0x1000
- ldr r0, [r0, #0x314]
- add r2, r2, r5
- bl MOD04_021DA334
- ldr r0, _021D91BC ; =UNK04_02210468
- ldr r2, _021D91EC ; =0x0000101F
- ldr r3, [r0]
- ldr r1, _021D91F0 ; =UNK04_0220BF5C
- add r0, r3, #0x1000
- add r2, r3, r2
- ldr r0, [r0, #0x314]
- mov r3, #0x33
- bl MOD04_021DA334
- ldr r0, _021D91BC ; =UNK04_02210468
- ldr r2, _021D91F4 ; =0x0000117F
- ldr r3, [r0]
- ldr r1, _021D91F8 ; =UNK04_0220BF64
- add r0, r3, #0x1000
- add r2, r3, r2
- ldr r0, [r0, #0x314]
- mov r3, #9
- bl MOD04_021DA334
- ldr r0, _021D91BC ; =UNK04_02210468
- ldr r2, _021D91FC ; =0x00001010
- ldr r3, [r0]
- ldr r1, _021D9200 ; =UNK04_0220BF70
- add r0, r3, #0x1000
- add r2, r3, r2
- ldr r0, [r0, #0x314]
- mov r3, #0xf
- bl MOD04_021DA334
- ldr r0, _021D91BC ; =UNK04_02210468
- ldr r2, _021D9204 ; =0x00001188
- ldr r3, [r0]
- ldr r1, _021D9208 ; =UNK04_0220BF7C
- add r0, r3, #0x1000
- add r2, r3, r2
- ldr r0, [r0, #0x314]
- mov r3, #0x41
- bl MOD04_021DA2F4
- ldr r0, _021D91BC ; =UNK04_02210468
- mov r1, #0
- ldr r0, [r0]
- cmp r4, #0x28
- add r0, r0, #0x1000
- strb r1, [r0, #0x1b3]
- ldrne r0, _021D920C ; =UNK04_02210464
- movne r1, #1
- strne r1, [r0]
- ldreq r0, _021D920C ; =UNK04_02210464
- moveq r1, #2
- streq r1, [r0]
-_021D91B0:
- mov r0, #0
- add sp, sp, #4
- ldmia sp!, {r4, r5, pc}
- .align 2, 0
-_021D91BC: .word UNK04_02210468
-_021D91C0: .word UNK04_0220BF34
-_021D91C4: .word errno
-_021D91C8: .word UNK04_0220BF3C
-_021D91CC: .word 0x00004E85
-_021D91D0: .word 0x000059D8
-_021D91D4: .word 0x0000100C
-_021D91D8: .word UNK04_0220BF48
-_021D91DC: .word 0x00004E20
-_021D91E0: .word 0x00001052
-_021D91E4: .word UNK04_0220BF54
-_021D91E8: .word 0x0000012D
-_021D91EC: .word 0x0000101F
-_021D91F0: .word UNK04_0220BF5C
-_021D91F4: .word 0x0000117F
-_021D91F8: .word UNK04_0220BF64
-_021D91FC: .word 0x00001010
-_021D9200: .word UNK04_0220BF70
-_021D9204: .word 0x00001188
-_021D9208: .word UNK04_0220BF7C
-_021D920C: .word UNK04_02210464
- arm_func_end MOD04_021D8F08
-
- arm_func_start MOD04_021D9210
-MOD04_021D9210: ; 0x021D9210
- stmdb sp!, {r4, r5, lr}
- sub sp, sp, #4
- ldr r0, _021D93F4 ; =UNK04_02210468
- mov r1, #0
- ldr r0, [r0]
- add r2, r0, #0x1000
- ldr r0, [r2, #0x314]
- ldr r5, [r2, #0x20c]
- ldr r4, [r2, #0x210]
- bl MOD04_021DA3DC
- cmp r0, #1
- beq _021D9260
- ldr r0, _021D93F4 ; =UNK04_02210468
- ldr r2, _021D93F8 ; =0x00004E84
- ldr r1, [r0]
- add sp, sp, #4
- add r1, r1, #0x1000
- str r2, [r1, #8]
- mov r0, #0xe
- ldmia sp!, {r4, r5, pc}
-_021D9260:
- bl MOD04_021D8F08
- cmp r0, #0
- addne sp, sp, #4
- movne r0, #0xe
- ldmneia sp!, {r4, r5, pc}
- ldr r0, _021D93F4 ; =UNK04_02210468
- ldr r1, _021D93F8 ; =0x00004E84
- ldr r0, [r0]
- add r0, r0, #0x1000
- ldr r2, [r0, #8]
- cmp r2, r1
- bge _021D9334
- ldr r0, _021D93FC ; =0x00004E22
- cmp r2, r0
- bne _021D9328
- ldr r0, _021D9400 ; =UNK04_0220BF88
- ldr r1, _021D9404 ; =0x0000071F
- blx r5
- movs r5, r0
- bne _021D92D0
- ldr r0, _021D93F4 ; =UNK04_02210468
- ldr r2, _021D93F8 ; =0x00004E84
- ldr r1, [r0]
- add sp, sp, #4
- add r1, r1, #0x1000
- str r2, [r1, #8]
- mov r0, #2
- ldmia sp!, {r4, r5, pc}
-_021D92D0:
- add r1, r5, #0x1f
- ldr r0, _021D9408 ; =UNK04_0221046C
- bic r1, r1, #0x1f
- bl FUN_02096710
- cmp r0, #1
- beq _021D9318
- ldr r0, _021D940C ; =UNK04_0220BF98
- mov r1, r5
- mov r2, #0
- blx r4
- ldr r0, _021D93F4 ; =UNK04_02210468
- ldr r2, _021D93F8 ; =0x00004E84
- ldr r1, [r0]
- add sp, sp, #4
- add r1, r1, #0x1000
- str r2, [r1, #8]
- mov r0, #0xf
- ldmia sp!, {r4, r5, pc}
-_021D9318:
- ldr r0, _021D940C ; =UNK04_0220BF98
- mov r1, r5
- mov r2, #0
- blx r4
-_021D9328:
- add sp, sp, #4
- mov r0, #0x15
- ldmia sp!, {r4, r5, pc}
-_021D9334:
- ldr r0, _021D9410 ; =0x00004E88
- cmp r2, r0
- beq _021D9350
- ldr r0, _021D9414 ; =0x00004E8C
- cmp r2, r0
- beq _021D9378
- b _021D93E8
-_021D9350:
- ldr r0, _021D9408 ; =UNK04_0221046C
- bl FUN_02096570
- ldr r0, _021D93F4 ; =UNK04_02210468
- ldr r2, _021D9410 ; =0x00004E88
- ldr r1, [r0]
- add sp, sp, #4
- add r1, r1, #0x1000
- str r2, [r1, #8]
- mov r0, #0x10
- ldmia sp!, {r4, r5, pc}
-_021D9378:
- ldr r0, _021D9400 ; =UNK04_0220BF88
- mov r1, #0x700
- blx r5
- movs r5, r0
- bne _021D93AC
- ldr r0, _021D93F4 ; =UNK04_02210468
- ldr r2, _021D9414 ; =0x00004E8C
- ldr r1, [r0]
- add sp, sp, #4
- add r1, r1, #0x1000
- str r2, [r1, #8]
- mov r0, #0x11
- ldmia sp!, {r4, r5, pc}
-_021D93AC:
- add r0, r5, #0x1f
- bic r0, r0, #0x1f
- bl DWCi_AUTH_MakeWiFiID
- ldr r0, _021D940C ; =UNK04_0220BF98
- mov r1, r5
- mov r2, #0
- blx r4
- ldr r0, _021D93F4 ; =UNK04_02210468
- ldr r2, _021D9414 ; =0x00004E8C
- ldr r1, [r0]
- add sp, sp, #4
- add r1, r1, #0x1000
- str r2, [r1, #8]
- mov r0, #0x11
- ldmia sp!, {r4, r5, pc}
-_021D93E8:
- mov r0, #0x12
- add sp, sp, #4
- ldmia sp!, {r4, r5, pc}
- .align 2, 0
-_021D93F4: .word UNK04_02210468
-_021D93F8: .word 0x00004E84
-_021D93FC: .word 0x00004E22
-_021D9400: .word UNK04_0220BF88
-_021D9404: .word 0x0000071F
-_021D9408: .word UNK04_0221046C
-_021D940C: .word UNK04_0220BF98
-_021D9410: .word 0x00004E88
-_021D9414: .word 0x00004E8C
- arm_func_end MOD04_021D9210
-
- arm_func_start MOD04_021D9418
-MOD04_021D9418: ; 0x021D9418
- stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
- sub sp, sp, #0x14
- mov sb, #0
- mov r0, #1
- ldr r7, _021D96D4 ; =0x00001388
- ldr fp, _021D96D8 ; =0x000082EA
- ldr r5, _021D96DC ; =UNK04_02210468
- ldr r4, _021D96E0 ; =0x000013D8
- mov r6, sb
- str sb, [sp, #8]
- str sb, [sp, #0xc]
- str r0, [sp, #4]
-_021D9448:
- ldr r0, [r5]
- add r0, r0, #0x1000
- ldr r1, [r0, #0x314]
- add r0, r1, #0x1000
- ldr r0, [r0, #0xba0]
- cmp r0, #0
- beq _021D9470
- ldr r0, _021D96E4 ; =0x00001B34
- add r0, r1, r0
- bl OS_JoinThread
-_021D9470:
- ldr r0, [r5]
- add r1, r0, #0x1000
- ldr r0, [r1, #0x314]
- add r0, r0, #0x1000
- ldr r0, [r0, #0x20]
- cmp r0, #8
- beq _021D9518
- ldr r0, _021D96E8 ; =0x00004E84
- str r0, [r1, #8]
- ldr r0, [r5]
- add r0, r0, #0x1000
- ldr r0, [r0, #0x314]
- add r0, r0, #0x1000
- ldr r0, [r0, #0x20]
- cmp r0, #7
- bne _021D94C0
- mov r0, #0x14
- bl MOD04_021D8D18
- add sp, sp, #0x14
- ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
-_021D94C0:
- cmp sb, #2
- ble _021D9508
- cmp r0, #2
- bne _021D94E0
- mov r0, #9
- bl MOD04_021D8D18
- add sp, sp, #0x14
- ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
-_021D94E0:
- cmp r0, #3
- bne _021D94F8
- mov r0, #0xb
- bl MOD04_021D8D18
- add sp, sp, #0x14
- ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
-_021D94F8:
- mov r0, #0xd
- bl MOD04_021D8D18
- add sp, sp, #0x14
- ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
-_021D9508:
- ldr r0, [sp, #4]
- add sb, sb, #1
- str r0, [sp]
- b _021D9598
-_021D9518:
- bl MOD04_021D9210
- cmp r0, #0x10
- beq _021D9544
- cmp r0, #0x11
- beq _021D956C
- cmp r0, #0x15
- bne _021D9578
- mov r0, #0x15
- bl MOD04_021D8D18
- add sp, sp, #0x14
- ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
-_021D9544:
- cmp sb, #2
- ble _021D955C
- mov r0, #0x10
- bl MOD04_021D8D18
- add sp, sp, #0x14
- ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
-_021D955C:
- ldr r0, [sp, #8]
- add sb, sb, #1
- str r0, [sp]
- b _021D9598
-_021D956C:
- bl MOD04_021D8D18
- add sp, sp, #0x14
- ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
-_021D9578:
- cmp sb, #2
- blt _021D958C
- bl MOD04_021D8D18
- add sp, sp, #0x14
- ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
-_021D958C:
- ldr r0, [sp, #4]
- add sb, sb, #1
- str r0, [sp]
-_021D9598:
- bl OS_GetTick
- mov r8, r0
- mov sl, r1
- bl OS_GetTick
- subs r2, r0, r8
- sbc r0, r1, sl
- mov r1, r0, lsl #6
- ldr r3, [sp, #0xc]
- orr r1, r1, r2, lsr #26
- mov r0, r2, lsl #6
- mov r2, fp
- bl _ll_udiv
- cmp r1, #0
- cmpeq r0, r7
- bhs _021D965C
-_021D95D4:
- ldr r0, [r5]
- add r0, r0, r4
- bl OS_LockMutex
- ldr r2, [r5]
- add r1, r2, #0x1000
- ldr r0, [r1, #0x3f0]
- cmp r0, #1
- bne _021D961C
- ldr r2, _021D96E8 ; =0x00004E84
- ldr r0, _021D96E0 ; =0x000013D8
- str r2, [r1, #8]
- ldr r1, [r5]
- add r0, r1, r0
- bl OS_UnlockMutex
- mov r0, #0x14
- bl MOD04_021D8D18
- add sp, sp, #0x14
- ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
-_021D961C:
- add r0, r2, r4
- bl OS_UnlockMutex
- mov r0, r7
- bl OS_Sleep
- bl OS_GetTick
- subs r2, r0, r8
- sbc r0, r1, sl
- mov r1, r0, lsl #6
- orr r1, r1, r2, lsr #26
- mov r0, r2, lsl #6
- mov r2, fp
- mov r3, r6
- bl _ll_udiv
- cmp r1, #0
- cmpeq r0, r7
- blo _021D95D4
-_021D965C:
- ldr r0, [r5]
- add r0, r0, #0x1000
- ldr r0, [r0, #0x314]
- bl MOD04_021DAE4C
- ldr r0, [r5]
- add r0, r0, r4
- bl OS_LockMutex
- ldr r0, [sp]
- bl MOD04_021D96EC
- ldr r1, [r5]
- add r1, r1, #0x1000
- str r0, [r1, #4]
- ldr r2, [r5]
- add r1, r2, #0x1000
- ldr r0, [r1, #4]
- cmp r0, #0
- beq _021D96C0
- ldr r2, _021D96E8 ; =0x00004E84
- ldr r0, _021D96E0 ; =0x000013D8
- str r2, [r1, #8]
- ldr r1, [r5]
- add r0, r1, r0
- bl OS_UnlockMutex
- add sp, sp, #0x14
- ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
-_021D96C0:
- add r0, r2, r4
- bl OS_UnlockMutex
- b _021D9448
- arm_func_end MOD04_021D9418
-
- arm_func_start MOD04_021D96CC
-MOD04_021D96CC: ; 0x021D96CC
- add sp, sp, #0x14
- ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
- .align 2, 0
-_021D96D4: .word 0x00001388
-_021D96D8: .word 0x000082EA
-_021D96DC: .word UNK04_02210468
-_021D96E0: .word 0x000013D8
-_021D96E4: .word 0x00001B34
-_021D96E8: .word 0x00004E84
- arm_func_end MOD04_021D96CC
-
- arm_func_start MOD04_021D96EC
-MOD04_021D96EC: ; 0x021D96EC
- stmdb sp!, {r4, lr}
- ldr r1, _021D97E0 ; =UNK04_0220BEB4
- mov r4, r0
- ldr r0, [r1]
- ldr r1, _021D97E4 ; =UNK04_0220BFA4
- bl strcmp
- cmp r0, #0
- ldrne r0, _021D97E0 ; =UNK04_0220BEB4
- movne r1, #1
- strne r1, [r0, #0x14]
- ldr r0, _021D97E8 ; =UNK04_02210468
- ldr r1, _021D97E0 ; =UNK04_0220BEB4
- ldr r0, [r0]
- add r0, r0, #0x1000
- ldr r2, [r0, #0x20c]
- str r2, [r1, #0xc]
- ldr r2, [r0, #0x210]
- str r2, [r1, #0x10]
- ldr r0, [r0, #0x314]
- bl MOD04_021DB608
- cmp r0, #0
- movne r0, #4
- ldmneia sp!, {r4, pc}
- cmp r4, #1
- bne _021D9758
- ldr r0, _021D97EC ; =UNK04_0221046C
- bl DWCi_BM_GetWiFiInfo
-_021D9758:
- ldr r0, _021D97E8 ; =UNK04_02210468
- ldr r2, _021D97F0 ; =0x000011CC
- ldr r3, [r0]
- add r0, r3, #0x1000
- ldr r0, [r0, #0x314]
- add r1, r3, #0x1200
- add r2, r3, r2
- bl MOD04_021D8D60
- ldr r2, _021D97E8 ; =UNK04_02210468
- ldr r1, [r2]
- add r1, r1, #0x1000
- str r0, [r1, #4]
- ldr r0, [r2]
- add r0, r0, #0x1000
- ldr r1, [r0, #4]
- cmp r1, #0
- movne r0, #4
- ldmneia sp!, {r4, pc}
- ldr r0, [r0, #0x314]
- bl MOD04_021DB570
- cmp r0, #0
- movne r0, #4
- ldmneia sp!, {r4, pc}
- ldr r0, _021D97F4 ; =OSi_ThreadInfo
- ldr r0, [r0, #4]
- bl OS_GetThreadPriority
- ldr r1, _021D97E8 ; =UNK04_02210468
- ldr r2, [r1]
- sub r1, r0, #1
- add r0, r2, #0x1000
- ldr r0, [r0, #0x314]
- bl MOD04_021DB4A4
- mov r0, #0
- ldmia sp!, {r4, pc}
- .align 2, 0
-_021D97E0: .word UNK04_0220BEB4
-_021D97E4: .word UNK04_0220BFA4
-_021D97E8: .word UNK04_02210468
-_021D97EC: .word UNK04_0221046C
-_021D97F0: .word 0x000011CC
-_021D97F4: .word OSi_ThreadInfo
- arm_func_end MOD04_021D96EC
-
- arm_func_start MOD04_021D97F8
-MOD04_021D97F8: ; 0x021D97F8
- stmdb sp!, {r4, lr}
- ldr r1, _021D9874 ; =UNK04_02210468
- mov r4, r0
- ldr r1, [r1]
- cmp r1, #0
- bne _021D981C
- mov r1, #0
- mov r2, #0x1c4
- bl MI_CpuFill8
-_021D981C:
- ldr r1, _021D9874 ; =UNK04_02210468
- ldr r0, _021D9878 ; =0x00001008
- ldr r2, [r1]
- mov r1, r4
- add r0, r2, r0
- mov r2, #0x1c4
- bl MI_CpuCopy8
- ldr r1, [r4]
- ldr r0, _021D987C ; =0x00004E20
- cmp r1, r0
- blt _021D9854
- ldr r0, _021D9880 ; =0x00007530
- cmp r1, r0
- blt _021D985C
-_021D9854:
- ldr r0, _021D9884 ; =0x00005206
- str r0, [r4]
-_021D985C:
- ldr r1, [r4]
- ldr r0, _021D9888 ; =0x00004E84
- cmp r1, r0
- rsbge r0, r1, #0
- strge r0, [r4]
- ldmia sp!, {r4, pc}
- .align 2, 0
-_021D9874: .word UNK04_02210468
-_021D9878: .word 0x00001008
-_021D987C: .word 0x00004E20
-_021D9880: .word 0x00007530
-_021D9884: .word 0x00005206
-_021D9888: .word 0x00004E84
- arm_func_end MOD04_021D97F8
-
- arm_func_start MOD04_021D988C
-MOD04_021D988C: ; 0x021D988C
- stmdb sp!, {r4, lr}
- ldr r0, _021D98D4 ; =UNK04_02210468
- ldr r1, [r0]
- cmp r1, #0
- moveq r0, #0x16
- ldmeqia sp!, {r4, pc}
- ldr r0, _021D98D8 ; =0x000013D8
- add r0, r1, r0
- bl OS_LockMutex
- ldr r1, _021D98D4 ; =UNK04_02210468
- ldr r0, _021D98D8 ; =0x000013D8
- ldr r2, [r1]
- add r1, r2, #0x1000
- add r0, r2, r0
- ldr r4, [r1, #4]
- bl OS_UnlockMutex
- mov r0, r4
- ldmia sp!, {r4, pc}
- .align 2, 0
-_021D98D4: .word UNK04_02210468
-_021D98D8: .word 0x000013D8
- arm_func_end MOD04_021D988C
-
- arm_func_start MOD04_021D98DC
-MOD04_021D98DC: ; 0x021D98DC
- stmdb sp!, {lr}
- sub sp, sp, #4
- ldr r0, _021D9914 ; =UNK04_02210468
- ldr r1, [r0]
- add r0, r1, #0x1000
- ldr r0, [r0, #0x384]
- cmp r0, #0
- addeq sp, sp, #4
- ldmeqia sp!, {pc}
- ldr r0, _021D9918 ; =0x00001318
- add r0, r1, r0
- bl OS_JoinThread
- add sp, sp, #4
- ldmfd sp!, {pc}
- .align 2, 0
-_021D9914: .word UNK04_02210468
-_021D9918: .word 0x00001318
- arm_func_end MOD04_021D98DC
-
- arm_func_start MOD04_021D991C
-MOD04_021D991C: ; 0x021D991C
- stmdb sp!, {r4, lr}
- ldr r0, _021D996C ; =UNK04_02210468
- ldr r0, [r0]
- cmp r0, #0
- ldmeqia sp!, {r4, pc}
- add r1, r0, #0x1000
- ldr r0, [r1, #0x314]
- ldr r4, [r1, #0x210]
- cmp r0, #0
- beq _021D9948
- bl MOD04_021DAE4C
-_021D9948:
- ldr r1, _021D996C ; =UNK04_02210468
- ldr r0, _021D9970 ; =UNK04_0220BFC4
- ldr r1, [r1]
- mov r2, #0
- blx r4
- ldr r0, _021D996C ; =UNK04_02210468
- mov r1, #0
- str r1, [r0]
- ldmia sp!, {r4, pc}
- .align 2, 0
-_021D996C: .word UNK04_02210468
-_021D9970: .word UNK04_0220BFC4
- arm_func_end MOD04_021D991C
-
- arm_func_start MOD04_021D9974
-MOD04_021D9974: ; 0x021D9974
- stmdb sp!, {lr}
- sub sp, sp, #4
- ldr r0, _021D9A0C ; =UNK04_02210468
- ldr r1, [r0]
- cmp r1, #0
- addeq sp, sp, #4
- ldmeqia sp!, {pc}
- ldr r0, _021D9A10 ; =0x000013D8
- add r0, r1, r0
- bl OS_LockMutex
- ldr r2, _021D9A0C ; =UNK04_02210468
- mov r3, #1
- ldr r0, [r2]
- ldr r1, _021D9A10 ; =0x000013D8
- add r0, r0, #0x1000
- str r3, [r0, #0x3f0]
- ldr r0, [r2]
- add r0, r0, r1
- bl OS_UnlockMutex
- ldr r0, _021D9A0C ; =UNK04_02210468
- ldr r0, [r0]
- add r0, r0, #0x1000
- ldr r0, [r0, #0x314]
- cmp r0, #0
- beq _021D99DC
- bl MOD04_021DB440
-_021D99DC:
- ldr r0, _021D9A0C ; =UNK04_02210468
- ldr r1, [r0]
- add r0, r1, #0x1000
- ldr r0, [r0, #0x384]
- cmp r0, #0
- addeq sp, sp, #4
- ldmeqia sp!, {pc}
- ldr r0, _021D9A14 ; =0x00001318
- add r0, r1, r0
- bl OS_JoinThread
- add sp, sp, #4
- ldmfd sp!, {pc}
- .align 2, 0
-_021D9A0C: .word UNK04_02210468
-_021D9A10: .word 0x000013D8
-_021D9A14: .word 0x00001318
- arm_func_end MOD04_021D9974
-
- arm_func_start MOD04_021D9A18
-MOD04_021D9A18: ; 0x021D9A18
- stmdb sp!, {lr}
- sub sp, sp, #0xc
- ldr r1, _021D9ABC ; =UNK04_02210468
- ldr r0, _021D9AC0 ; =0x000013D8
- ldr r1, [r1]
- add r0, r1, r0
- bl OS_InitMutex
- ldr r1, _021D9ABC ; =UNK04_02210468
- mov r2, #0
- ldr r0, [r1]
- add r0, r0, #0x1000
- str r2, [r0, #0x3f0]
- ldr r1, [r1]
- add r0, r1, #0x1000
- ldr r0, [r0, #0x384]
- cmp r0, #0
- beq _021D9A74
- ldr r0, _021D9AC4 ; =0x00001318
- add r0, r1, r0
- bl OS_IsThreadTerminated
- cmp r0, #0
- addeq sp, sp, #0xc
- ldmeqia sp!, {pc}
-_021D9A74:
- ldr r2, _021D9ABC ; =UNK04_02210468
- ldr r0, _021D9AC4 ; =0x00001318
- ldr lr, [r2]
- mov r3, #0x1000
- ldr r1, _021D9AC8 ; =MOD04_021D9418
- str r3, [sp]
- mov ip, #0x10
- add r0, lr, r0
- add r3, lr, #0x1000
- str ip, [sp, #4]
- bl OS_CreateThread
- ldr r1, _021D9ABC ; =UNK04_02210468
- ldr r0, _021D9AC4 ; =0x00001318
- ldr r1, [r1]
- add r0, r1, r0
- bl OS_WakeupThreadDirect
- add sp, sp, #0xc
- ldmfd sp!, {pc}
- .align 2, 0
-_021D9ABC: .word UNK04_02210468
-_021D9AC0: .word 0x000013D8
-_021D9AC4: .word 0x00001318
-_021D9AC8: .word MOD04_021D9418
- arm_func_end MOD04_021D9A18
-
- arm_func_start MOD04_021D9ACC
-MOD04_021D9ACC: ; 0x021D9ACC
- stmdb sp!, {r4, r5, lr}
- sub sp, sp, #4
- ldr r2, _021D9BFC ; =UNK04_02210468
- mov r5, r0
- ldr r0, [r2]
- mov r4, r1
- cmp r0, #0
- addne sp, sp, #4
- ldr r2, [r5, #0x40]
- movne r0, #2
- ldmneia sp!, {r4, r5, pc}
- ldr r0, _021D9C00 ; =UNK04_0220BFD4
- ldr r1, _021D9C04 ; =0x000013F4
- blx r2
- ldr r1, _021D9BFC ; =UNK04_02210468
- cmp r0, #0
- str r0, [r1]
- addeq sp, sp, #4
- moveq r0, #2
- ldmeqia sp!, {r4, r5, pc}
- ldr r2, _021D9C04 ; =0x000013F4
- mov r1, #0
- bl MI_CpuFill8
- ldr r1, _021D9BFC ; =UNK04_02210468
- ldr r2, _021D9C08 ; =0x00001008
- ldr r0, [r1]
- ldr r3, _021D9C0C ; =UNK04_02210464
- add r0, r0, #0x1000
- str r4, [r0, #0x314]
- ldr r0, [r1]
- mov r1, #0
- add r0, r0, r2
- mov r2, #0x1c4
- str r1, [r3]
- bl MI_CpuFill8
- ldr r2, _021D9BFC ; =UNK04_02210468
- ldr r3, _021D9C10 ; =0x00004E84
- ldr r0, [r2]
- ldr r1, _021D9C14 ; =0x000011CC
- add r0, r0, #0x1000
- str r3, [r0, #8]
- ldr lr, [r2]
- mov r4, #4
- add ip, lr, r1
-_021D9B7C:
- ldmia r5!, {r0, r1, r2, r3}
- stmia ip!, {r0, r1, r2, r3}
- subs r4, r4, #1
- bne _021D9B7C
- ldmia r5, {r0, r1}
- stmia ip, {r0, r1}
- add r0, lr, #0x1100
- mov r2, #0
- strh r2, [r0, #0xfe]
- ldr r1, _021D9BFC ; =UNK04_02210468
- mov r0, #1
- ldr r1, [r1]
- add r1, r1, #0x1000
- strb r2, [r1, #0x20b]
- bl MOD04_021D96EC
- ldr r2, _021D9BFC ; =UNK04_02210468
- ldr r1, [r2]
- add r1, r1, #0x1000
- str r0, [r1, #4]
- ldr r0, [r2]
- add r0, r0, #0x1000
- ldr r0, [r0, #4]
- cmp r0, #0
- addne sp, sp, #4
- ldmneia sp!, {r4, r5, pc}
- ldr r0, _021D9C18 ; =UNK04_02210460
- mov r1, #0
- str r1, [r0]
- bl MOD04_021D9A18
- mov r0, #0
- add sp, sp, #4
- ldmia sp!, {r4, r5, pc}
- .align 2, 0
-_021D9BFC: .word UNK04_02210468
-_021D9C00: .word UNK04_0220BFD4
-_021D9C04: .word 0x000013F4
-_021D9C08: .word 0x00001008
-_021D9C0C: .word UNK04_02210464
-_021D9C10: .word 0x00004E84
-_021D9C14: .word 0x000011CC
-_021D9C18: .word UNK04_02210460
- arm_func_end MOD04_021D9ACC
-
- arm_func_start MOD04_021D9C1C
-MOD04_021D9C1C: ; 0x021D9C1C
- ldr r1, _021D9C28 ; =UNK04_0220BEB4
- str r0, [r1]
- bx lr
- .align 2, 0
-_021D9C28: .word UNK04_0220BEB4
- arm_func_end MOD04_021D9C1C
-
- arm_func_start MOD04_021D9C2C
-MOD04_021D9C2C: ; 0x021D9C2C
- stmdb sp!, {r4, r5, r6, lr}
- sub sp, sp, #0x28
- mov r4, r2
- mov r6, r0
- mov r5, r1
- mov ip, #2
- ldr r2, _021D9F30 ; =UNK04_0220BFE4
- add r0, sp, #4
- mov r1, #0x21
- mov r3, #1
- str ip, [sp]
- bl OS_SNPrintf
- add r0, sp, #4
- bl strlen
- mov r3, r0
- ldr r1, _021D9F34 ; =UNK04_0220BFF0
- mov r0, r6
- add r2, sp, #4
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
- mov r0, r5
- bl strlen
- mov r3, r0
- ldr r1, _021D9F38 ; =UNK04_0220BFF8
- mov r0, r6
- mov r2, r5
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
- add r0, r5, #0xe
- bl strlen
- mov r3, r0
- ldr r1, _021D9F3C ; =UNK04_0220C000
- mov r0, r6
- add r2, r5, #0xe
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
- add r0, r5, #0x41
- bl strlen
- mov r3, r0
- ldr r1, _021D9F40 ; =UNK04_0220C008
- mov r0, r6
- add r2, r5, #0x41
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
- add r0, r5, #0x6f
- bl strlen
- mov r3, r0
- ldr r1, _021D9F44 ; =UNK04_0220C010
- mov r0, r6
- add r2, r5, #0x6f
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
- add r0, r5, #0x15
- bl strlen
- mov r3, r0
- ldr r1, _021D9F48 ; =UNK04_0220C018
- mov r0, r6
- add r2, r5, #0x15
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
- add r0, r5, #0x1a
- bl strlen
- mov r3, r0
- ldr r1, _021D9F4C ; =UNK04_0220C020
- mov r0, r6
- add r2, r5, #0x1a
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
- add r0, r5, #0x1d
- bl strlen
- mov r3, r0
- ldr r1, _021D9F50 ; =UNK04_0220C028
- mov r0, r6
- add r2, r5, #0x1d
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
- add r0, r5, #0x1f
- bl strlen
- mov r3, r0
- ldr r1, _021D9F54 ; =UNK04_0220C030
- mov r0, r6
- add r2, r5, #0x1f
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
- add r0, r5, #0x2c
- bl strlen
- mov r3, r0
- ldr r1, _021D9F58 ; =UNK04_0220C038
- mov r0, r6
- add r2, r5, #0x2c
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
- add r0, r5, #0x2f
- bl strlen
- mov r3, r0
- ldr r1, _021D9F5C ; =UNK04_0220C040
- mov r0, r6
- add r2, r5, #0x2f
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
- add r0, r5, #0x34
- bl strlen
- mov r3, r0
- ldr r1, _021D9F60 ; =UNK04_0220C048
- mov r0, r6
- add r2, r5, #0x34
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
- add r0, r5, #0x7e
- bl wcslen
- mov r3, r0
- ldr r1, _021D9F64 ; =UNK04_0220C050
- mov r0, r6
- add r2, r5, #0x7e
- mov r3, r3, lsl #1
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
- cmp r4, #1
- bne _021D9ED0
- add r0, r5, #0x4e
- bl strlen
- mov r3, r0
- ldr r1, _021D9F68 ; =UNK04_0220C058
- mov r0, r6
- add r2, r5, #0x4e
- bl MOD04_021DAB68
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
-_021D9ED0:
- ldr r2, _021D9F6C ; =UNK04_0220C060
- mov ip, #2
- add r0, sp, #4
- mov r1, #0x21
- mov r3, #1
- str ip, [sp]
- bl OS_SNPrintf
- ldr r1, _021D9F70 ; =UNK04_0220C078
- add r2, sp, #4
- mov r0, r6
- bl MOD04_021DAC98
- cmp r0, #0
- addne sp, sp, #0x28
- movne r0, #0
- ldmneia sp!, {r4, r5, r6, pc}
- ldr r1, _021D9F74 ; =UNK04_0220C084
- mov r0, r6
- add r2, r5, #0x15
- bl MOD04_021DAC98
- cmp r0, #0
- moveq r0, #1
- movne r0, #0
- add sp, sp, #0x28
- ldmia sp!, {r4, r5, r6, pc}
- .align 2, 0
-_021D9F30: .word UNK04_0220BFE4
-_021D9F34: .word UNK04_0220BFF0
-_021D9F38: .word UNK04_0220BFF8
-_021D9F3C: .word UNK04_0220C000
-_021D9F40: .word UNK04_0220C008
-_021D9F44: .word UNK04_0220C010
-_021D9F48: .word UNK04_0220C018
-_021D9F4C: .word UNK04_0220C020
-_021D9F50: .word UNK04_0220C028
-_021D9F54: .word UNK04_0220C030
-_021D9F58: .word UNK04_0220C038
-_021D9F5C: .word UNK04_0220C040
-_021D9F60: .word UNK04_0220C048
-_021D9F64: .word UNK04_0220C050
-_021D9F68: .word UNK04_0220C058
-_021D9F6C: .word UNK04_0220C060
-_021D9F70: .word UNK04_0220C078
-_021D9F74: .word UNK04_0220C084
- arm_func_end MOD04_021D9C2C
-
- arm_func_start MOD04_021D9F78
-MOD04_021D9F78: ; 0x021D9F78
- stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
- sub sp, sp, #0x8c
- mov r6, r1
- mov r1, #0
- mov r2, #0x94
- mov r4, r0
- bl MI_CpuFill8
- ldr r3, [r6]
- ldr r5, [r6, #4]
- mov r0, #0
- cmp r5, r0
- cmpeq r3, r0
- beq _021D9FC4
- ldr r2, _021DA218 ; =UNK04_0220C094
- mov r0, r4
- mov r1, #0xe
- str r5, [sp]
- bl OS_SNPrintf
- b _021D9FE0
-_021D9FC4:
- ldr r3, [r6, #8]
- ldr r5, [r6, #0xc]
- ldr r2, _021DA218 ; =UNK04_0220C094
- mov r0, r4
- mov r1, #0xe
- str r5, [sp]
- bl OS_SNPrintf
-_021D9FE0:
- ldrh r3, [r6, #0x10]
- ldr r2, _021DA21C ; =UNK04_0220C09C
- add r0, r4, #0xe
- mov r1, #7
- bl OS_SNPrintf
- ldr r0, _021DA220 ; =0x027FFE0C
- ldrb r0, [r0]
- cmp r0, #0
- bne _021DA008
- bl OS_Terminate
-_021DA008:
- ldr r0, _021DA220 ; =0x027FFE0C
- add r1, r4, #0x15
- mov r2, #4
- bl MI_CpuCopy8
- ldr r0, _021DA224 ; =0x027FFE10
- ldrb r0, [r0]
- cmp r0, #0
- bne _021DA02C
- bl OS_Terminate
-_021DA02C:
- ldr r0, _021DA224 ; =0x027FFE10
- add r1, r4, #0x1a
- mov r2, #2
- bl MI_CpuCopy8
- mov r1, #0x30
- add r0, sp, #0x16
- strb r1, [r4, #0x1d]
- bl OS_GetMacAddress
- ldr r5, _021DA228 ; =UNK04_0220C0A4
- add r7, sp, #0x16
- add r6, r4, #0x1f
- mov r8, #0
-_021DA05C:
- ldrb r2, [r7]
- mov r0, r6
- mov r1, r5
- bl OS_SPrintf
- add r8, r8, #1
- cmp r8, #6
- add r7, r7, #1
- add r6, r6, #2
- blt _021DA05C
- add r0, sp, #0x38
- bl OS_GetOwnerInfo
- ldrb r0, [sp, #0x38]
- ldr r2, _021DA228 ; =UNK04_0220C0A4
- mov r1, #3
- cmp r0, #6
- movhi r0, #1
- strhib r0, [sp, #0x38]
- ldrb r3, [sp, #0x38]
- add r0, r4, #0x2c
- bl OS_SNPrintf
- add r0, sp, #0x3c
- add r1, r4, #0x7e
- mov r2, #0x14
- bl MI_CpuCopy8
- ldrb r1, [sp, #0x3b]
- ldr r2, _021DA22C ; =UNK04_0220C0AC
- add r0, r4, #0x2f
- str r1, [sp]
- ldrb r3, [sp, #0x3a]
- mov r1, #5
- bl OS_SNPrintf
- add r0, sp, #0x1c
- bl RTC_GetDate
- cmp r0, #0
- bne _021DA0F8
- add r0, sp, #0x2c
- bl RTC_GetTime
- cmp r0, #0
- beq _021DA104
-_021DA0F8:
- add sp, sp, #0x8c
- mov r0, #0
- ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
-_021DA104:
- ldr r0, [sp, #0x20]
- ldr r2, _021DA230 ; =UNK04_0220C0B8
- str r0, [sp]
- ldr r1, [sp, #0x24]
- add r0, r4, #0x34
- str r1, [sp, #4]
- ldr r3, [sp, #0x2c]
- mov r1, #0xd
- str r3, [sp, #8]
- ldr r3, [sp, #0x30]
- str r3, [sp, #0xc]
- ldr r3, [sp, #0x34]
- str r3, [sp, #0x10]
- ldr r3, [sp, #0x1c]
- bl OS_SNPrintf
- bl OS_DisableInterrupts
- mov sb, r0
- bl WCM_GetApMacAddress
- mov r8, r0
- mov r1, #6
- bl DC_InvalidateRange
- cmp r8, #0
- bne _021DA174
- mov r0, sb
- bl OS_RestoreInterrupts
- add sp, sp, #0x8c
- mov r0, #0
- ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
-_021DA174:
- add r7, r4, #0x41
- mov r6, #0
- ldr r5, _021DA228 ; =UNK04_0220C0A4
-_021DA180:
- ldrb r2, [r8, r6]
- mov r0, r7
- mov r1, r5
- bl OS_SPrintf
- add r6, r6, #1
- cmp r6, #6
- add r7, r7, #2
- blt _021DA180
- bl MOD04_021EBAB8
- mov r3, r0
- ldr r2, _021DA234 ; =UNK04_0220C0D4
- add r0, r4, #0x6f
- mov r1, #0xe
- bl OS_SNPrintf
- add r0, sp, #0x14
- bl WCM_GetApEssid
- mov r5, r0
- mov r1, #0x20
- bl DC_InvalidateRange
- cmp r5, #0
- bne _021DA1E8
- mov r0, sb
- bl OS_RestoreInterrupts
- add sp, sp, #0x8c
- mov r0, #0
- ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
-_021DA1E8:
- mov r0, r5
- add r1, r4, #0x72
- bl MOD04_021EE5F4
- mov r0, r5
- add r1, r4, #0x4e
- mov r2, #0x20
- bl MI_CpuCopy8
- mov r0, sb
- bl OS_RestoreInterrupts
- mov r0, #1
- add sp, sp, #0x8c
- ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
- .align 2, 0
-_021DA218: .word UNK04_0220C094
-_021DA21C: .word UNK04_0220C09C
-_021DA220: .word 0x027FFE0C
-_021DA224: .word 0x027FFE10
-_021DA228: .word UNK04_0220C0A4
-_021DA22C: .word UNK04_0220C0AC
-_021DA230: .word UNK04_0220C0B8
-_021DA234: .word UNK04_0220C0D4
- arm_func_end MOD04_021D9F78
-
- arm_func_start MOD04_021DA238
-MOD04_021DA238: ; 0x021DA238
- stmdb sp!, {r4, lr}
- sub sp, sp, #0x18
- mov r4, r0
- add r0, sp, #0
- bl DWCi_BM_GetWiFiInfo
- add r1, sp, #0
- mov r0, r4
- bl MOD04_021D9F78
- add sp, sp, #0x18
- ldmia sp!, {r4, pc}
- arm_func_end MOD04_021DA238
-
arm_func_start MOD04_021DA260
MOD04_021DA260: ; 0x021DA260
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
@@ -60168,197 +58664,6 @@ UNK04_0220BE70: ; 0x0220BE70
.byte 0x0A, 0x00, 0x00, 0x00
.section .data
- .global UNK_0220BEB4
-UNK04_0220BEB4: ; 0x0220BEB4
- .word UNK04_0220BED0
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x4E, 0x00, 0x00
-
- .global UNK04_0220BED0
-UNK04_0220BED0: ; 0x0220BED0
- .asciz "https://nas.test.nintendowifi.net/ac"
-
- .balign 4, 0
- .global UNK_0220BEF8
-UNK04_0220BEF8: ; 0x0220BEF8
- .byte 0x61, 0x63, 0x63, 0x74, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x00, 0x00
-
- .global UNK_0220BF04
-UNK04_0220BF04: ; 0x0220BF04
- .byte 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x00
-
- .global UNK_0220BF0C
-UNK04_0220BF0C: ; 0x0220BF0C
- .byte 0x6C, 0x6F, 0x67, 0x69, 0x6E, 0x00, 0x00, 0x00
-
- .global UNK_0220BF14
-UNK04_0220BF14: ; 0x0220BF14
- .byte 0x67, 0x73, 0x62, 0x72, 0x63, 0x64, 0x00, 0x00
-
- .global UNK_0220BF1C
-UNK04_0220BF1C: ; 0x0220BF1C
- .asciz "Y"
-
- .balign 4, 0
- .global UNK_0220BF20
-UNK04_0220BF20: ; 0x0220BF20
- .byte 0x69, 0x73, 0x77, 0x66, 0x63, 0x00, 0x00, 0x00
-
- .global UNK_0220BF28
-UNK04_0220BF28: ; 0x0220BF28
- .byte 0x69, 0x6E, 0x67, 0x61, 0x6D, 0x65, 0x73, 0x6E, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0220BF34
-UNK04_0220BF34: ; 0x0220BF34
- .byte 0x44, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0220BF3C
-UNK04_0220BF3C: ; 0x0220BF3C
- .byte 0x68, 0x74, 0x74, 0x70, 0x72, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x00, 0x00
-
- .global UNK_0220BF48
-UNK04_0220BF48: ; 0x0220BF48
- .byte 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x63, 0x64, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0220BF54
-UNK04_0220BF54: ; 0x0220BF54
- .byte 0x74, 0x6F, 0x6B, 0x65, 0x6E, 0x00, 0x00, 0x00
-
- .global UNK_0220BF5C
-UNK04_0220BF5C: ; 0x0220BF5C
- .byte 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x6F, 0x72, 0x00
-
- .global UNK_0220BF64
-UNK04_0220BF64: ; 0x0220BF64
- .byte 0x63, 0x68, 0x61, 0x6C, 0x6C, 0x65, 0x6E, 0x67, 0x65, 0x00, 0x00, 0x00
-
- .global UNK_0220BF70
-UNK04_0220BF70: ; 0x0220BF70
- .byte 0x64, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6D, 0x65, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0220BF7C
-UNK04_0220BF7C: ; 0x0220BF7C
- .byte 0x53, 0x65, 0x74, 0x2D, 0x43, 0x6F, 0x6F, 0x6B, 0x69, 0x65, 0x00, 0x00
-
- .global UNK_0220BF88
-UNK04_0220BF88: ; 0x0220BF88
- .byte 0x41, 0x4C, 0x4C, 0x4F, 0x43, 0x20, 0x62, 0x6D, 0x77, 0x6F, 0x72, 0x6B, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0220BF98
-UNK04_0220BF98: ; 0x0220BF98
- .byte 0x46, 0x52, 0x45, 0x45, 0x20, 0x62, 0x6D, 0x77, 0x6F, 0x72, 0x6B, 0x00
-
- .balign 4, 0
- .global UNK_0220BFA4
-UNK04_0220BFA4: ; 0x0220BFA4
- .asciz "https://nas.nintendowifi.net/ac"
-
- .balign 4, 0
- .global UNK_0220BFC4
-UNK04_0220BFC4: ; 0x0220BFC4
- .byte 0x46, 0x52, 0x45, 0x45, 0x20, 0x44, 0x57, 0x43, 0x61, 0x75, 0x74, 0x68, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0220BFD4
-UNK04_0220BFD4: ; 0x0220BFD4
- .byte 0x41, 0x4C, 0x4C, 0x4F, 0x43, 0x20, 0x44, 0x57, 0x43, 0x61, 0x75, 0x74, 0x68, 0x00, 0x00, 0x00
-
- .global UNK_0220BFE4
-UNK04_0220BFE4: ; 0x0220BFE4
- .byte 0x25, 0x30, 0x33, 0x64, 0x25, 0x30, 0x33, 0x64, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0220BFF0
-UNK04_0220BFF0: ; 0x0220BFF0
- .byte 0x73, 0x64, 0x6B, 0x76, 0x65, 0x72, 0x00, 0x00
-
- .global UNK_0220BFF8
-UNK04_0220BFF8: ; 0x0220BFF8
- .byte 0x75, 0x73, 0x65, 0x72, 0x69, 0x64, 0x00, 0x00
-
- .global UNK_0220C000
-UNK04_0220C000: ; 0x0220C000
- .byte 0x70, 0x61, 0x73, 0x73, 0x77, 0x64, 0x00, 0x00
-
- .global UNK_0220C008
-UNK04_0220C008: ; 0x0220C008
- .byte 0x62, 0x73, 0x73, 0x69, 0x64, 0x00, 0x00, 0x00
-
- .global UNK_0220C010
-UNK04_0220C010: ; 0x0220C010
- .byte 0x61, 0x70, 0x69, 0x6E, 0x66, 0x6F, 0x00, 0x00
-
- .global UNK_0220C018
-UNK04_0220C018: ; 0x0220C018
- .byte 0x67, 0x61, 0x6D, 0x65, 0x63, 0x64, 0x00, 0x00
-
- .global UNK_0220C020
-UNK04_0220C020: ; 0x0220C020
- .byte 0x6D, 0x61, 0x6B, 0x65, 0x72, 0x63, 0x64, 0x00
-
- .global UNK_0220C028
-UNK04_0220C028: ; 0x0220C028
- .byte 0x75, 0x6E, 0x69, 0x74, 0x63, 0x64, 0x00, 0x00
-
- .global UNK_0220C030
-UNK04_0220C030: ; 0x0220C030
- .byte 0x6D, 0x61, 0x63, 0x61, 0x64, 0x72, 0x00, 0x00
-
- .global UNK_0220C038
-UNK04_0220C038: ; 0x0220C038
- .byte 0x6C, 0x61, 0x6E, 0x67, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0220C040
-UNK04_0220C040: ; 0x0220C040
- .byte 0x62, 0x69, 0x72, 0x74, 0x68, 0x00, 0x00, 0x00
-
- .global UNK_0220C048
-UNK04_0220C048: ; 0x0220C048
- .byte 0x64, 0x65, 0x76, 0x74, 0x69, 0x6D, 0x65, 0x00
-
- .global UNK_0220C050
-UNK04_0220C050: ; 0x0220C050
- .byte 0x64, 0x65, 0x76, 0x6E, 0x61, 0x6D, 0x65, 0x00
-
- .global UNK_0220C058
-UNK04_0220C058: ; 0x0220C058
- .byte 0x73, 0x73, 0x69, 0x64, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0220C060
-UNK04_0220C060: ; 0x0220C060
- .byte 0x4E, 0x69, 0x74, 0x72, 0x6F, 0x20, 0x57, 0x69, 0x46, 0x69, 0x20, 0x53, 0x44, 0x4B, 0x2F, 0x25
- .byte 0x64, 0x2E, 0x25, 0x64, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0220C078
-UNK04_0220C078: ; 0x0220C078
- .byte 0x55, 0x73, 0x65, 0x72, 0x2D, 0x41, 0x67, 0x65, 0x6E, 0x74, 0x00, 0x00
-
- .global UNK_0220C084
-UNK04_0220C084: ; 0x0220C084
- .byte 0x48, 0x54, 0x54, 0x50, 0x5F, 0x58, 0x5F, 0x47, 0x41, 0x4D, 0x45, 0x43, 0x44, 0x00, 0x00, 0x00
-
- .global UNK_0220C094
-UNK04_0220C094: ; 0x0220C094
- .byte 0x25, 0x30, 0x31, 0x33, 0x6C, 0x6C, 0x75, 0x00
-
- .global UNK_0220C09C
-UNK04_0220C09C: ; 0x0220C09C
- .byte 0x25, 0x30, 0x33, 0x75, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0220C0A4
-UNK04_0220C0A4: ; 0x0220C0A4
- .byte 0x25, 0x30, 0x32, 0x78, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0220C0AC
-UNK04_0220C0AC: ; 0x0220C0AC
- .byte 0x25, 0x30, 0x32, 0x78, 0x25, 0x30, 0x32, 0x78, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0220C0B8
-UNK04_0220C0B8: ; 0x0220C0B8
- .byte 0x25, 0x30, 0x32, 0x64, 0x25, 0x30, 0x32, 0x64, 0x25, 0x30, 0x32, 0x64, 0x25, 0x30, 0x32, 0x64
- .byte 0x25, 0x30, 0x32, 0x64, 0x25, 0x30, 0x32, 0x64, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0220C0D4
-UNK04_0220C0D4: ; 0x0220C0D4
- .byte 0x25, 0x30, 0x32, 0x64, 0x3A, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2D, 0x30, 0x30, 0x00
.global UNK_0220C0E4
UNK04_0220C0E4: ; 0x0220C0E4
@@ -63822,38 +62127,6 @@ UNK04_0220FBA4: ; 0x0220FBA4
.section .bss
- .global UNK04_02210460
-UNK04_02210460: ; 0x02210460
- .space 0x4
-
- .global UNK04_02210464
-UNK04_02210464: ; 0x02210464
- .space 0x4
-
- .global UNK04_02210468
-UNK04_02210468: ; 0x02210468
- .space 0x4
-
- .global UNK04_0221046C
-UNK04_0221046C: ; 0x0221046C
- .space 0x14
-
- .global UNK04_02210480
-UNK04_02210480: ; 0x02210480
- .space 0x4
-
- .global UNK04_02210484
-UNK04_02210484: ; 0x02210484
- .space 0x4
-
- .global UNK04_02210488
-UNK04_02210488: ; 0x02210488
- .space 0x4
-
- .global UNK04_0221048C
-UNK04_0221048C: ; 0x0221048C
- .space 0x4
-
.global UNK04_02210490
UNK04_02210490: ; 0x02210490
.space 0x4
diff --git a/arm9/modules/04/asm/thumb_04.s b/arm9/modules/04/asm/mod04_021D74E0.s
index 6f673fe8..4eba9197 100644
--- a/arm9/modules/04/asm/thumb_04.s
+++ b/arm9/modules/04/asm/mod04_021D74E0.s
@@ -2302,856 +2302,22 @@ MOD04_021D8678: ; 0x021D8678
_021D8684: .word UNK04_0220FBC0
_021D8688: .word 0x00001F68
- thumb_func_start MOD04_021D868C
-MOD04_021D868C: ; 0x021D868C
- push {r3, r4, r5, lr}
- bl MIC_Init
- bl PM_Init
- mov r0, #1
- bl PM_SetAmp
- mov r0, #3
- bl PM_SetAmpGain
- ldr r0, _021D8718 ; =UNK04_0220FBC8
- mov r2, #0
- ldr r1, [r0, #4]
- ldr r3, _021D871C ; =0x00003584
- add r5, r2, #0
- str r2, [r1, r3]
- add r1, r3, #0
- ldr r4, [r0, #4]
- add r1, #0xc
- str r2, [r4, r1]
- ldr r4, [r0, #4]
- add r1, r3, #4
- str r2, [r4, r1]
- add r1, r3, #0
- ldr r4, [r0, #4]
- add r1, #8
- str r2, [r4, r1]
- ldr r1, [r0, #4]
- add r3, #0x10
- str r2, [r1, r3]
- ldr r3, _021D8720 ; =0x00003598
- add r1, r2, #0
-_021D86CE:
- ldr r4, [r0, #4]
- add r2, r2, #1
- add r4, r4, r5
- add r5, r5, #2
- strh r1, [r4, r3]
- cmp r2, #0x10
- blt _021D86CE
- ldr r0, _021D8718 ; =UNK04_0220FBC8
- ldr r2, [r0, #4]
- ldr r0, _021D8724 ; =0x000035B8
- str r1, [r2, r0]
- mov r0, #1
- bl FUN_020AA770
- bl NNS_SndInit
- ldr r0, _021D8718 ; =UNK04_0220FBC8
- ldr r1, [r0, #4]
- ldr r0, _021D8728 ; =0x00003504
- add r0, r1, r0
- bl NNS_SndStrmInit
- ldr r1, _021D8718 ; =UNK04_0220FBC8
- mov r0, #0
- ldr r2, [r1, #4]
- mov r1, #0xb1
- lsl r1, r1, #6
- add r1, r2, r1
- mov r2, #0x22
- lsl r2, r2, #6
- bl MIi_CpuClearFast
- ldr r0, _021D8718 ; =UNK04_0220FBC8
- mov r1, #0
- str r1, [r0, #8]
- pop {r3, r4, r5, pc}
- nop
-_021D8718: .word UNK04_0220FBC8
-_021D871C: .word 0x00003584
-_021D8720: .word 0x00003598
-_021D8724: .word 0x000035B8
-_021D8728: .word 0x00003504
-
- thumb_func_start MOD04_021D872C
-MOD04_021D872C: ; 0x021D872C
- bx lr
- .align 2, 0
-
- thumb_func_start MOD04_021D8730
-MOD04_021D8730: ; 0x021D8730
- push {r4, r5, r6, lr}
- add r6, r2, #0
- add r5, r3, #0
- ldr r4, [sp, #0x14]
- cmp r0, #0
- bne _021D8748
- ldr r0, [r6]
- mov r1, #0
- add r2, r5, #0
- bl MI_CpuFill8
- pop {r4, r5, r6, pc}
-_021D8748:
- ldr r0, _021D87B8 ; =UNK04_0220FBC8
- ldr r2, [r0, #4]
- ldr r0, _021D87BC ; =0x00003565
- ldrb r1, [r2, r0]
- cmp r1, #0
- beq _021D876A
- add r0, r0, #3
- add r0, r2, r0
- ldr r1, _021D87C0 ; =MOD04_021D872C
- mov r2, #0
- bl MIC_StartAutoSamplingAsync
- ldr r0, _021D87B8 ; =UNK04_0220FBC8
- mov r2, #0
- ldr r1, [r0, #4]
- ldr r0, _021D87BC ; =0x00003565
- strb r2, [r1, r0]
-_021D876A:
- bl MIC_GetLastSamplingAddress
- sub r0, r0, r4
- cmp r0, r5
- bhs _021D8776
- add r4, r4, r5
-_021D8776:
- ldr r0, _021D87C4 ; =0x027FFFA8
- ldrh r1, [r0]
- mov r0, #2
- lsl r0, r0, #0xe
- and r0, r1
- asr r0, r0, #0xf
- beq _021D878E
- ldr r0, _021D87B8 ; =UNK04_0220FBC8
- ldr r1, [r0, #4]
- mov r0, #0xb1
- lsl r0, r0, #6
- add r4, r1, r0
-_021D878E:
- ldr r0, _021D87B8 ; =UNK04_0220FBC8
- ldr r1, [r0, #4]
- ldr r0, _021D87C8 ; =0x000034FC
- ldr r0, [r1, r0]
- cmp r0, #0
- bne _021D87A2
- add r0, r4, #0
- add r1, r5, #0
- bl FUN_020AABDC
-_021D87A2:
- ldr r0, [r6]
- add r1, r5, #0
- mov r2, #0
- bl FUN_020AA824
- ldr r0, _021D87B8 ; =UNK04_0220FBC8
- mov r2, #2
- ldr r1, [r0, #4]
- ldr r0, _021D87CC ; =0x00003564
- strb r2, [r1, r0]
- pop {r4, r5, r6, pc}
- .align 2, 0
-_021D87B8: .word UNK04_0220FBC8
-_021D87BC: .word 0x00003565
-_021D87C0: .word MOD04_021D872C
-_021D87C4: .word 0x027FFFA8
-_021D87C8: .word 0x000034FC
-_021D87CC: .word 0x00003564
-
- thumb_func_start MOD04_021D87D0
-MOD04_021D87D0: ; 0x021D87D0
- push {r4, lr}
- ldr r1, _021D8810 ; =UNK04_0220FBC8
- ldr r2, [r1, #4]
- ldr r1, _021D8814 ; =0x00003560
- ldr r1, [r2, r1]
- cmp r1, #0
- bne _021D880A
- bl FUN_020ACD54
- add r4, r0, #0
- bne _021D87EA
- mov r0, #0
- pop {r4, pc}
-_021D87EA:
- mov r1, #0
- bl FUN_020ACBA0
- cmp r0, #0
- beq _021D87FE
- add r0, r4, #0
- bl FUN_020ACC84
- mov r0, #0
- pop {r4, pc}
-_021D87FE:
- ldr r0, _021D8810 ; =UNK04_0220FBC8
- ldr r1, [r0, #4]
- ldr r0, _021D8814 ; =0x00003560
- str r4, [r1, r0]
- mov r0, #1
- pop {r4, pc}
-_021D880A:
- mov r0, #0
- pop {r4, pc}
- nop
-_021D8810: .word UNK04_0220FBC8
-_021D8814: .word 0x00003560
-
- thumb_func_start MOD04_021D8818
-MOD04_021D8818: ; 0x021D8818
- push {r3, lr}
- ldr r0, _021D8858 ; =UNK04_0220FBC8
- ldr r1, [r0, #4]
- ldr r0, _021D885C ; =0x00003560
- ldr r0, [r1, r0]
- cmp r0, #0
- beq _021D8852
- ldr r1, [r0, #0xc]
- cmp r1, #4
- bne _021D8852
- mov r1, #0
- bl FUN_020ACAB0
- cmp r0, #0
- beq _021D883A
- mov r0, #0
- pop {r3, pc}
-_021D883A:
- ldr r0, _021D8858 ; =UNK04_0220FBC8
- ldr r1, [r0, #4]
- ldr r0, _021D885C ; =0x00003560
- ldr r0, [r1, r0]
- bl FUN_020AADCC
- cmp r0, #0
- beq _021D884E
- mov r0, #1
- pop {r3, pc}
-_021D884E:
- mov r0, #0
- pop {r3, pc}
-_021D8852:
- mov r0, #0
- pop {r3, pc}
- nop
-_021D8858: .word UNK04_0220FBC8
-_021D885C: .word 0x00003560
-
- thumb_func_start MOD04_021D8860
-MOD04_021D8860: ; 0x021D8860
- push {r4, lr}
- add r4, r2, #0
- cmp r1, #0xc
- bhi _021D8902
- add r0, r1, r1
- add r0, pc
- ldrh r0, [r0, #6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_021D8874: ; jump table
- .short _021D8902 - _021D8874 - 2 ; case 0
- .short _021D888E - _021D8874 - 2 ; case 1
- .short _021D88F4 - _021D8874 - 2 ; case 2
- .short _021D88FC - _021D8874 - 2 ; case 3
- .short _021D88CE - _021D8874 - 2 ; case 4
- .short _021D8902 - _021D8874 - 2 ; case 5
- .short _021D8902 - _021D8874 - 2 ; case 6
- .short _021D88DE - _021D8874 - 2 ; case 7
- .short _021D88AE - _021D8874 - 2 ; case 8
- .short _021D88C2 - _021D8874 - 2 ; case 9
- .short _021D8902 - _021D8874 - 2 ; case 10
- .short _021D88FC - _021D8874 - 2 ; case 11
- .short _021D88FC - _021D8874 - 2 ; case 12
-_021D888E:
- ldr r0, _021D8904 ; =UNK04_0220FBC8
- ldr r2, [r0, #4]
- ldr r0, _021D8908 ; =0x00003560
- ldr r1, [r2, r0]
- cmp r1, #0
- beq _021D88AA
- add r0, r4, #0
- mov r1, #3
- bl FUN_020ACAB0
- add r0, r4, #0
- bl FUN_020ACC84
- pop {r4, pc}
-_021D88AA:
- str r4, [r2, r0]
- pop {r4, pc}
-_021D88AE:
- add r0, r4, #0
- mov r1, #0
- bl FUN_020ACAB0
- add r0, r4, #0
- bl MOD04_021D8910
- bl MOD04_021D8C6C
- pop {r4, pc}
-_021D88C2:
- add r0, r4, #0
- bl MOD04_021D8910
- bl MOD04_021D8C6C
- pop {r4, pc}
-_021D88CE:
- add r0, r4, #0
- mov r1, #4
- bl FUN_020ACAB0
- add r0, r4, #0
- bl MOD04_021D8910
- pop {r4, pc}
-_021D88DE:
- add r0, r4, #0
- bl FUN_020AADCC
- cmp r0, #0
- beq _021D8902
- ldr r0, _021D8904 ; =UNK04_0220FBC8
- mov r2, #2
- ldr r1, [r0, #4]
- ldr r0, _021D890C ; =0x000034F8
- str r2, [r1, r0]
- pop {r4, pc}
-_021D88F4:
- add r0, r4, #0
- bl MOD04_021D8910
- pop {r4, pc}
-_021D88FC:
- add r0, r4, #0
- bl MOD04_021D8910
-_021D8902:
- pop {r4, pc}
- .align 2, 0
-_021D8904: .word UNK04_0220FBC8
-_021D8908: .word 0x00003560
-_021D890C: .word 0x000034F8
-
- thumb_func_start MOD04_021D8910
-MOD04_021D8910: ; 0x021D8910
- push {r4, lr}
- ldr r1, _021D893C ; =UNK04_0220FBC8
- add r4, r0, #0
- ldr r2, [r1, #4]
- ldr r1, _021D8940 ; =0x00003560
- ldr r1, [r2, r1]
- cmp r4, r1
- bne _021D8936
- bl FUN_020AACFC
- add r0, r4, #0
- bl FUN_020ACC84
- ldr r0, _021D893C ; =UNK04_0220FBC8
- mov r2, #0
- ldr r1, [r0, #4]
- ldr r0, _021D8940 ; =0x00003560
- str r2, [r1, r0]
- pop {r4, pc}
-_021D8936:
- bl FUN_020ACC84
- pop {r4, pc}
- .align 2, 0
-_021D893C: .word UNK04_0220FBC8
-_021D8940: .word 0x00003560
-
- thumb_func_start MOD04_021D8944
-MOD04_021D8944: ; 0x021D8944
- push {r4, r5, r6, lr}
- bl OS_GetTick
- add r4, r0, #0
- ldr r0, _021D8A3C ; =UNK04_0220FBC8
- add r5, r1, #0
- ldr r0, [r0, #0xc]
- sub r1, r4, r0
- mov r0, #0xfa
- lsl r0, r0, #8
- mul r0, r1
- ldr r1, _021D8A40 ; =0x000082EA
- bl _u32_div_f
- ldr r1, _021D8A3C ; =UNK04_0220FBC8
- ldr r3, _021D8A44 ; =0x0000411A
- ldr r2, [r1, #8]
- sub r0, r0, r3
- add r2, r2, r0
- ldr r0, _021D8A48 ; =0xFFFFD8F0
- str r2, [r1, #8]
- cmp r2, r0
- bge _021D8976
- mov r0, #0
- str r0, [r1, #8]
-_021D8976:
- ldr r0, _021D8A3C ; =UNK04_0220FBC8
- str r4, [r0, #0xc]
- str r5, [r0, #0x10]
- bl VCT_Main
- ldr r4, _021D8A3C ; =UNK04_0220FBC8
- ldr r0, _021D8A44 ; =0x0000411A
- ldr r1, [r4, #8]
- cmp r1, r0
- blt _021D899C
- add r6, r0, #0
- add r5, r0, #0
-_021D898E:
- bl VCT_Main
- ldr r0, [r4, #8]
- sub r0, r0, r6
- str r0, [r4, #8]
- cmp r0, r5
- bge _021D898E
-_021D899C:
- ldr r0, _021D8A3C ; =UNK04_0220FBC8
- ldr r2, [r0, #4]
- ldr r0, _021D8A4C ; =0x0000358C
- ldr r1, [r2, r0]
- cmp r1, #0
- beq _021D89EC
- sub r0, r0, #4
- ldr r0, [r2, r0]
- cmp r0, #3
- bhi _021D89E2
- add r0, r0, r0
- add r0, pc
- ldrh r0, [r0, #6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_021D89BC: ; jump table
- .short _021D89C4 - _021D89BC - 2 ; case 0
- .short _021D89CC - _021D89BC - 2 ; case 1
- .short _021D89D4 - _021D89BC - 2 ; case 2
- .short _021D89DC - _021D89BC - 2 ; case 3
-_021D89C4:
- mov r0, #3
- bl PM_SetAmpGain
- b _021D89E2
-_021D89CC:
- mov r0, #2
- bl PM_SetAmpGain
- b _021D89E2
-_021D89D4:
- mov r0, #1
- bl PM_SetAmpGain
- b _021D89E2
-_021D89DC:
- mov r0, #0
- bl PM_SetAmpGain
-_021D89E2:
- ldr r0, _021D8A3C ; =UNK04_0220FBC8
- mov r2, #0
- ldr r1, [r0, #4]
- ldr r0, _021D8A4C ; =0x0000358C
- str r2, [r1, r0]
-_021D89EC:
- ldr r0, _021D8A3C ; =UNK04_0220FBC8
- ldr r1, [r0, #4]
- ldr r0, _021D8A50 ; =0x000034F8
- ldr r0, [r1, r0]
- cmp r0, #0
- beq _021D8A00
- cmp r0, #1
- beq _021D8A3A
- cmp r0, #2
- pop {r4, r5, r6, pc}
-_021D8A00:
- bl MOD04_021D8018
- cmp r0, #0
- bne _021D8A1E
- mov r0, #1
- bl MOD04_021D87D0
- cmp r0, #0
- beq _021D8A3A
- ldr r0, _021D8A3C ; =UNK04_0220FBC8
- mov r2, #1
- ldr r1, [r0, #4]
- ldr r0, _021D8A50 ; =0x000034F8
- str r2, [r1, r0]
- pop {r4, r5, r6, pc}
-_021D8A1E:
- bl MOD04_021D8018
- cmp r0, #1
- bne _021D8A3A
- mov r0, #0
- bl MOD04_021D8818
- cmp r0, #0
- beq _021D8A3A
- ldr r0, _021D8A3C ; =UNK04_0220FBC8
- mov r2, #2
- ldr r1, [r0, #4]
- ldr r0, _021D8A50 ; =0x000034F8
- str r2, [r1, r0]
-_021D8A3A:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_021D8A3C: .word UNK04_0220FBC8
-_021D8A40: .word 0x000082EA
-_021D8A44: .word 0x0000411A
-_021D8A48: .word 0xFFFFD8F0
-_021D8A4C: .word 0x0000358C
-_021D8A50: .word 0x000034F8
-
- thumb_func_start MOD04_021D8A54
-MOD04_021D8A54: ; 0x021D8A54
- push {r3, lr}
- ldr r3, _021D8A78 ; =UNK04_0220FBC8
- ldr r3, [r3, #4]
- cmp r3, #0
- bne _021D8A62
- mov r0, #0
- pop {r3, pc}
-_021D8A62:
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bl VCT_HandleData
- cmp r0, #0
- beq _021D8A72
- mov r0, #1
- pop {r3, pc}
-_021D8A72:
- mov r0, #0
- pop {r3, pc}
- nop
-_021D8A78: .word UNK04_0220FBC8
-
- thumb_func_start MOD04_021D8A7C
-MOD04_021D8A7C: ; 0x021D8A7C
- push {r4, r5, r6, r7, lr}
- sub sp, #0x34
- ldr r2, _021D8BC8 ; =UNK04_0220BAC0
- add r4, r1, #0
- ldrb r3, [r2]
- add r1, sp, #0x10
- add r5, r0, #0
- strb r3, [r1]
- ldrb r3, [r2, #1]
- ldrb r2, [r2, #2]
- strb r3, [r1, #1]
- strb r2, [r1, #2]
- ldr r1, _021D8BCC ; =UNK04_0220FBC8
- ldr r1, [r1, #4]
- cmp r1, #0
- bne _021D8ACA
- ldr r1, _021D8BD0 ; =0x000035DC
- bl AllocFromHeap
- ldr r2, _021D8BCC ; =UNK04_0220FBC8
- mov r1, #0x35
- str r0, [r2]
- add r0, #0x1f
- lsr r0, r0, #5
- lsl r0, r0, #5
- str r0, [r2, #4]
- lsl r1, r1, #8
- str r5, [r0, r1]
- add r0, r1, #0
- ldr r5, _021D8BD4 ; =UNK04_0220FBE0
- ldr r3, [r2, #4]
- sub r0, #0x40
- str r5, [r3, r0]
- ldr r0, [r2, #4]
- mov r3, #0
- sub r1, #0x3c
- str r3, [r0, r1]
- bl MOD04_021D868C
-_021D8ACA:
- ldr r5, _021D8BCC ; =UNK04_0220FBC8
- mov r7, #0x11
- ldr r0, [r5, #4]
- ldr r3, _021D8BD8 ; =0x00003568
- mov r1, #3
- str r1, [r0, r3]
- add r1, r3, #0
- ldr r0, [r5, #4]
- sub r1, #0xa8
- ldr r2, [r0, r1]
- add r1, r3, #4
- str r2, [r0, r1]
- lsl r7, r7, #6
- add r0, r3, #0
- ldr r1, [r5, #4]
- lsl r2, r7, #1
- add r0, #8
- str r2, [r1, r0]
- mov r2, #0x41
- add r0, r3, #0
- ldr r1, [r5, #4]
- lsl r2, r2, #6
- add r0, #0xc
- str r2, [r1, r0]
- add r0, r3, #0
- ldr r2, [r5, #4]
- mov r1, #1
- add r0, #0x10
- str r1, [r2, r0]
- add r2, r3, #0
- ldr r6, [r5, #4]
- mov r0, #0
- add r2, #0x14
- str r0, [r6, r2]
- add r2, r3, #0
- ldr r6, [r5, #4]
- add r2, #0x18
- str r0, [r6, r2]
- sub r0, r3, #3
- ldr r2, [r5, #4]
- sub r3, #0x64
- strb r1, [r2, r0]
- ldr r0, [r5, #4]
- add r2, sp, #0x10
- add r0, r0, r3
- bl NNS_SndStrmAllocChannel
- add r0, r5, #0
- ldr r1, [r0, #4]
- ldr r0, _021D8BDC ; =0x00003504
- add r0, r1, r0
- mov r1, #0
- bl NNS_SndStrmSetVolume
- mov r0, #0x41
- str r0, [sp]
- mov r0, #2
- str r0, [sp, #4]
- ldr r0, _021D8BE0 ; =MOD04_021D8730
- add r1, r5, #0
- str r0, [sp, #8]
- mov r0, #0xd3
- ldr r2, [r1, #4]
- lsl r0, r0, #6
- ldr r2, [r2, r0]
- add r0, #0x44
- str r2, [sp, #0xc]
- ldr r3, [r1, #4]
- mov r2, #0x8f
- lsl r2, r2, #6
- add r0, r3, r0
- add r2, r3, r2
- mov r1, #1
- lsl r3, r7, #1
- bl NNS_SndStrmSetup
- ldr r2, _021D8BCC ; =UNK04_0220FBC8
- ldr r1, _021D8BE4 ; =0x000034F8
- ldr r0, [r2, #4]
- mov r5, #0
- str r5, [r0, r1]
- add r0, r1, #0
- ldr r3, [r2, #4]
- add r0, #0x68
- str r5, [r3, r0]
- mov r0, #1
- str r0, [sp, #0x1c]
- ldr r0, [r2, #4]
- sub r1, #0x30
- add r0, r0, r1
- str r0, [sp, #0x14]
- mov r0, #2
- str r0, [sp, #0x18]
- bl MOD04_021D8018
- add r1, sp, #0x10
- strb r0, [r1, #0x10]
- ldr r0, _021D8BE8 ; =MOD04_021D8860
- str r0, [sp, #0x2c]
- add r0, r5, #0
- str r0, [sp, #0x30]
- ldr r0, _021D8BCC ; =UNK04_0220FBC8
- ldr r0, [r0, #4]
- str r0, [sp, #0x24]
- mov r0, #0x8f
- lsl r0, r0, #6
- str r0, [sp, #0x28]
- add r0, sp, #0x14
- bl VCT_Init
- cmp r0, #0
- ldr r0, _021D8BCC ; =UNK04_0220FBC8
- add r2, r5, #0
- ldr r1, [r0, #4]
- ldr r0, _021D8BEC ; =0x000034FC
- str r2, [r1, r0]
- add r0, r4, #0
- bl FUN_020AA7A0
- bl MOD04_021D8BF0
- mov r0, #1
- bl FUN_020AA760
- add sp, #0x34
- pop {r4, r5, r6, r7, pc}
- nop
-_021D8BC8: .word UNK04_0220BAC0
-_021D8BCC: .word UNK04_0220FBC8
-_021D8BD0: .word 0x000035DC
-_021D8BD4: .word UNK04_0220FBE0
-_021D8BD8: .word 0x00003568
-_021D8BDC: .word 0x00003504
-_021D8BE0: .word MOD04_021D8730
-_021D8BE4: .word 0x000034F8
-_021D8BE8: .word MOD04_021D8860
-_021D8BEC: .word 0x000034FC
-
- thumb_func_start MOD04_021D8BF0
-MOD04_021D8BF0: ; 0x021D8BF0
- ldr r0, _021D8BFC ; =UNK04_0220FBC8
- ldr r3, _021D8C00 ; =NNS_SndStrmStart
- ldr r1, [r0, #4]
- ldr r0, _021D8C04 ; =0x00003504
- add r0, r1, r0
- bx r3
- .align 2, 0
-_021D8BFC: .word UNK04_0220FBC8
-_021D8C00: .word NNS_SndStrmStart
-_021D8C04: .word 0x00003504
-
- thumb_func_start MOD04_021D8C08
-MOD04_021D8C08: ; 0x021D8C08
- push {r3, lr}
- ldr r0, _021D8C50 ; =UNK04_0220FBC8
- ldr r1, _021D8C54 ; =0x00003560
- ldr r2, [r0, #4]
- ldr r0, [r2, r1]
- cmp r0, #0
- beq _021D8C1E
- sub r1, #0x68
- ldr r1, [r2, r1]
- cmp r1, #0
- bne _021D8C24
-_021D8C1E:
- bl MOD04_021D8C6C
- pop {r3, pc}
-_021D8C24:
- cmp r1, #1
- bne _021D8C38
- mov r1, #2
- bl FUN_020ACBA0
- cmp r0, #0
- beq _021D8C38
- bl MOD04_021D8C6C
- pop {r3, pc}
-_021D8C38:
- ldr r0, _021D8C50 ; =UNK04_0220FBC8
- ldr r1, [r0, #4]
- ldr r0, _021D8C54 ; =0x00003560
- ldr r0, [r1, r0]
- mov r1, #1
- bl FUN_020ACBA0
- cmp r0, #0
- beq _021D8C4E
- bl MOD04_021D8C6C
-_021D8C4E:
- pop {r3, pc}
- .align 2, 0
-_021D8C50: .word UNK04_0220FBC8
-_021D8C54: .word 0x00003560
-
- thumb_func_start MOD04_021D8C58
-MOD04_021D8C58: ; 0x021D8C58
- ldr r1, _021D8C64 ; =UNK04_0220FBC8
- ldr r2, [r1, #4]
- ldr r1, _021D8C68 ; =0x000034C4
- str r0, [r2, r1]
- bx lr
- nop
-_021D8C64: .word UNK04_0220FBC8
-_021D8C68: .word 0x000034C4
-
- thumb_func_start MOD04_021D8C6C
-MOD04_021D8C6C: ; 0x021D8C6C
- push {r4, lr}
- ldr r0, _021D8CBC ; =UNK04_0220FBC8
- ldr r1, [r0]
- cmp r1, #0
- beq _021D8CBA
- ldr r1, [r0, #4]
- ldr r0, _021D8CC0 ; =0x000034C4
- ldr r4, [r1, r0]
- bl MIC_StopAutoSampling
- ldr r0, _021D8CBC ; =UNK04_0220FBC8
- ldr r1, [r0, #4]
- ldr r0, _021D8CC4 ; =0x00003504
- add r0, r1, r0
- bl NNS_SndStrmStop
- ldr r0, _021D8CBC ; =UNK04_0220FBC8
- ldr r1, [r0, #4]
- ldr r0, _021D8CC4 ; =0x00003504
- add r0, r1, r0
- bl NNS_SndStrmFreeChannel
- bl VCT_Cleanup
- ldr r1, _021D8CBC ; =UNK04_0220FBC8
- mov r0, #0x35
- ldr r2, [r1, #4]
- lsl r0, r0, #8
- ldr r0, [r2, r0]
- ldr r1, [r1]
- bl FreeToHeapExplicit
- mov r1, #0
- ldr r0, _021D8CBC ; =UNK04_0220FBC8
- cmp r4, #0
- str r1, [r0]
- str r1, [r0, #4]
- beq _021D8CBA
- blx r4
-_021D8CBA:
- pop {r4, pc}
- .align 2, 0
-_021D8CBC: .word UNK04_0220FBC8
-_021D8CC0: .word 0x000034C4
-_021D8CC4: .word 0x00003504
-
- thumb_func_start MOD04_021D8CC8
-MOD04_021D8CC8: ; 0x021D8CC8
- push {r3, lr}
- sub sp, #0x10
- ldr r0, _021D8CEC ; =UNK04_0220FBC8
- ldr r0, [r0, #4]
- cmp r0, #0
- beq _021D8CE6
- add r0, sp, #0
- bl FUN_020AD144
- ldr r0, [sp, #4]
- cmp r0, #2
- ble _021D8CE6
- ldr r0, [sp]
- add sp, #0x10
- pop {r3, pc}
-_021D8CE6:
- mov r0, #0
- add sp, #0x10
- pop {r3, pc}
- .align 2, 0
-_021D8CEC: .word UNK04_0220FBC8
-
- thumb_func_start MOD04_021D8CF0
-MOD04_021D8CF0: ; 0x021D8CF0
- ldr r0, _021D8CFC ; =UNK04_0220FBC8
- mov r2, #1
- ldr r1, [r0, #4]
- ldr r0, _021D8D00 ; =0x000034FC
- str r2, [r1, r0]
- bx lr
- .align 2, 0
-_021D8CFC: .word UNK04_0220FBC8
-_021D8D00: .word 0x000034FC
-
- thumb_func_start MOD04_021D8D04
-MOD04_021D8D04: ; 0x021D8D04
- ldr r0, _021D8D10 ; =UNK04_0220FBC8
- mov r2, #0
- ldr r1, [r0, #4]
- ldr r0, _021D8D14 ; =0x000034FC
- str r2, [r1, r0]
- bx lr
- .align 2, 0
-_021D8D10: .word UNK04_0220FBC8
-_021D8D14: .word 0x000034FC
-
- .section .rodata
+ .section .bss
- .global UNK04_0220BAC0
-UNK04_0220BAC0: ; 0x0220BAC0
- .byte 0x0D, 0x0D, 0x0D
+ .global UNK04_0220FBC0
+UNK04_0220FBC0: ; 0x0220FBC0
+ .space 0x8
.section .data
+
.balign 4
+
.global UNK04_0220BEA0
UNK04_0220BEA0: ; 0x0220BEA0
.asciz "pokemondpds"
+
.balign 4
+
.global UNK04_0220BEAC
UNK04_0220BEAC: ; 0x0220BEAC
.asciz "1vTlwb"
-
- .section .bss
- .global UNK04_0220FBC0
-UNK04_0220FBC0: ; 0x0220FBC0
- .space 0x8
-
- .global UNK04_0220FBC8
-UNK04_0220FBC8: ; 0x0220FBC8
- .space 0x18
-
- .global UNK04_0220FBE0
-UNK04_0220FBE0: ; 0x0220FBE0
- .space 0x880
diff --git a/arm9/modules/04/asm/mod04_021D868C.s b/arm9/modules/04/asm/mod04_021D868C.s
new file mode 100644
index 00000000..4921962f
--- /dev/null
+++ b/arm9/modules/04/asm/mod04_021D868C.s
@@ -0,0 +1,845 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD04_021D868C
+MOD04_021D868C: ; 0x021D868C
+ push {r3, r4, r5, lr}
+ bl MIC_Init
+ bl PM_Init
+ mov r0, #1
+ bl PM_SetAmp
+ mov r0, #3
+ bl PM_SetAmpGain
+ ldr r0, _021D8718 ; =UNK04_0220FBC8
+ mov r2, #0
+ ldr r1, [r0, #4]
+ ldr r3, _021D871C ; =0x00003584
+ add r5, r2, #0
+ str r2, [r1, r3]
+ add r1, r3, #0
+ ldr r4, [r0, #4]
+ add r1, #0xc
+ str r2, [r4, r1]
+ ldr r4, [r0, #4]
+ add r1, r3, #4
+ str r2, [r4, r1]
+ add r1, r3, #0
+ ldr r4, [r0, #4]
+ add r1, #8
+ str r2, [r4, r1]
+ ldr r1, [r0, #4]
+ add r3, #0x10
+ str r2, [r1, r3]
+ ldr r3, _021D8720 ; =0x00003598
+ add r1, r2, #0
+_021D86CE:
+ ldr r4, [r0, #4]
+ add r2, r2, #1
+ add r4, r4, r5
+ add r5, r5, #2
+ strh r1, [r4, r3]
+ cmp r2, #0x10
+ blt _021D86CE
+ ldr r0, _021D8718 ; =UNK04_0220FBC8
+ ldr r2, [r0, #4]
+ ldr r0, _021D8724 ; =0x000035B8
+ str r1, [r2, r0]
+ mov r0, #1
+ bl FUN_020AA770
+ bl NNS_SndInit
+ ldr r0, _021D8718 ; =UNK04_0220FBC8
+ ldr r1, [r0, #4]
+ ldr r0, _021D8728 ; =0x00003504
+ add r0, r1, r0
+ bl NNS_SndStrmInit
+ ldr r1, _021D8718 ; =UNK04_0220FBC8
+ mov r0, #0
+ ldr r2, [r1, #4]
+ mov r1, #0xb1
+ lsl r1, r1, #6
+ add r1, r2, r1
+ mov r2, #0x22
+ lsl r2, r2, #6
+ bl MIi_CpuClearFast
+ ldr r0, _021D8718 ; =UNK04_0220FBC8
+ mov r1, #0
+ str r1, [r0, #8]
+ pop {r3, r4, r5, pc}
+ nop
+_021D8718: .word UNK04_0220FBC8
+_021D871C: .word 0x00003584
+_021D8720: .word 0x00003598
+_021D8724: .word 0x000035B8
+_021D8728: .word 0x00003504
+
+ thumb_func_start MOD04_021D872C
+MOD04_021D872C: ; 0x021D872C
+ bx lr
+ .align 2, 0
+
+ thumb_func_start MOD04_021D8730
+MOD04_021D8730: ; 0x021D8730
+ push {r4, r5, r6, lr}
+ add r6, r2, #0
+ add r5, r3, #0
+ ldr r4, [sp, #0x14]
+ cmp r0, #0
+ bne _021D8748
+ ldr r0, [r6]
+ mov r1, #0
+ add r2, r5, #0
+ bl MI_CpuFill8
+ pop {r4, r5, r6, pc}
+_021D8748:
+ ldr r0, _021D87B8 ; =UNK04_0220FBC8
+ ldr r2, [r0, #4]
+ ldr r0, _021D87BC ; =0x00003565
+ ldrb r1, [r2, r0]
+ cmp r1, #0
+ beq _021D876A
+ add r0, r0, #3
+ add r0, r2, r0
+ ldr r1, _021D87C0 ; =MOD04_021D872C
+ mov r2, #0
+ bl MIC_StartAutoSamplingAsync
+ ldr r0, _021D87B8 ; =UNK04_0220FBC8
+ mov r2, #0
+ ldr r1, [r0, #4]
+ ldr r0, _021D87BC ; =0x00003565
+ strb r2, [r1, r0]
+_021D876A:
+ bl MIC_GetLastSamplingAddress
+ sub r0, r0, r4
+ cmp r0, r5
+ bhs _021D8776
+ add r4, r4, r5
+_021D8776:
+ ldr r0, _021D87C4 ; =0x027FFFA8
+ ldrh r1, [r0]
+ mov r0, #2
+ lsl r0, r0, #0xe
+ and r0, r1
+ asr r0, r0, #0xf
+ beq _021D878E
+ ldr r0, _021D87B8 ; =UNK04_0220FBC8
+ ldr r1, [r0, #4]
+ mov r0, #0xb1
+ lsl r0, r0, #6
+ add r4, r1, r0
+_021D878E:
+ ldr r0, _021D87B8 ; =UNK04_0220FBC8
+ ldr r1, [r0, #4]
+ ldr r0, _021D87C8 ; =0x000034FC
+ ldr r0, [r1, r0]
+ cmp r0, #0
+ bne _021D87A2
+ add r0, r4, #0
+ add r1, r5, #0
+ bl FUN_020AABDC
+_021D87A2:
+ ldr r0, [r6]
+ add r1, r5, #0
+ mov r2, #0
+ bl FUN_020AA824
+ ldr r0, _021D87B8 ; =UNK04_0220FBC8
+ mov r2, #2
+ ldr r1, [r0, #4]
+ ldr r0, _021D87CC ; =0x00003564
+ strb r2, [r1, r0]
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_021D87B8: .word UNK04_0220FBC8
+_021D87BC: .word 0x00003565
+_021D87C0: .word MOD04_021D872C
+_021D87C4: .word 0x027FFFA8
+_021D87C8: .word 0x000034FC
+_021D87CC: .word 0x00003564
+
+ thumb_func_start MOD04_021D87D0
+MOD04_021D87D0: ; 0x021D87D0
+ push {r4, lr}
+ ldr r1, _021D8810 ; =UNK04_0220FBC8
+ ldr r2, [r1, #4]
+ ldr r1, _021D8814 ; =0x00003560
+ ldr r1, [r2, r1]
+ cmp r1, #0
+ bne _021D880A
+ bl FUN_020ACD54
+ add r4, r0, #0
+ bne _021D87EA
+ mov r0, #0
+ pop {r4, pc}
+_021D87EA:
+ mov r1, #0
+ bl FUN_020ACBA0
+ cmp r0, #0
+ beq _021D87FE
+ add r0, r4, #0
+ bl FUN_020ACC84
+ mov r0, #0
+ pop {r4, pc}
+_021D87FE:
+ ldr r0, _021D8810 ; =UNK04_0220FBC8
+ ldr r1, [r0, #4]
+ ldr r0, _021D8814 ; =0x00003560
+ str r4, [r1, r0]
+ mov r0, #1
+ pop {r4, pc}
+_021D880A:
+ mov r0, #0
+ pop {r4, pc}
+ nop
+_021D8810: .word UNK04_0220FBC8
+_021D8814: .word 0x00003560
+
+ thumb_func_start MOD04_021D8818
+MOD04_021D8818: ; 0x021D8818
+ push {r3, lr}
+ ldr r0, _021D8858 ; =UNK04_0220FBC8
+ ldr r1, [r0, #4]
+ ldr r0, _021D885C ; =0x00003560
+ ldr r0, [r1, r0]
+ cmp r0, #0
+ beq _021D8852
+ ldr r1, [r0, #0xc]
+ cmp r1, #4
+ bne _021D8852
+ mov r1, #0
+ bl FUN_020ACAB0
+ cmp r0, #0
+ beq _021D883A
+ mov r0, #0
+ pop {r3, pc}
+_021D883A:
+ ldr r0, _021D8858 ; =UNK04_0220FBC8
+ ldr r1, [r0, #4]
+ ldr r0, _021D885C ; =0x00003560
+ ldr r0, [r1, r0]
+ bl FUN_020AADCC
+ cmp r0, #0
+ beq _021D884E
+ mov r0, #1
+ pop {r3, pc}
+_021D884E:
+ mov r0, #0
+ pop {r3, pc}
+_021D8852:
+ mov r0, #0
+ pop {r3, pc}
+ nop
+_021D8858: .word UNK04_0220FBC8
+_021D885C: .word 0x00003560
+
+ thumb_func_start MOD04_021D8860
+MOD04_021D8860: ; 0x021D8860
+ push {r4, lr}
+ add r4, r2, #0
+ cmp r1, #0xc
+ bhi _021D8902
+ add r0, r1, r1
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D8874: ; jump table
+ .short _021D8902 - _021D8874 - 2 ; case 0
+ .short _021D888E - _021D8874 - 2 ; case 1
+ .short _021D88F4 - _021D8874 - 2 ; case 2
+ .short _021D88FC - _021D8874 - 2 ; case 3
+ .short _021D88CE - _021D8874 - 2 ; case 4
+ .short _021D8902 - _021D8874 - 2 ; case 5
+ .short _021D8902 - _021D8874 - 2 ; case 6
+ .short _021D88DE - _021D8874 - 2 ; case 7
+ .short _021D88AE - _021D8874 - 2 ; case 8
+ .short _021D88C2 - _021D8874 - 2 ; case 9
+ .short _021D8902 - _021D8874 - 2 ; case 10
+ .short _021D88FC - _021D8874 - 2 ; case 11
+ .short _021D88FC - _021D8874 - 2 ; case 12
+_021D888E:
+ ldr r0, _021D8904 ; =UNK04_0220FBC8
+ ldr r2, [r0, #4]
+ ldr r0, _021D8908 ; =0x00003560
+ ldr r1, [r2, r0]
+ cmp r1, #0
+ beq _021D88AA
+ add r0, r4, #0
+ mov r1, #3
+ bl FUN_020ACAB0
+ add r0, r4, #0
+ bl FUN_020ACC84
+ pop {r4, pc}
+_021D88AA:
+ str r4, [r2, r0]
+ pop {r4, pc}
+_021D88AE:
+ add r0, r4, #0
+ mov r1, #0
+ bl FUN_020ACAB0
+ add r0, r4, #0
+ bl MOD04_021D8910
+ bl MOD04_021D8C6C
+ pop {r4, pc}
+_021D88C2:
+ add r0, r4, #0
+ bl MOD04_021D8910
+ bl MOD04_021D8C6C
+ pop {r4, pc}
+_021D88CE:
+ add r0, r4, #0
+ mov r1, #4
+ bl FUN_020ACAB0
+ add r0, r4, #0
+ bl MOD04_021D8910
+ pop {r4, pc}
+_021D88DE:
+ add r0, r4, #0
+ bl FUN_020AADCC
+ cmp r0, #0
+ beq _021D8902
+ ldr r0, _021D8904 ; =UNK04_0220FBC8
+ mov r2, #2
+ ldr r1, [r0, #4]
+ ldr r0, _021D890C ; =0x000034F8
+ str r2, [r1, r0]
+ pop {r4, pc}
+_021D88F4:
+ add r0, r4, #0
+ bl MOD04_021D8910
+ pop {r4, pc}
+_021D88FC:
+ add r0, r4, #0
+ bl MOD04_021D8910
+_021D8902:
+ pop {r4, pc}
+ .align 2, 0
+_021D8904: .word UNK04_0220FBC8
+_021D8908: .word 0x00003560
+_021D890C: .word 0x000034F8
+
+ thumb_func_start MOD04_021D8910
+MOD04_021D8910: ; 0x021D8910
+ push {r4, lr}
+ ldr r1, _021D893C ; =UNK04_0220FBC8
+ add r4, r0, #0
+ ldr r2, [r1, #4]
+ ldr r1, _021D8940 ; =0x00003560
+ ldr r1, [r2, r1]
+ cmp r4, r1
+ bne _021D8936
+ bl FUN_020AACFC
+ add r0, r4, #0
+ bl FUN_020ACC84
+ ldr r0, _021D893C ; =UNK04_0220FBC8
+ mov r2, #0
+ ldr r1, [r0, #4]
+ ldr r0, _021D8940 ; =0x00003560
+ str r2, [r1, r0]
+ pop {r4, pc}
+_021D8936:
+ bl FUN_020ACC84
+ pop {r4, pc}
+ .align 2, 0
+_021D893C: .word UNK04_0220FBC8
+_021D8940: .word 0x00003560
+
+ thumb_func_start MOD04_021D8944
+MOD04_021D8944: ; 0x021D8944
+ push {r4, r5, r6, lr}
+ bl OS_GetTick
+ add r4, r0, #0
+ ldr r0, _021D8A3C ; =UNK04_0220FBC8
+ add r5, r1, #0
+ ldr r0, [r0, #0xc]
+ sub r1, r4, r0
+ mov r0, #0xfa
+ lsl r0, r0, #8
+ mul r0, r1
+ ldr r1, _021D8A40 ; =0x000082EA
+ bl _u32_div_f
+ ldr r1, _021D8A3C ; =UNK04_0220FBC8
+ ldr r3, _021D8A44 ; =0x0000411A
+ ldr r2, [r1, #8]
+ sub r0, r0, r3
+ add r2, r2, r0
+ ldr r0, _021D8A48 ; =0xFFFFD8F0
+ str r2, [r1, #8]
+ cmp r2, r0
+ bge _021D8976
+ mov r0, #0
+ str r0, [r1, #8]
+_021D8976:
+ ldr r0, _021D8A3C ; =UNK04_0220FBC8
+ str r4, [r0, #0xc]
+ str r5, [r0, #0x10]
+ bl VCT_Main
+ ldr r4, _021D8A3C ; =UNK04_0220FBC8
+ ldr r0, _021D8A44 ; =0x0000411A
+ ldr r1, [r4, #8]
+ cmp r1, r0
+ blt _021D899C
+ add r6, r0, #0
+ add r5, r0, #0
+_021D898E:
+ bl VCT_Main
+ ldr r0, [r4, #8]
+ sub r0, r0, r6
+ str r0, [r4, #8]
+ cmp r0, r5
+ bge _021D898E
+_021D899C:
+ ldr r0, _021D8A3C ; =UNK04_0220FBC8
+ ldr r2, [r0, #4]
+ ldr r0, _021D8A4C ; =0x0000358C
+ ldr r1, [r2, r0]
+ cmp r1, #0
+ beq _021D89EC
+ sub r0, r0, #4
+ ldr r0, [r2, r0]
+ cmp r0, #3
+ bhi _021D89E2
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D89BC: ; jump table
+ .short _021D89C4 - _021D89BC - 2 ; case 0
+ .short _021D89CC - _021D89BC - 2 ; case 1
+ .short _021D89D4 - _021D89BC - 2 ; case 2
+ .short _021D89DC - _021D89BC - 2 ; case 3
+_021D89C4:
+ mov r0, #3
+ bl PM_SetAmpGain
+ b _021D89E2
+_021D89CC:
+ mov r0, #2
+ bl PM_SetAmpGain
+ b _021D89E2
+_021D89D4:
+ mov r0, #1
+ bl PM_SetAmpGain
+ b _021D89E2
+_021D89DC:
+ mov r0, #0
+ bl PM_SetAmpGain
+_021D89E2:
+ ldr r0, _021D8A3C ; =UNK04_0220FBC8
+ mov r2, #0
+ ldr r1, [r0, #4]
+ ldr r0, _021D8A4C ; =0x0000358C
+ str r2, [r1, r0]
+_021D89EC:
+ ldr r0, _021D8A3C ; =UNK04_0220FBC8
+ ldr r1, [r0, #4]
+ ldr r0, _021D8A50 ; =0x000034F8
+ ldr r0, [r1, r0]
+ cmp r0, #0
+ beq _021D8A00
+ cmp r0, #1
+ beq _021D8A3A
+ cmp r0, #2
+ pop {r4, r5, r6, pc}
+_021D8A00:
+ bl MOD04_021D8018
+ cmp r0, #0
+ bne _021D8A1E
+ mov r0, #1
+ bl MOD04_021D87D0
+ cmp r0, #0
+ beq _021D8A3A
+ ldr r0, _021D8A3C ; =UNK04_0220FBC8
+ mov r2, #1
+ ldr r1, [r0, #4]
+ ldr r0, _021D8A50 ; =0x000034F8
+ str r2, [r1, r0]
+ pop {r4, r5, r6, pc}
+_021D8A1E:
+ bl MOD04_021D8018
+ cmp r0, #1
+ bne _021D8A3A
+ mov r0, #0
+ bl MOD04_021D8818
+ cmp r0, #0
+ beq _021D8A3A
+ ldr r0, _021D8A3C ; =UNK04_0220FBC8
+ mov r2, #2
+ ldr r1, [r0, #4]
+ ldr r0, _021D8A50 ; =0x000034F8
+ str r2, [r1, r0]
+_021D8A3A:
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_021D8A3C: .word UNK04_0220FBC8
+_021D8A40: .word 0x000082EA
+_021D8A44: .word 0x0000411A
+_021D8A48: .word 0xFFFFD8F0
+_021D8A4C: .word 0x0000358C
+_021D8A50: .word 0x000034F8
+
+ thumb_func_start MOD04_021D8A54
+MOD04_021D8A54: ; 0x021D8A54
+ push {r3, lr}
+ ldr r3, _021D8A78 ; =UNK04_0220FBC8
+ ldr r3, [r3, #4]
+ cmp r3, #0
+ bne _021D8A62
+ mov r0, #0
+ pop {r3, pc}
+_021D8A62:
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bl VCT_HandleData
+ cmp r0, #0
+ beq _021D8A72
+ mov r0, #1
+ pop {r3, pc}
+_021D8A72:
+ mov r0, #0
+ pop {r3, pc}
+ nop
+_021D8A78: .word UNK04_0220FBC8
+
+ thumb_func_start MOD04_021D8A7C
+MOD04_021D8A7C: ; 0x021D8A7C
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x34
+ ldr r2, _021D8BC8 ; =UNK04_0220BAC0
+ add r4, r1, #0
+ ldrb r3, [r2]
+ add r1, sp, #0x10
+ add r5, r0, #0
+ strb r3, [r1]
+ ldrb r3, [r2, #1]
+ ldrb r2, [r2, #2]
+ strb r3, [r1, #1]
+ strb r2, [r1, #2]
+ ldr r1, _021D8BCC ; =UNK04_0220FBC8
+ ldr r1, [r1, #4]
+ cmp r1, #0
+ bne _021D8ACA
+ ldr r1, _021D8BD0 ; =0x000035DC
+ bl AllocFromHeap
+ ldr r2, _021D8BCC ; =UNK04_0220FBC8
+ mov r1, #0x35
+ str r0, [r2]
+ add r0, #0x1f
+ lsr r0, r0, #5
+ lsl r0, r0, #5
+ str r0, [r2, #4]
+ lsl r1, r1, #8
+ str r5, [r0, r1]
+ add r0, r1, #0
+ ldr r5, _021D8BD4 ; =UNK04_0220FBE0
+ ldr r3, [r2, #4]
+ sub r0, #0x40
+ str r5, [r3, r0]
+ ldr r0, [r2, #4]
+ mov r3, #0
+ sub r1, #0x3c
+ str r3, [r0, r1]
+ bl MOD04_021D868C
+_021D8ACA:
+ ldr r5, _021D8BCC ; =UNK04_0220FBC8
+ mov r7, #0x11
+ ldr r0, [r5, #4]
+ ldr r3, _021D8BD8 ; =0x00003568
+ mov r1, #3
+ str r1, [r0, r3]
+ add r1, r3, #0
+ ldr r0, [r5, #4]
+ sub r1, #0xa8
+ ldr r2, [r0, r1]
+ add r1, r3, #4
+ str r2, [r0, r1]
+ lsl r7, r7, #6
+ add r0, r3, #0
+ ldr r1, [r5, #4]
+ lsl r2, r7, #1
+ add r0, #8
+ str r2, [r1, r0]
+ mov r2, #0x41
+ add r0, r3, #0
+ ldr r1, [r5, #4]
+ lsl r2, r2, #6
+ add r0, #0xc
+ str r2, [r1, r0]
+ add r0, r3, #0
+ ldr r2, [r5, #4]
+ mov r1, #1
+ add r0, #0x10
+ str r1, [r2, r0]
+ add r2, r3, #0
+ ldr r6, [r5, #4]
+ mov r0, #0
+ add r2, #0x14
+ str r0, [r6, r2]
+ add r2, r3, #0
+ ldr r6, [r5, #4]
+ add r2, #0x18
+ str r0, [r6, r2]
+ sub r0, r3, #3
+ ldr r2, [r5, #4]
+ sub r3, #0x64
+ strb r1, [r2, r0]
+ ldr r0, [r5, #4]
+ add r2, sp, #0x10
+ add r0, r0, r3
+ bl NNS_SndStrmAllocChannel
+ add r0, r5, #0
+ ldr r1, [r0, #4]
+ ldr r0, _021D8BDC ; =0x00003504
+ add r0, r1, r0
+ mov r1, #0
+ bl NNS_SndStrmSetVolume
+ mov r0, #0x41
+ str r0, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ ldr r0, _021D8BE0 ; =MOD04_021D8730
+ add r1, r5, #0
+ str r0, [sp, #8]
+ mov r0, #0xd3
+ ldr r2, [r1, #4]
+ lsl r0, r0, #6
+ ldr r2, [r2, r0]
+ add r0, #0x44
+ str r2, [sp, #0xc]
+ ldr r3, [r1, #4]
+ mov r2, #0x8f
+ lsl r2, r2, #6
+ add r0, r3, r0
+ add r2, r3, r2
+ mov r1, #1
+ lsl r3, r7, #1
+ bl NNS_SndStrmSetup
+ ldr r2, _021D8BCC ; =UNK04_0220FBC8
+ ldr r1, _021D8BE4 ; =0x000034F8
+ ldr r0, [r2, #4]
+ mov r5, #0
+ str r5, [r0, r1]
+ add r0, r1, #0
+ ldr r3, [r2, #4]
+ add r0, #0x68
+ str r5, [r3, r0]
+ mov r0, #1
+ str r0, [sp, #0x1c]
+ ldr r0, [r2, #4]
+ sub r1, #0x30
+ add r0, r0, r1
+ str r0, [sp, #0x14]
+ mov r0, #2
+ str r0, [sp, #0x18]
+ bl MOD04_021D8018
+ add r1, sp, #0x10
+ strb r0, [r1, #0x10]
+ ldr r0, _021D8BE8 ; =MOD04_021D8860
+ str r0, [sp, #0x2c]
+ add r0, r5, #0
+ str r0, [sp, #0x30]
+ ldr r0, _021D8BCC ; =UNK04_0220FBC8
+ ldr r0, [r0, #4]
+ str r0, [sp, #0x24]
+ mov r0, #0x8f
+ lsl r0, r0, #6
+ str r0, [sp, #0x28]
+ add r0, sp, #0x14
+ bl VCT_Init
+ cmp r0, #0
+ ldr r0, _021D8BCC ; =UNK04_0220FBC8
+ add r2, r5, #0
+ ldr r1, [r0, #4]
+ ldr r0, _021D8BEC ; =0x000034FC
+ str r2, [r1, r0]
+ add r0, r4, #0
+ bl FUN_020AA7A0
+ bl MOD04_021D8BF0
+ mov r0, #1
+ bl FUN_020AA760
+ add sp, #0x34
+ pop {r4, r5, r6, r7, pc}
+ nop
+_021D8BC8: .word UNK04_0220BAC0
+_021D8BCC: .word UNK04_0220FBC8
+_021D8BD0: .word 0x000035DC
+_021D8BD4: .word UNK04_0220FBE0
+_021D8BD8: .word 0x00003568
+_021D8BDC: .word 0x00003504
+_021D8BE0: .word MOD04_021D8730
+_021D8BE4: .word 0x000034F8
+_021D8BE8: .word MOD04_021D8860
+_021D8BEC: .word 0x000034FC
+
+ thumb_func_start MOD04_021D8BF0
+MOD04_021D8BF0: ; 0x021D8BF0
+ ldr r0, _021D8BFC ; =UNK04_0220FBC8
+ ldr r3, _021D8C00 ; =NNS_SndStrmStart
+ ldr r1, [r0, #4]
+ ldr r0, _021D8C04 ; =0x00003504
+ add r0, r1, r0
+ bx r3
+ .align 2, 0
+_021D8BFC: .word UNK04_0220FBC8
+_021D8C00: .word NNS_SndStrmStart
+_021D8C04: .word 0x00003504
+
+ thumb_func_start MOD04_021D8C08
+MOD04_021D8C08: ; 0x021D8C08
+ push {r3, lr}
+ ldr r0, _021D8C50 ; =UNK04_0220FBC8
+ ldr r1, _021D8C54 ; =0x00003560
+ ldr r2, [r0, #4]
+ ldr r0, [r2, r1]
+ cmp r0, #0
+ beq _021D8C1E
+ sub r1, #0x68
+ ldr r1, [r2, r1]
+ cmp r1, #0
+ bne _021D8C24
+_021D8C1E:
+ bl MOD04_021D8C6C
+ pop {r3, pc}
+_021D8C24:
+ cmp r1, #1
+ bne _021D8C38
+ mov r1, #2
+ bl FUN_020ACBA0
+ cmp r0, #0
+ beq _021D8C38
+ bl MOD04_021D8C6C
+ pop {r3, pc}
+_021D8C38:
+ ldr r0, _021D8C50 ; =UNK04_0220FBC8
+ ldr r1, [r0, #4]
+ ldr r0, _021D8C54 ; =0x00003560
+ ldr r0, [r1, r0]
+ mov r1, #1
+ bl FUN_020ACBA0
+ cmp r0, #0
+ beq _021D8C4E
+ bl MOD04_021D8C6C
+_021D8C4E:
+ pop {r3, pc}
+ .align 2, 0
+_021D8C50: .word UNK04_0220FBC8
+_021D8C54: .word 0x00003560
+
+ thumb_func_start MOD04_021D8C58
+MOD04_021D8C58: ; 0x021D8C58
+ ldr r1, _021D8C64 ; =UNK04_0220FBC8
+ ldr r2, [r1, #4]
+ ldr r1, _021D8C68 ; =0x000034C4
+ str r0, [r2, r1]
+ bx lr
+ nop
+_021D8C64: .word UNK04_0220FBC8
+_021D8C68: .word 0x000034C4
+
+ thumb_func_start MOD04_021D8C6C
+MOD04_021D8C6C: ; 0x021D8C6C
+ push {r4, lr}
+ ldr r0, _021D8CBC ; =UNK04_0220FBC8
+ ldr r1, [r0]
+ cmp r1, #0
+ beq _021D8CBA
+ ldr r1, [r0, #4]
+ ldr r0, _021D8CC0 ; =0x000034C4
+ ldr r4, [r1, r0]
+ bl MIC_StopAutoSampling
+ ldr r0, _021D8CBC ; =UNK04_0220FBC8
+ ldr r1, [r0, #4]
+ ldr r0, _021D8CC4 ; =0x00003504
+ add r0, r1, r0
+ bl NNS_SndStrmStop
+ ldr r0, _021D8CBC ; =UNK04_0220FBC8
+ ldr r1, [r0, #4]
+ ldr r0, _021D8CC4 ; =0x00003504
+ add r0, r1, r0
+ bl NNS_SndStrmFreeChannel
+ bl VCT_Cleanup
+ ldr r1, _021D8CBC ; =UNK04_0220FBC8
+ mov r0, #0x35
+ ldr r2, [r1, #4]
+ lsl r0, r0, #8
+ ldr r0, [r2, r0]
+ ldr r1, [r1]
+ bl FreeToHeapExplicit
+ mov r1, #0
+ ldr r0, _021D8CBC ; =UNK04_0220FBC8
+ cmp r4, #0
+ str r1, [r0]
+ str r1, [r0, #4]
+ beq _021D8CBA
+ blx r4
+_021D8CBA:
+ pop {r4, pc}
+ .align 2, 0
+_021D8CBC: .word UNK04_0220FBC8
+_021D8CC0: .word 0x000034C4
+_021D8CC4: .word 0x00003504
+
+ thumb_func_start MOD04_021D8CC8
+MOD04_021D8CC8: ; 0x021D8CC8
+ push {r3, lr}
+ sub sp, #0x10
+ ldr r0, _021D8CEC ; =UNK04_0220FBC8
+ ldr r0, [r0, #4]
+ cmp r0, #0
+ beq _021D8CE6
+ add r0, sp, #0
+ bl FUN_020AD144
+ ldr r0, [sp, #4]
+ cmp r0, #2
+ ble _021D8CE6
+ ldr r0, [sp]
+ add sp, #0x10
+ pop {r3, pc}
+_021D8CE6:
+ mov r0, #0
+ add sp, #0x10
+ pop {r3, pc}
+ .align 2, 0
+_021D8CEC: .word UNK04_0220FBC8
+
+ thumb_func_start MOD04_021D8CF0
+MOD04_021D8CF0: ; 0x021D8CF0
+ ldr r0, _021D8CFC ; =UNK04_0220FBC8
+ mov r2, #1
+ ldr r1, [r0, #4]
+ ldr r0, _021D8D00 ; =0x000034FC
+ str r2, [r1, r0]
+ bx lr
+ .align 2, 0
+_021D8CFC: .word UNK04_0220FBC8
+_021D8D00: .word 0x000034FC
+
+ thumb_func_start MOD04_021D8D04
+MOD04_021D8D04: ; 0x021D8D04
+ ldr r0, _021D8D10 ; =UNK04_0220FBC8
+ mov r2, #0
+ ldr r1, [r0, #4]
+ ldr r0, _021D8D14 ; =0x000034FC
+ str r2, [r1, r0]
+ bx lr
+ .align 2, 0
+_021D8D10: .word UNK04_0220FBC8
+_021D8D14: .word 0x000034FC
+
+ .section .rodata
+
+ .global UNK04_0220BAC0
+UNK04_0220BAC0: ; 0x0220BAC0
+ .byte 0x0D, 0x0D, 0x0D
+
+ .section .bss
+
+ .global UNK04_0220FBC8
+UNK04_0220FBC8: ; 0x0220FBC8
+ .space 0x18
+
+ .global UNK04_0220FBE0
+UNK04_0220FBE0: ; 0x0220FBE0
+ .space 0x880
diff --git a/arm9/modules/04/asm/mod04_021D8D18.s b/arm9/modules/04/asm/mod04_021D8D18.s
new file mode 100644
index 00000000..b91bc85a
--- /dev/null
+++ b/arm9/modules/04/asm/mod04_021D8D18.s
@@ -0,0 +1,1233 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ arm_func_start MOD04_021D8D18
+MOD04_021D8D18: ; 0x021D8D18
+ stmdb sp!, {r4, lr}
+ ldr r2, _021D8D58 ; =UNK04_02210468
+ ldr r1, _021D8D5C ; =0x000013D8
+ ldr r2, [r2]
+ mov r4, r0
+ add r0, r2, r1
+ bl OS_LockMutex
+ ldr r2, _021D8D58 ; =UNK04_02210468
+ ldr r1, _021D8D5C ; =0x000013D8
+ ldr r0, [r2]
+ add r0, r0, #0x1000
+ str r4, [r0, #4]
+ ldr r0, [r2]
+ add r0, r0, r1
+ bl OS_UnlockMutex
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_021D8D58: .word UNK04_02210468
+_021D8D5C: .word 0x000013D8
+ arm_func_end MOD04_021D8D18
+
+ arm_func_start MOD04_021D8D60
+MOD04_021D8D60: ; 0x021D8D60
+ stmdb sp!, {r4, r5, r6, lr}
+ sub sp, sp, #0x98
+ ldr r4, _021D8EE0 ; =UNK04_0221046C
+ mov r3, #0
+ ldr r5, [r4, #4]
+ ldr ip, [r4]
+ cmp r5, r3
+ mov r5, r0
+ mov r6, r1
+ mov r4, r2
+ cmpeq ip, r3
+ bne _021D8DC0
+ ldr r0, _021D8EE4 ; =UNK04_0220BEF8
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D8EE8 ; =UNK04_0220BF04
+ ldr r2, _021D8EE4 ; =UNK04_0220BEF8
+ mov r0, r5
+ bl MOD04_021DAB68
+ cmp r0, #0
+ beq _021D8E18
+ add sp, sp, #0x98
+ mov r0, #8
+ ldmia sp!, {r4, r5, r6, pc}
+_021D8DC0:
+ ldr r0, _021D8EEC ; =UNK04_0220BF0C
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D8EE8 ; =UNK04_0220BF04
+ ldr r2, _021D8EEC ; =UNK04_0220BF0C
+ mov r0, r5
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x98
+ movne r0, #8
+ ldmneia sp!, {r4, r5, r6, pc}
+ mov r0, r6
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D8EF0 ; =UNK04_0220BF14
+ mov r0, r5
+ mov r2, r6
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x98
+ movne r0, #8
+ ldmneia sp!, {r4, r5, r6, pc}
+_021D8E18:
+ ldr r1, _021D8EE0 ; =UNK04_0221046C
+ add r0, sp, #0
+ bl MOD04_021D9F78
+ cmp r0, #0
+ addeq sp, sp, #0x98
+ moveq r0, #5
+ ldmeqia sp!, {r4, r5, r6, pc}
+ ldr r0, _021D8EF4 ; =UNK04_0221048C
+ add r1, sp, #0
+ ldr r2, [r0]
+ mov r0, r5
+ bl MOD04_021D9C2C
+ cmp r0, #0
+ addeq sp, sp, #0x98
+ moveq r0, #8
+ ldmeqia sp!, {r4, r5, r6, pc}
+ ldr r0, _021D8EF8 ; =UNK04_02210460
+ ldr r0, [r0]
+ cmp r0, #1
+ bne _021D8E94
+ ldr r0, _021D8EFC ; =UNK04_0220BF1C
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D8F00 ; =UNK04_0220BF20
+ ldr r2, _021D8EFC ; =UNK04_0220BF1C
+ mov r0, r5
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x98
+ movne r0, #8
+ ldmneia sp!, {r4, r5, r6, pc}
+_021D8E94:
+ mov r0, r4
+ bl wcslen
+ cmp r0, #0
+ beq _021D8ED4
+ mov r0, r4
+ bl wcslen
+ mov r3, r0
+ ldr r1, _021D8F04 ; =UNK04_0220BF28
+ mov r0, r5
+ mov r2, r4
+ mov r3, r3, lsl #1
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x98
+ movne r0, #8
+ ldmneia sp!, {r4, r5, r6, pc}
+_021D8ED4:
+ mov r0, #0
+ add sp, sp, #0x98
+ ldmia sp!, {r4, r5, r6, pc}
+ .align 2, 0
+_021D8EE0: .word UNK04_0221046C
+_021D8EE4: .word UNK04_0220BEF8
+_021D8EE8: .word UNK04_0220BF04
+_021D8EEC: .word UNK04_0220BF0C
+_021D8EF0: .word UNK04_0220BF14
+_021D8EF4: .word UNK04_0221048C
+_021D8EF8: .word UNK04_02210460
+_021D8EFC: .word UNK04_0220BF1C
+_021D8F00: .word UNK04_0220BF20
+_021D8F04: .word UNK04_0220BF28
+ arm_func_end MOD04_021D8D60
+
+ arm_func_start MOD04_021D8F08
+MOD04_021D8F08: ; 0x021D8F08
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ ldr r0, _021D91BC ; =UNK04_02210468
+ mov r1, #0
+ ldr r0, [r0]
+ str r1, [sp]
+ add r0, r0, #0x1000
+ ldr r0, [r0, #0x314]
+ ldr r1, _021D91C0 ; =UNK04_0220BF34
+ bl MOD04_021DA388
+ str r0, [sp]
+ cmp r0, #0
+ beq _021D8F40
+ bl MOD04_021DCA84
+_021D8F40:
+ ldr r0, _021D91BC ; =UNK04_02210468
+ mov r2, #0
+ ldr r1, [r0]
+ ldr r0, _021D91C4 ; =errno
+ str r2, [sp]
+ str r2, [r0]
+ add r0, r1, #0x1000
+ ldr r0, [r0, #0x314]
+ ldr r1, _021D91C8 ; =UNK04_0220BF3C
+ bl MOD04_021DA388
+ bl atol
+ ldr r1, _021D91C4 ; =errno
+ ldr r1, [r1]
+ cmp r1, #0x22
+ bne _021D8F9C
+ ldr r0, _021D91BC ; =UNK04_02210468
+ ldr r2, _021D91CC ; =0x00004E85
+ ldr r1, [r0]
+ add sp, sp, #4
+ add r1, r1, #0x1000
+ str r2, [r1, #8]
+ mov r0, #0xc
+ ldmia sp!, {r4, r5, pc}
+_021D8F9C:
+ cmp r0, #0xc8
+ beq _021D8FC8
+ ldr r2, _021D91BC ; =UNK04_02210468
+ ldr r1, _021D91D0 ; =0x000059D8
+ ldr r2, [r2]
+ add r1, r0, r1
+ add r0, r2, #0x1000
+ str r1, [r0, #8]
+ add sp, sp, #4
+ mov r0, #0x12
+ ldmia sp!, {r4, r5, pc}
+_021D8FC8:
+ ldr r0, _021D91BC ; =UNK04_02210468
+ ldr r2, _021D91D4 ; =0x0000100C
+ ldr r3, [r0]
+ ldr r1, _021D91D8 ; =UNK04_0220BF48
+ add r0, r3, #0x1000
+ ldr r0, [r0, #0x314]
+ add r2, r3, r2
+ mov r3, #4
+ bl MOD04_021DA334
+ cmp r0, #0
+ bgt _021D9014
+ ldr r0, _021D91BC ; =UNK04_02210468
+ ldr r2, _021D91CC ; =0x00004E85
+ ldr r1, [r0]
+ add sp, sp, #4
+ add r1, r1, #0x1000
+ str r2, [r1, #8]
+ mov r0, #0xe
+ ldmia sp!, {r4, r5, pc}
+_021D9014:
+ ldr r1, _021D91BC ; =UNK04_02210468
+ ldr r0, _021D91D4 ; =0x0000100C
+ ldr r2, [r1]
+ add r1, sp, #0
+ add r0, r2, r0
+ mov r2, #0xa
+ bl strtol
+ ldr r2, _021D91BC ; =UNK04_02210468
+ ldr r1, _021D91D4 ; =0x0000100C
+ ldr r5, [r2]
+ mov r4, r0
+ add r0, r5, r1
+ bl strlen
+ ldr r1, _021D91D4 ; =0x0000100C
+ ldr r2, [sp]
+ add r1, r5, r1
+ add r0, r1, r0
+ cmp r2, r0
+ ldrne r1, _021D91CC ; =0x00004E85
+ addne r0, r5, #0x1000
+ strne r1, [r0, #8]
+ addne sp, sp, #4
+ movne r0, #0xc
+ ldmneia sp!, {r4, r5, pc}
+ ldr r0, _021D91DC ; =0x00004E20
+ add r1, r5, #0x1000
+ add r0, r4, r0
+ str r0, [r1, #8]
+ cmp r4, #0x64
+ bge _021D91B0
+ ldr ip, _021D91BC ; =UNK04_02210468
+ mov r0, #0
+ ldr r1, [ip]
+ ldr r5, _021D91E0 ; =0x00001052
+ add r1, r1, #0x1000
+ strb r0, [r1, #0x52]
+ ldr r2, [ip]
+ ldr r1, _021D91E4 ; =UNK04_0220BF54
+ add r2, r2, #0x1000
+ strb r0, [r2, #0x1f]
+ ldr r2, [ip]
+ ldr r3, _021D91E8 ; =0x0000012D
+ add r2, r2, #0x1000
+ strb r0, [r2, #0x17f]
+ ldr r2, [ip]
+ add r2, r2, #0x1000
+ strb r0, [r2, #0x10]
+ ldr r2, [ip]
+ add r2, r2, #0x1000
+ strb r0, [r2, #0x188]
+ ldr r2, [ip]
+ add r0, r2, #0x1000
+ ldr r0, [r0, #0x314]
+ add r2, r2, r5
+ bl MOD04_021DA334
+ ldr r0, _021D91BC ; =UNK04_02210468
+ ldr r2, _021D91EC ; =0x0000101F
+ ldr r3, [r0]
+ ldr r1, _021D91F0 ; =UNK04_0220BF5C
+ add r0, r3, #0x1000
+ add r2, r3, r2
+ ldr r0, [r0, #0x314]
+ mov r3, #0x33
+ bl MOD04_021DA334
+ ldr r0, _021D91BC ; =UNK04_02210468
+ ldr r2, _021D91F4 ; =0x0000117F
+ ldr r3, [r0]
+ ldr r1, _021D91F8 ; =UNK04_0220BF64
+ add r0, r3, #0x1000
+ add r2, r3, r2
+ ldr r0, [r0, #0x314]
+ mov r3, #9
+ bl MOD04_021DA334
+ ldr r0, _021D91BC ; =UNK04_02210468
+ ldr r2, _021D91FC ; =0x00001010
+ ldr r3, [r0]
+ ldr r1, _021D9200 ; =UNK04_0220BF70
+ add r0, r3, #0x1000
+ add r2, r3, r2
+ ldr r0, [r0, #0x314]
+ mov r3, #0xf
+ bl MOD04_021DA334
+ ldr r0, _021D91BC ; =UNK04_02210468
+ ldr r2, _021D9204 ; =0x00001188
+ ldr r3, [r0]
+ ldr r1, _021D9208 ; =UNK04_0220BF7C
+ add r0, r3, #0x1000
+ add r2, r3, r2
+ ldr r0, [r0, #0x314]
+ mov r3, #0x41
+ bl MOD04_021DA2F4
+ ldr r0, _021D91BC ; =UNK04_02210468
+ mov r1, #0
+ ldr r0, [r0]
+ cmp r4, #0x28
+ add r0, r0, #0x1000
+ strb r1, [r0, #0x1b3]
+ ldrne r0, _021D920C ; =UNK04_02210464
+ movne r1, #1
+ strne r1, [r0]
+ ldreq r0, _021D920C ; =UNK04_02210464
+ moveq r1, #2
+ streq r1, [r0]
+_021D91B0:
+ mov r0, #0
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_021D91BC: .word UNK04_02210468
+_021D91C0: .word UNK04_0220BF34
+_021D91C4: .word errno
+_021D91C8: .word UNK04_0220BF3C
+_021D91CC: .word 0x00004E85
+_021D91D0: .word 0x000059D8
+_021D91D4: .word 0x0000100C
+_021D91D8: .word UNK04_0220BF48
+_021D91DC: .word 0x00004E20
+_021D91E0: .word 0x00001052
+_021D91E4: .word UNK04_0220BF54
+_021D91E8: .word 0x0000012D
+_021D91EC: .word 0x0000101F
+_021D91F0: .word UNK04_0220BF5C
+_021D91F4: .word 0x0000117F
+_021D91F8: .word UNK04_0220BF64
+_021D91FC: .word 0x00001010
+_021D9200: .word UNK04_0220BF70
+_021D9204: .word 0x00001188
+_021D9208: .word UNK04_0220BF7C
+_021D920C: .word UNK04_02210464
+ arm_func_end MOD04_021D8F08
+
+ arm_func_start MOD04_021D9210
+MOD04_021D9210: ; 0x021D9210
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ ldr r0, _021D93F4 ; =UNK04_02210468
+ mov r1, #0
+ ldr r0, [r0]
+ add r2, r0, #0x1000
+ ldr r0, [r2, #0x314]
+ ldr r5, [r2, #0x20c]
+ ldr r4, [r2, #0x210]
+ bl MOD04_021DA3DC
+ cmp r0, #1
+ beq _021D9260
+ ldr r0, _021D93F4 ; =UNK04_02210468
+ ldr r2, _021D93F8 ; =0x00004E84
+ ldr r1, [r0]
+ add sp, sp, #4
+ add r1, r1, #0x1000
+ str r2, [r1, #8]
+ mov r0, #0xe
+ ldmia sp!, {r4, r5, pc}
+_021D9260:
+ bl MOD04_021D8F08
+ cmp r0, #0
+ addne sp, sp, #4
+ movne r0, #0xe
+ ldmneia sp!, {r4, r5, pc}
+ ldr r0, _021D93F4 ; =UNK04_02210468
+ ldr r1, _021D93F8 ; =0x00004E84
+ ldr r0, [r0]
+ add r0, r0, #0x1000
+ ldr r2, [r0, #8]
+ cmp r2, r1
+ bge _021D9334
+ ldr r0, _021D93FC ; =0x00004E22
+ cmp r2, r0
+ bne _021D9328
+ ldr r0, _021D9400 ; =UNK04_0220BF88
+ ldr r1, _021D9404 ; =0x0000071F
+ blx r5
+ movs r5, r0
+ bne _021D92D0
+ ldr r0, _021D93F4 ; =UNK04_02210468
+ ldr r2, _021D93F8 ; =0x00004E84
+ ldr r1, [r0]
+ add sp, sp, #4
+ add r1, r1, #0x1000
+ str r2, [r1, #8]
+ mov r0, #2
+ ldmia sp!, {r4, r5, pc}
+_021D92D0:
+ add r1, r5, #0x1f
+ ldr r0, _021D9408 ; =UNK04_0221046C
+ bic r1, r1, #0x1f
+ bl FUN_02096710
+ cmp r0, #1
+ beq _021D9318
+ ldr r0, _021D940C ; =UNK04_0220BF98
+ mov r1, r5
+ mov r2, #0
+ blx r4
+ ldr r0, _021D93F4 ; =UNK04_02210468
+ ldr r2, _021D93F8 ; =0x00004E84
+ ldr r1, [r0]
+ add sp, sp, #4
+ add r1, r1, #0x1000
+ str r2, [r1, #8]
+ mov r0, #0xf
+ ldmia sp!, {r4, r5, pc}
+_021D9318:
+ ldr r0, _021D940C ; =UNK04_0220BF98
+ mov r1, r5
+ mov r2, #0
+ blx r4
+_021D9328:
+ add sp, sp, #4
+ mov r0, #0x15
+ ldmia sp!, {r4, r5, pc}
+_021D9334:
+ ldr r0, _021D9410 ; =0x00004E88
+ cmp r2, r0
+ beq _021D9350
+ ldr r0, _021D9414 ; =0x00004E8C
+ cmp r2, r0
+ beq _021D9378
+ b _021D93E8
+_021D9350:
+ ldr r0, _021D9408 ; =UNK04_0221046C
+ bl FUN_02096570
+ ldr r0, _021D93F4 ; =UNK04_02210468
+ ldr r2, _021D9410 ; =0x00004E88
+ ldr r1, [r0]
+ add sp, sp, #4
+ add r1, r1, #0x1000
+ str r2, [r1, #8]
+ mov r0, #0x10
+ ldmia sp!, {r4, r5, pc}
+_021D9378:
+ ldr r0, _021D9400 ; =UNK04_0220BF88
+ mov r1, #0x700
+ blx r5
+ movs r5, r0
+ bne _021D93AC
+ ldr r0, _021D93F4 ; =UNK04_02210468
+ ldr r2, _021D9414 ; =0x00004E8C
+ ldr r1, [r0]
+ add sp, sp, #4
+ add r1, r1, #0x1000
+ str r2, [r1, #8]
+ mov r0, #0x11
+ ldmia sp!, {r4, r5, pc}
+_021D93AC:
+ add r0, r5, #0x1f
+ bic r0, r0, #0x1f
+ bl DWCi_AUTH_MakeWiFiID
+ ldr r0, _021D940C ; =UNK04_0220BF98
+ mov r1, r5
+ mov r2, #0
+ blx r4
+ ldr r0, _021D93F4 ; =UNK04_02210468
+ ldr r2, _021D9414 ; =0x00004E8C
+ ldr r1, [r0]
+ add sp, sp, #4
+ add r1, r1, #0x1000
+ str r2, [r1, #8]
+ mov r0, #0x11
+ ldmia sp!, {r4, r5, pc}
+_021D93E8:
+ mov r0, #0x12
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_021D93F4: .word UNK04_02210468
+_021D93F8: .word 0x00004E84
+_021D93FC: .word 0x00004E22
+_021D9400: .word UNK04_0220BF88
+_021D9404: .word 0x0000071F
+_021D9408: .word UNK04_0221046C
+_021D940C: .word UNK04_0220BF98
+_021D9410: .word 0x00004E88
+_021D9414: .word 0x00004E8C
+ arm_func_end MOD04_021D9210
+
+ arm_func_start MOD04_021D9418
+MOD04_021D9418: ; 0x021D9418
+ stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
+ sub sp, sp, #0x14
+ mov sb, #0
+ mov r0, #1
+ ldr r7, _021D96D4 ; =0x00001388
+ ldr fp, _021D96D8 ; =0x000082EA
+ ldr r5, _021D96DC ; =UNK04_02210468
+ ldr r4, _021D96E0 ; =0x000013D8
+ mov r6, sb
+ str sb, [sp, #8]
+ str sb, [sp, #0xc]
+ str r0, [sp, #4]
+_021D9448:
+ ldr r0, [r5]
+ add r0, r0, #0x1000
+ ldr r1, [r0, #0x314]
+ add r0, r1, #0x1000
+ ldr r0, [r0, #0xba0]
+ cmp r0, #0
+ beq _021D9470
+ ldr r0, _021D96E4 ; =0x00001B34
+ add r0, r1, r0
+ bl OS_JoinThread
+_021D9470:
+ ldr r0, [r5]
+ add r1, r0, #0x1000
+ ldr r0, [r1, #0x314]
+ add r0, r0, #0x1000
+ ldr r0, [r0, #0x20]
+ cmp r0, #8
+ beq _021D9518
+ ldr r0, _021D96E8 ; =0x00004E84
+ str r0, [r1, #8]
+ ldr r0, [r5]
+ add r0, r0, #0x1000
+ ldr r0, [r0, #0x314]
+ add r0, r0, #0x1000
+ ldr r0, [r0, #0x20]
+ cmp r0, #7
+ bne _021D94C0
+ mov r0, #0x14
+ bl MOD04_021D8D18
+ add sp, sp, #0x14
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_021D94C0:
+ cmp sb, #2
+ ble _021D9508
+ cmp r0, #2
+ bne _021D94E0
+ mov r0, #9
+ bl MOD04_021D8D18
+ add sp, sp, #0x14
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_021D94E0:
+ cmp r0, #3
+ bne _021D94F8
+ mov r0, #0xb
+ bl MOD04_021D8D18
+ add sp, sp, #0x14
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_021D94F8:
+ mov r0, #0xd
+ bl MOD04_021D8D18
+ add sp, sp, #0x14
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_021D9508:
+ ldr r0, [sp, #4]
+ add sb, sb, #1
+ str r0, [sp]
+ b _021D9598
+_021D9518:
+ bl MOD04_021D9210
+ cmp r0, #0x10
+ beq _021D9544
+ cmp r0, #0x11
+ beq _021D956C
+ cmp r0, #0x15
+ bne _021D9578
+ mov r0, #0x15
+ bl MOD04_021D8D18
+ add sp, sp, #0x14
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_021D9544:
+ cmp sb, #2
+ ble _021D955C
+ mov r0, #0x10
+ bl MOD04_021D8D18
+ add sp, sp, #0x14
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_021D955C:
+ ldr r0, [sp, #8]
+ add sb, sb, #1
+ str r0, [sp]
+ b _021D9598
+_021D956C:
+ bl MOD04_021D8D18
+ add sp, sp, #0x14
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_021D9578:
+ cmp sb, #2
+ blt _021D958C
+ bl MOD04_021D8D18
+ add sp, sp, #0x14
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_021D958C:
+ ldr r0, [sp, #4]
+ add sb, sb, #1
+ str r0, [sp]
+_021D9598:
+ bl OS_GetTick
+ mov r8, r0
+ mov sl, r1
+ bl OS_GetTick
+ subs r2, r0, r8
+ sbc r0, r1, sl
+ mov r1, r0, lsl #6
+ ldr r3, [sp, #0xc]
+ orr r1, r1, r2, lsr #26
+ mov r0, r2, lsl #6
+ mov r2, fp
+ bl _ll_udiv
+ cmp r1, #0
+ cmpeq r0, r7
+ bhs _021D965C
+_021D95D4:
+ ldr r0, [r5]
+ add r0, r0, r4
+ bl OS_LockMutex
+ ldr r2, [r5]
+ add r1, r2, #0x1000
+ ldr r0, [r1, #0x3f0]
+ cmp r0, #1
+ bne _021D961C
+ ldr r2, _021D96E8 ; =0x00004E84
+ ldr r0, _021D96E0 ; =0x000013D8
+ str r2, [r1, #8]
+ ldr r1, [r5]
+ add r0, r1, r0
+ bl OS_UnlockMutex
+ mov r0, #0x14
+ bl MOD04_021D8D18
+ add sp, sp, #0x14
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_021D961C:
+ add r0, r2, r4
+ bl OS_UnlockMutex
+ mov r0, r7
+ bl OS_Sleep
+ bl OS_GetTick
+ subs r2, r0, r8
+ sbc r0, r1, sl
+ mov r1, r0, lsl #6
+ orr r1, r1, r2, lsr #26
+ mov r0, r2, lsl #6
+ mov r2, fp
+ mov r3, r6
+ bl _ll_udiv
+ cmp r1, #0
+ cmpeq r0, r7
+ blo _021D95D4
+_021D965C:
+ ldr r0, [r5]
+ add r0, r0, #0x1000
+ ldr r0, [r0, #0x314]
+ bl MOD04_021DAE4C
+ ldr r0, [r5]
+ add r0, r0, r4
+ bl OS_LockMutex
+ ldr r0, [sp]
+ bl MOD04_021D96EC
+ ldr r1, [r5]
+ add r1, r1, #0x1000
+ str r0, [r1, #4]
+ ldr r2, [r5]
+ add r1, r2, #0x1000
+ ldr r0, [r1, #4]
+ cmp r0, #0
+ beq _021D96C0
+ ldr r2, _021D96E8 ; =0x00004E84
+ ldr r0, _021D96E0 ; =0x000013D8
+ str r2, [r1, #8]
+ ldr r1, [r5]
+ add r0, r1, r0
+ bl OS_UnlockMutex
+ add sp, sp, #0x14
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_021D96C0:
+ add r0, r2, r4
+ bl OS_UnlockMutex
+ b _021D9448
+ arm_func_end MOD04_021D9418
+
+ arm_func_start MOD04_021D96CC
+MOD04_021D96CC: ; 0x021D96CC
+ add sp, sp, #0x14
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ .align 2, 0
+_021D96D4: .word 0x00001388
+_021D96D8: .word 0x000082EA
+_021D96DC: .word UNK04_02210468
+_021D96E0: .word 0x000013D8
+_021D96E4: .word 0x00001B34
+_021D96E8: .word 0x00004E84
+ arm_func_end MOD04_021D96CC
+
+ arm_func_start MOD04_021D96EC
+MOD04_021D96EC: ; 0x021D96EC
+ stmdb sp!, {r4, lr}
+ ldr r1, _021D97E0 ; =UNK04_0220BEB4
+ mov r4, r0
+ ldr r0, [r1]
+ ldr r1, _021D97E4 ; =UNK04_0220BFA4
+ bl strcmp
+ cmp r0, #0
+ ldrne r0, _021D97E0 ; =UNK04_0220BEB4
+ movne r1, #1
+ strne r1, [r0, #0x14]
+ ldr r0, _021D97E8 ; =UNK04_02210468
+ ldr r1, _021D97E0 ; =UNK04_0220BEB4
+ ldr r0, [r0]
+ add r0, r0, #0x1000
+ ldr r2, [r0, #0x20c]
+ str r2, [r1, #0xc]
+ ldr r2, [r0, #0x210]
+ str r2, [r1, #0x10]
+ ldr r0, [r0, #0x314]
+ bl MOD04_021DB608
+ cmp r0, #0
+ movne r0, #4
+ ldmneia sp!, {r4, pc}
+ cmp r4, #1
+ bne _021D9758
+ ldr r0, _021D97EC ; =UNK04_0221046C
+ bl DWCi_BM_GetWiFiInfo
+_021D9758:
+ ldr r0, _021D97E8 ; =UNK04_02210468
+ ldr r2, _021D97F0 ; =0x000011CC
+ ldr r3, [r0]
+ add r0, r3, #0x1000
+ ldr r0, [r0, #0x314]
+ add r1, r3, #0x1200
+ add r2, r3, r2
+ bl MOD04_021D8D60
+ ldr r2, _021D97E8 ; =UNK04_02210468
+ ldr r1, [r2]
+ add r1, r1, #0x1000
+ str r0, [r1, #4]
+ ldr r0, [r2]
+ add r0, r0, #0x1000
+ ldr r1, [r0, #4]
+ cmp r1, #0
+ movne r0, #4
+ ldmneia sp!, {r4, pc}
+ ldr r0, [r0, #0x314]
+ bl MOD04_021DB570
+ cmp r0, #0
+ movne r0, #4
+ ldmneia sp!, {r4, pc}
+ ldr r0, _021D97F4 ; =OSi_ThreadInfo
+ ldr r0, [r0, #4]
+ bl OS_GetThreadPriority
+ ldr r1, _021D97E8 ; =UNK04_02210468
+ ldr r2, [r1]
+ sub r1, r0, #1
+ add r0, r2, #0x1000
+ ldr r0, [r0, #0x314]
+ bl MOD04_021DB4A4
+ mov r0, #0
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_021D97E0: .word UNK04_0220BEB4
+_021D97E4: .word UNK04_0220BFA4
+_021D97E8: .word UNK04_02210468
+_021D97EC: .word UNK04_0221046C
+_021D97F0: .word 0x000011CC
+_021D97F4: .word OSi_ThreadInfo
+ arm_func_end MOD04_021D96EC
+
+ arm_func_start MOD04_021D97F8
+MOD04_021D97F8: ; 0x021D97F8
+ stmdb sp!, {r4, lr}
+ ldr r1, _021D9874 ; =UNK04_02210468
+ mov r4, r0
+ ldr r1, [r1]
+ cmp r1, #0
+ bne _021D981C
+ mov r1, #0
+ mov r2, #0x1c4
+ bl MI_CpuFill8
+_021D981C:
+ ldr r1, _021D9874 ; =UNK04_02210468
+ ldr r0, _021D9878 ; =0x00001008
+ ldr r2, [r1]
+ mov r1, r4
+ add r0, r2, r0
+ mov r2, #0x1c4
+ bl MI_CpuCopy8
+ ldr r1, [r4]
+ ldr r0, _021D987C ; =0x00004E20
+ cmp r1, r0
+ blt _021D9854
+ ldr r0, _021D9880 ; =0x00007530
+ cmp r1, r0
+ blt _021D985C
+_021D9854:
+ ldr r0, _021D9884 ; =0x00005206
+ str r0, [r4]
+_021D985C:
+ ldr r1, [r4]
+ ldr r0, _021D9888 ; =0x00004E84
+ cmp r1, r0
+ rsbge r0, r1, #0
+ strge r0, [r4]
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_021D9874: .word UNK04_02210468
+_021D9878: .word 0x00001008
+_021D987C: .word 0x00004E20
+_021D9880: .word 0x00007530
+_021D9884: .word 0x00005206
+_021D9888: .word 0x00004E84
+ arm_func_end MOD04_021D97F8
+
+ arm_func_start MOD04_021D988C
+MOD04_021D988C: ; 0x021D988C
+ stmdb sp!, {r4, lr}
+ ldr r0, _021D98D4 ; =UNK04_02210468
+ ldr r1, [r0]
+ cmp r1, #0
+ moveq r0, #0x16
+ ldmeqia sp!, {r4, pc}
+ ldr r0, _021D98D8 ; =0x000013D8
+ add r0, r1, r0
+ bl OS_LockMutex
+ ldr r1, _021D98D4 ; =UNK04_02210468
+ ldr r0, _021D98D8 ; =0x000013D8
+ ldr r2, [r1]
+ add r1, r2, #0x1000
+ add r0, r2, r0
+ ldr r4, [r1, #4]
+ bl OS_UnlockMutex
+ mov r0, r4
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_021D98D4: .word UNK04_02210468
+_021D98D8: .word 0x000013D8
+ arm_func_end MOD04_021D988C
+
+ arm_func_start MOD04_021D98DC
+MOD04_021D98DC: ; 0x021D98DC
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _021D9914 ; =UNK04_02210468
+ ldr r1, [r0]
+ add r0, r1, #0x1000
+ ldr r0, [r0, #0x384]
+ cmp r0, #0
+ addeq sp, sp, #4
+ ldmeqia sp!, {pc}
+ ldr r0, _021D9918 ; =0x00001318
+ add r0, r1, r0
+ bl OS_JoinThread
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021D9914: .word UNK04_02210468
+_021D9918: .word 0x00001318
+ arm_func_end MOD04_021D98DC
+
+ arm_func_start MOD04_021D991C
+MOD04_021D991C: ; 0x021D991C
+ stmdb sp!, {r4, lr}
+ ldr r0, _021D996C ; =UNK04_02210468
+ ldr r0, [r0]
+ cmp r0, #0
+ ldmeqia sp!, {r4, pc}
+ add r1, r0, #0x1000
+ ldr r0, [r1, #0x314]
+ ldr r4, [r1, #0x210]
+ cmp r0, #0
+ beq _021D9948
+ bl MOD04_021DAE4C
+_021D9948:
+ ldr r1, _021D996C ; =UNK04_02210468
+ ldr r0, _021D9970 ; =UNK04_0220BFC4
+ ldr r1, [r1]
+ mov r2, #0
+ blx r4
+ ldr r0, _021D996C ; =UNK04_02210468
+ mov r1, #0
+ str r1, [r0]
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_021D996C: .word UNK04_02210468
+_021D9970: .word UNK04_0220BFC4
+ arm_func_end MOD04_021D991C
+
+ arm_func_start MOD04_021D9974
+MOD04_021D9974: ; 0x021D9974
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _021D9A0C ; =UNK04_02210468
+ ldr r1, [r0]
+ cmp r1, #0
+ addeq sp, sp, #4
+ ldmeqia sp!, {pc}
+ ldr r0, _021D9A10 ; =0x000013D8
+ add r0, r1, r0
+ bl OS_LockMutex
+ ldr r2, _021D9A0C ; =UNK04_02210468
+ mov r3, #1
+ ldr r0, [r2]
+ ldr r1, _021D9A10 ; =0x000013D8
+ add r0, r0, #0x1000
+ str r3, [r0, #0x3f0]
+ ldr r0, [r2]
+ add r0, r0, r1
+ bl OS_UnlockMutex
+ ldr r0, _021D9A0C ; =UNK04_02210468
+ ldr r0, [r0]
+ add r0, r0, #0x1000
+ ldr r0, [r0, #0x314]
+ cmp r0, #0
+ beq _021D99DC
+ bl MOD04_021DB440
+_021D99DC:
+ ldr r0, _021D9A0C ; =UNK04_02210468
+ ldr r1, [r0]
+ add r0, r1, #0x1000
+ ldr r0, [r0, #0x384]
+ cmp r0, #0
+ addeq sp, sp, #4
+ ldmeqia sp!, {pc}
+ ldr r0, _021D9A14 ; =0x00001318
+ add r0, r1, r0
+ bl OS_JoinThread
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021D9A0C: .word UNK04_02210468
+_021D9A10: .word 0x000013D8
+_021D9A14: .word 0x00001318
+ arm_func_end MOD04_021D9974
+
+ arm_func_start MOD04_021D9A18
+MOD04_021D9A18: ; 0x021D9A18
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ ldr r1, _021D9ABC ; =UNK04_02210468
+ ldr r0, _021D9AC0 ; =0x000013D8
+ ldr r1, [r1]
+ add r0, r1, r0
+ bl OS_InitMutex
+ ldr r1, _021D9ABC ; =UNK04_02210468
+ mov r2, #0
+ ldr r0, [r1]
+ add r0, r0, #0x1000
+ str r2, [r0, #0x3f0]
+ ldr r1, [r1]
+ add r0, r1, #0x1000
+ ldr r0, [r0, #0x384]
+ cmp r0, #0
+ beq _021D9A74
+ ldr r0, _021D9AC4 ; =0x00001318
+ add r0, r1, r0
+ bl OS_IsThreadTerminated
+ cmp r0, #0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {pc}
+_021D9A74:
+ ldr r2, _021D9ABC ; =UNK04_02210468
+ ldr r0, _021D9AC4 ; =0x00001318
+ ldr lr, [r2]
+ mov r3, #0x1000
+ ldr r1, _021D9AC8 ; =MOD04_021D9418
+ str r3, [sp]
+ mov ip, #0x10
+ add r0, lr, r0
+ add r3, lr, #0x1000
+ str ip, [sp, #4]
+ bl OS_CreateThread
+ ldr r1, _021D9ABC ; =UNK04_02210468
+ ldr r0, _021D9AC4 ; =0x00001318
+ ldr r1, [r1]
+ add r0, r1, r0
+ bl OS_WakeupThreadDirect
+ add sp, sp, #0xc
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021D9ABC: .word UNK04_02210468
+_021D9AC0: .word 0x000013D8
+_021D9AC4: .word 0x00001318
+_021D9AC8: .word MOD04_021D9418
+ arm_func_end MOD04_021D9A18
+
+ arm_func_start MOD04_021D9ACC
+MOD04_021D9ACC: ; 0x021D9ACC
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ ldr r2, _021D9BFC ; =UNK04_02210468
+ mov r5, r0
+ ldr r0, [r2]
+ mov r4, r1
+ cmp r0, #0
+ addne sp, sp, #4
+ ldr r2, [r5, #0x40]
+ movne r0, #2
+ ldmneia sp!, {r4, r5, pc}
+ ldr r0, _021D9C00 ; =UNK04_0220BFD4
+ ldr r1, _021D9C04 ; =0x000013F4
+ blx r2
+ ldr r1, _021D9BFC ; =UNK04_02210468
+ cmp r0, #0
+ str r0, [r1]
+ addeq sp, sp, #4
+ moveq r0, #2
+ ldmeqia sp!, {r4, r5, pc}
+ ldr r2, _021D9C04 ; =0x000013F4
+ mov r1, #0
+ bl MI_CpuFill8
+ ldr r1, _021D9BFC ; =UNK04_02210468
+ ldr r2, _021D9C08 ; =0x00001008
+ ldr r0, [r1]
+ ldr r3, _021D9C0C ; =UNK04_02210464
+ add r0, r0, #0x1000
+ str r4, [r0, #0x314]
+ ldr r0, [r1]
+ mov r1, #0
+ add r0, r0, r2
+ mov r2, #0x1c4
+ str r1, [r3]
+ bl MI_CpuFill8
+ ldr r2, _021D9BFC ; =UNK04_02210468
+ ldr r3, _021D9C10 ; =0x00004E84
+ ldr r0, [r2]
+ ldr r1, _021D9C14 ; =0x000011CC
+ add r0, r0, #0x1000
+ str r3, [r0, #8]
+ ldr lr, [r2]
+ mov r4, #4
+ add ip, lr, r1
+_021D9B7C:
+ ldmia r5!, {r0, r1, r2, r3}
+ stmia ip!, {r0, r1, r2, r3}
+ subs r4, r4, #1
+ bne _021D9B7C
+ ldmia r5, {r0, r1}
+ stmia ip, {r0, r1}
+ add r0, lr, #0x1100
+ mov r2, #0
+ strh r2, [r0, #0xfe]
+ ldr r1, _021D9BFC ; =UNK04_02210468
+ mov r0, #1
+ ldr r1, [r1]
+ add r1, r1, #0x1000
+ strb r2, [r1, #0x20b]
+ bl MOD04_021D96EC
+ ldr r2, _021D9BFC ; =UNK04_02210468
+ ldr r1, [r2]
+ add r1, r1, #0x1000
+ str r0, [r1, #4]
+ ldr r0, [r2]
+ add r0, r0, #0x1000
+ ldr r0, [r0, #4]
+ cmp r0, #0
+ addne sp, sp, #4
+ ldmneia sp!, {r4, r5, pc}
+ ldr r0, _021D9C18 ; =UNK04_02210460
+ mov r1, #0
+ str r1, [r0]
+ bl MOD04_021D9A18
+ mov r0, #0
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_021D9BFC: .word UNK04_02210468
+_021D9C00: .word UNK04_0220BFD4
+_021D9C04: .word 0x000013F4
+_021D9C08: .word 0x00001008
+_021D9C0C: .word UNK04_02210464
+_021D9C10: .word 0x00004E84
+_021D9C14: .word 0x000011CC
+_021D9C18: .word UNK04_02210460
+ arm_func_end MOD04_021D9ACC
+
+ arm_func_start MOD04_021D9C1C
+MOD04_021D9C1C: ; 0x021D9C1C
+ ldr r1, _021D9C28 ; =UNK04_0220BEB4
+ str r0, [r1]
+ bx lr
+ .align 2, 0
+_021D9C28: .word UNK04_0220BEB4
+ arm_func_end MOD04_021D9C1C
+
+ .section .data
+
+ .global UNK04_0220BEB4
+UNK04_0220BEB4: ; 0x0220BEB4
+ .word UNK04_0220BED0
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x4E, 0x00, 0x00
+
+ .global UNK04_0220BED0
+UNK04_0220BED0: ; 0x0220BED0
+ .asciz "https://nas.test.nintendowifi.net/ac"
+
+ .balign 4, 0
+ .global UNK04_0220BEF8
+UNK04_0220BEF8: ; 0x0220BEF8
+ .asciz "acctcreate"
+
+ .balign 4, 0
+ .global UNK04_0220BF04
+UNK04_0220BF04: ; 0x0220BF04
+ .asciz "action"
+
+ .balign 4, 0
+ .global UNK04_0220BF0C
+UNK04_0220BF0C: ; 0x0220BF0C
+ .asciz "login"
+
+ .balign 4, 0
+ .global UNK04_0220BF14
+UNK04_0220BF14: ; 0x0220BF14
+ .asciz "gsbrcd"
+
+ .balign 4, 0
+ .global UNK04_0220BF1C
+UNK04_0220BF1C: ; 0x0220BF1C
+ .asciz "Y"
+
+ .balign 4, 0
+ .global UNK04_0220BF20
+UNK04_0220BF20: ; 0x0220BF20
+ .asciz "iswfc"
+
+ .balign 4, 0
+ .global UNK04_0220BF28
+UNK04_0220BF28: ; 0x0220BF28
+ .asciz "ingamesn"
+
+ .balign 4, 0
+ .global UNK04_0220BF34
+UNK04_0220BF34: ; 0x0220BF34
+ .asciz "Date"
+
+ .balign 4, 0
+ .global UNK04_0220BF3C
+UNK04_0220BF3C: ; 0x0220BF3C
+ .asciz "httpresult"
+
+ .balign 4, 0
+ .global UNK04_0220BF48
+UNK04_0220BF48: ; 0x0220BF48
+ .asciz "returncd"
+
+ .balign 4, 0
+ .global UNK04_0220BF54
+UNK04_0220BF54: ; 0x0220BF54
+ .asciz "token"
+
+ .balign 4, 0
+ .global UNK04_0220BF5C
+UNK04_0220BF5C: ; 0x0220BF5C
+ .asciz "locator"
+
+ .balign 4, 0
+ .global UNK04_0220BF64
+UNK04_0220BF64: ; 0x0220BF64
+ .asciz "challenge"
+
+ .balign 4, 0
+ .global UNK04_0220BF70
+UNK04_0220BF70: ; 0x0220BF70
+ .asciz "datetime"
+
+ .balign 4, 0
+ .global UNK04_0220BF7C
+UNK04_0220BF7C: ; 0x0220BF7C
+ .asciz "Set-Cookie"
+
+ .balign 4, 0
+ .global UNK04_0220BF88
+UNK04_0220BF88: ; 0x0220BF88
+ .asciz "ALLOC bmwork"
+
+ .balign 4, 0
+ .global UNK04_0220BF98
+UNK04_0220BF98: ; 0x0220BF98
+ .asciz "FREE bmwork"
+
+ .balign 4, 0
+ .global UNK04_0220BFA4
+UNK04_0220BFA4: ; 0x0220BFA4
+ .asciz "https://nas.nintendowifi.net/ac"
+
+ .balign 4, 0
+ .global UNK04_0220BFC4
+UNK04_0220BFC4: ; 0x0220BFC4
+ .asciz "FREE DWCauth"
+
+ .balign 4, 0
+ .global UNK04_0220BFD4
+UNK04_0220BFD4: ; 0x0220BFD4
+ .asciz "ALLOC DWCauth"
+
+ .balign 4, 0
+ .section .bss
+
+ .global UNK04_02210460
+UNK04_02210460: ; 0x02210460
+ .space 0x4
+
+ .global UNK04_02210464
+UNK04_02210464: ; 0x02210464
+ .space 0x4
+
+ .global UNK04_02210468
+UNK04_02210468: ; 0x02210468
+ .space 0x4
+
+ .global UNK04_0221046C
+UNK04_0221046C: ; 0x0221046C
+ .space 0x14
+
+ .global UNK04_02210480
+UNK04_02210480: ; 0x02210480
+ .space 0x4
+
+ .global UNK04_02210484
+UNK04_02210484: ; 0x02210484
+ .space 0x4
+
+ .global UNK04_02210488
+UNK04_02210488: ; 0x02210488
+ .space 0x4
+
+ .global UNK04_0221048C
+UNK04_0221048C: ; 0x0221048C
+ .space 0x4
diff --git a/arm9/modules/04/asm/mod04_021D9C2C.s b/arm9/modules/04/asm/mod04_021D9C2C.s
new file mode 100644
index 00000000..206df265
--- /dev/null
+++ b/arm9/modules/04/asm/mod04_021D9C2C.s
@@ -0,0 +1,549 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ arm_func_start MOD04_021D9C2C
+MOD04_021D9C2C: ; 0x021D9C2C
+ stmdb sp!, {r4, r5, r6, lr}
+ sub sp, sp, #0x28
+ mov r4, r2
+ mov r6, r0
+ mov r5, r1
+ mov ip, #2
+ ldr r2, _021D9F30 ; =UNK04_0220BFE4
+ add r0, sp, #4
+ mov r1, #0x21
+ mov r3, #1
+ str ip, [sp]
+ bl OS_SNPrintf
+ add r0, sp, #4
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D9F34 ; =UNK04_0220BFF0
+ mov r0, r6
+ add r2, sp, #4
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+ mov r0, r5
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D9F38 ; =UNK04_0220BFF8
+ mov r0, r6
+ mov r2, r5
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+ add r0, r5, #0xe
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D9F3C ; =UNK04_0220C000
+ mov r0, r6
+ add r2, r5, #0xe
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+ add r0, r5, #0x41
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D9F40 ; =UNK04_0220C008
+ mov r0, r6
+ add r2, r5, #0x41
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+ add r0, r5, #0x6f
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D9F44 ; =UNK04_0220C010
+ mov r0, r6
+ add r2, r5, #0x6f
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+ add r0, r5, #0x15
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D9F48 ; =UNK04_0220C018
+ mov r0, r6
+ add r2, r5, #0x15
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+ add r0, r5, #0x1a
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D9F4C ; =UNK04_0220C020
+ mov r0, r6
+ add r2, r5, #0x1a
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+ add r0, r5, #0x1d
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D9F50 ; =UNK04_0220C028
+ mov r0, r6
+ add r2, r5, #0x1d
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+ add r0, r5, #0x1f
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D9F54 ; =UNK04_0220C030
+ mov r0, r6
+ add r2, r5, #0x1f
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+ add r0, r5, #0x2c
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D9F58 ; =UNK04_0220C038
+ mov r0, r6
+ add r2, r5, #0x2c
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+ add r0, r5, #0x2f
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D9F5C ; =UNK04_0220C040
+ mov r0, r6
+ add r2, r5, #0x2f
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+ add r0, r5, #0x34
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D9F60 ; =UNK04_0220C048
+ mov r0, r6
+ add r2, r5, #0x34
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+ add r0, r5, #0x7e
+ bl wcslen
+ mov r3, r0
+ ldr r1, _021D9F64 ; =UNK04_0220C050
+ mov r0, r6
+ add r2, r5, #0x7e
+ mov r3, r3, lsl #1
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+ cmp r4, #1
+ bne _021D9ED0
+ add r0, r5, #0x4e
+ bl strlen
+ mov r3, r0
+ ldr r1, _021D9F68 ; =UNK04_0220C058
+ mov r0, r6
+ add r2, r5, #0x4e
+ bl MOD04_021DAB68
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+_021D9ED0:
+ ldr r2, _021D9F6C ; =UNK04_0220C060
+ mov ip, #2
+ add r0, sp, #4
+ mov r1, #0x21
+ mov r3, #1
+ str ip, [sp]
+ bl OS_SNPrintf
+ ldr r1, _021D9F70 ; =UNK04_0220C078
+ add r2, sp, #4
+ mov r0, r6
+ bl MOD04_021DAC98
+ cmp r0, #0
+ addne sp, sp, #0x28
+ movne r0, #0
+ ldmneia sp!, {r4, r5, r6, pc}
+ ldr r1, _021D9F74 ; =UNK04_0220C084
+ mov r0, r6
+ add r2, r5, #0x15
+ bl MOD04_021DAC98
+ cmp r0, #0
+ moveq r0, #1
+ movne r0, #0
+ add sp, sp, #0x28
+ ldmia sp!, {r4, r5, r6, pc}
+ .align 2, 0
+_021D9F30: .word UNK04_0220BFE4
+_021D9F34: .word UNK04_0220BFF0
+_021D9F38: .word UNK04_0220BFF8
+_021D9F3C: .word UNK04_0220C000
+_021D9F40: .word UNK04_0220C008
+_021D9F44: .word UNK04_0220C010
+_021D9F48: .word UNK04_0220C018
+_021D9F4C: .word UNK04_0220C020
+_021D9F50: .word UNK04_0220C028
+_021D9F54: .word UNK04_0220C030
+_021D9F58: .word UNK04_0220C038
+_021D9F5C: .word UNK04_0220C040
+_021D9F60: .word UNK04_0220C048
+_021D9F64: .word UNK04_0220C050
+_021D9F68: .word UNK04_0220C058
+_021D9F6C: .word UNK04_0220C060
+_021D9F70: .word UNK04_0220C078
+_021D9F74: .word UNK04_0220C084
+ arm_func_end MOD04_021D9C2C
+
+ arm_func_start MOD04_021D9F78
+MOD04_021D9F78: ; 0x021D9F78
+ stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
+ sub sp, sp, #0x8c
+ mov r6, r1
+ mov r1, #0
+ mov r2, #0x94
+ mov r4, r0
+ bl MI_CpuFill8
+ ldr r3, [r6]
+ ldr r5, [r6, #4]
+ mov r0, #0
+ cmp r5, r0
+ cmpeq r3, r0
+ beq _021D9FC4
+ ldr r2, _021DA218 ; =UNK04_0220C094
+ mov r0, r4
+ mov r1, #0xe
+ str r5, [sp]
+ bl OS_SNPrintf
+ b _021D9FE0
+_021D9FC4:
+ ldr r3, [r6, #8]
+ ldr r5, [r6, #0xc]
+ ldr r2, _021DA218 ; =UNK04_0220C094
+ mov r0, r4
+ mov r1, #0xe
+ str r5, [sp]
+ bl OS_SNPrintf
+_021D9FE0:
+ ldrh r3, [r6, #0x10]
+ ldr r2, _021DA21C ; =UNK04_0220C09C
+ add r0, r4, #0xe
+ mov r1, #7
+ bl OS_SNPrintf
+ ldr r0, _021DA220 ; =0x027FFE0C
+ ldrb r0, [r0]
+ cmp r0, #0
+ bne _021DA008
+ bl OS_Terminate
+_021DA008:
+ ldr r0, _021DA220 ; =0x027FFE0C
+ add r1, r4, #0x15
+ mov r2, #4
+ bl MI_CpuCopy8
+ ldr r0, _021DA224 ; =0x027FFE10
+ ldrb r0, [r0]
+ cmp r0, #0
+ bne _021DA02C
+ bl OS_Terminate
+_021DA02C:
+ ldr r0, _021DA224 ; =0x027FFE10
+ add r1, r4, #0x1a
+ mov r2, #2
+ bl MI_CpuCopy8
+ mov r1, #0x30
+ add r0, sp, #0x16
+ strb r1, [r4, #0x1d]
+ bl OS_GetMacAddress
+ ldr r5, _021DA228 ; =UNK04_0220C0A4
+ add r7, sp, #0x16
+ add r6, r4, #0x1f
+ mov r8, #0
+_021DA05C:
+ ldrb r2, [r7]
+ mov r0, r6
+ mov r1, r5
+ bl OS_SPrintf
+ add r8, r8, #1
+ cmp r8, #6
+ add r7, r7, #1
+ add r6, r6, #2
+ blt _021DA05C
+ add r0, sp, #0x38
+ bl OS_GetOwnerInfo
+ ldrb r0, [sp, #0x38]
+ ldr r2, _021DA228 ; =UNK04_0220C0A4
+ mov r1, #3
+ cmp r0, #6
+ movhi r0, #1
+ strhib r0, [sp, #0x38]
+ ldrb r3, [sp, #0x38]
+ add r0, r4, #0x2c
+ bl OS_SNPrintf
+ add r0, sp, #0x3c
+ add r1, r4, #0x7e
+ mov r2, #0x14
+ bl MI_CpuCopy8
+ ldrb r1, [sp, #0x3b]
+ ldr r2, _021DA22C ; =UNK04_0220C0AC
+ add r0, r4, #0x2f
+ str r1, [sp]
+ ldrb r3, [sp, #0x3a]
+ mov r1, #5
+ bl OS_SNPrintf
+ add r0, sp, #0x1c
+ bl RTC_GetDate
+ cmp r0, #0
+ bne _021DA0F8
+ add r0, sp, #0x2c
+ bl RTC_GetTime
+ cmp r0, #0
+ beq _021DA104
+_021DA0F8:
+ add sp, sp, #0x8c
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
+_021DA104:
+ ldr r0, [sp, #0x20]
+ ldr r2, _021DA230 ; =UNK04_0220C0B8
+ str r0, [sp]
+ ldr r1, [sp, #0x24]
+ add r0, r4, #0x34
+ str r1, [sp, #4]
+ ldr r3, [sp, #0x2c]
+ mov r1, #0xd
+ str r3, [sp, #8]
+ ldr r3, [sp, #0x30]
+ str r3, [sp, #0xc]
+ ldr r3, [sp, #0x34]
+ str r3, [sp, #0x10]
+ ldr r3, [sp, #0x1c]
+ bl OS_SNPrintf
+ bl OS_DisableInterrupts
+ mov sb, r0
+ bl WCM_GetApMacAddress
+ mov r8, r0
+ mov r1, #6
+ bl DC_InvalidateRange
+ cmp r8, #0
+ bne _021DA174
+ mov r0, sb
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x8c
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
+_021DA174:
+ add r7, r4, #0x41
+ mov r6, #0
+ ldr r5, _021DA228 ; =UNK04_0220C0A4
+_021DA180:
+ ldrb r2, [r8, r6]
+ mov r0, r7
+ mov r1, r5
+ bl OS_SPrintf
+ add r6, r6, #1
+ cmp r6, #6
+ add r7, r7, #2
+ blt _021DA180
+ bl MOD04_021EBAB8
+ mov r3, r0
+ ldr r2, _021DA234 ; =UNK04_0220C0D4
+ add r0, r4, #0x6f
+ mov r1, #0xe
+ bl OS_SNPrintf
+ add r0, sp, #0x14
+ bl WCM_GetApEssid
+ mov r5, r0
+ mov r1, #0x20
+ bl DC_InvalidateRange
+ cmp r5, #0
+ bne _021DA1E8
+ mov r0, sb
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x8c
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
+_021DA1E8:
+ mov r0, r5
+ add r1, r4, #0x72
+ bl MOD04_021EE5F4
+ mov r0, r5
+ add r1, r4, #0x4e
+ mov r2, #0x20
+ bl MI_CpuCopy8
+ mov r0, sb
+ bl OS_RestoreInterrupts
+ mov r0, #1
+ add sp, sp, #0x8c
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
+ .align 2, 0
+_021DA218: .word UNK04_0220C094
+_021DA21C: .word UNK04_0220C09C
+_021DA220: .word 0x027FFE0C
+_021DA224: .word 0x027FFE10
+_021DA228: .word UNK04_0220C0A4
+_021DA22C: .word UNK04_0220C0AC
+_021DA230: .word UNK04_0220C0B8
+_021DA234: .word UNK04_0220C0D4
+ arm_func_end MOD04_021D9F78
+
+ arm_func_start MOD04_021DA238
+MOD04_021DA238: ; 0x021DA238
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #0x18
+ mov r4, r0
+ add r0, sp, #0
+ bl DWCi_BM_GetWiFiInfo
+ add r1, sp, #0
+ mov r0, r4
+ bl MOD04_021D9F78
+ add sp, sp, #0x18
+ ldmia sp!, {r4, pc}
+ arm_func_end MOD04_021DA238
+
+ .section .data
+
+ .global UNK04_0220BFE4
+UNK04_0220BFE4: ; 0x0220BFE4
+ .asciz "%03d%03d"
+
+ .balign 4, 0
+ .global UNK04_0220BFF0
+UNK04_0220BFF0: ; 0x0220BFF0
+ .asciz "sdkver"
+
+ .balign 4, 0
+ .global UNK04_0220BFF8
+UNK04_0220BFF8: ; 0x0220BFF8
+ .asciz "userid"
+
+ .balign 4, 0
+ .global UNK04_0220C000
+UNK04_0220C000: ; 0x0220C000
+ .asciz "passwd"
+
+ .balign 4, 0
+ .global UNK04_0220C008
+UNK04_0220C008: ; 0x0220C008
+ .asciz "bssid"
+
+ .balign 4, 0
+ .global UNK04_0220C010
+UNK04_0220C010: ; 0x0220C010
+ .asciz "apinfo"
+
+ .balign 4, 0
+ .global UNK04_0220C018
+UNK04_0220C018: ; 0x0220C018
+ .asciz "gamecd"
+
+ .balign 4, 0
+ .global UNK04_0220C020
+UNK04_0220C020: ; 0x0220C020
+ .asciz "makercd"
+
+ .balign 4, 0
+ .global UNK04_0220C028
+UNK04_0220C028: ; 0x0220C028
+ .asciz "unitcd"
+
+ .balign 4, 0
+ .global UNK04_0220C030
+UNK04_0220C030: ; 0x0220C030
+ .asciz "macadr"
+
+ .balign 4, 0
+ .global UNK04_0220C038
+UNK04_0220C038: ; 0x0220C038
+ .asciz "lang"
+
+ .balign 4, 0
+ .global UNK04_0220C040
+UNK04_0220C040: ; 0x0220C040
+ .asciz "birth"
+
+ .balign 4, 0
+ .global UNK04_0220C048
+UNK04_0220C048: ; 0x0220C048
+ .asciz "devtime"
+
+ .balign 4, 0
+ .global UNK04_0220C050
+UNK04_0220C050: ; 0x0220C050
+ .asciz "devname"
+
+ .balign 4, 0
+ .global UNK04_0220C058
+UNK04_0220C058: ; 0x0220C058
+ .asciz "ssid"
+
+ .balign 4, 0
+ .global UNK04_0220C060
+UNK04_0220C060: ; 0x0220C060
+ .asciz "Nitro WiFi SDK/%d.%d"
+
+ .balign 4, 0
+ .global UNK04_0220C078
+UNK04_0220C078: ; 0x0220C078
+ .asciz "User-Agent"
+
+ .balign 4, 0
+ .global UNK04_0220C084
+UNK04_0220C084: ; 0x0220C084
+ .asciz "HTTP_X_GAMECD"
+
+ .balign 4, 0
+ .global UNK04_0220C094
+UNK04_0220C094: ; 0x0220C094
+ .asciz "%013llu"
+
+ .balign 4, 0
+ .global UNK04_0220C09C
+UNK04_0220C09C: ; 0x0220C09C
+ .asciz "%03u"
+
+ .balign 4, 0
+ .global UNK04_0220C0A4
+UNK04_0220C0A4: ; 0x0220C0A4
+ .asciz "%02x"
+
+ .balign 4, 0
+ .global UNK04_0220C0AC
+UNK04_0220C0AC: ; 0x0220C0AC
+ .asciz "%02x%02x"
+
+ .balign 4, 0
+ .global UNK04_0220C0B8
+UNK04_0220C0B8: ; 0x0220C0B8
+ .asciz "%02d%02d%02d%02d%02d%02d"
+
+ .balign 4, 0
+ .global UNK_0220C0D4
+UNK04_0220C0D4: ; 0x0220C0D4
+ .asciz "%02d:0000000-00"
+
+ .balign 4, 0