Files
pokediamond/arm9/asm/WM_ds.s
2020-05-19 23:35:42 +01:00

921 lines
17 KiB
ArmAsm

.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start WmGetSharedDataAddress
WmGetSharedDataAddress: ; 0x020DA00C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r12, #0x1
mov r3, r12, lsl r3
sub r3, r3, #0x1
mov r5, r0
and r0, r1, r3
mov r4, r2
bl MATH_CountPopulation
add r1, r5, #0x800
ldrh r1, [r1, #0x10]
mla r0, r1, r0, r4
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
arm_func_start WM_GetSharedDataAddress
WM_GetSharedDataAddress: ; 0x020DA048
stmdb sp!, {r4,lr}
mov r4, r1
ldrh lr, [r4, #0x2]
cmp r0, #0x0
mov r3, r2
mov r1, #0x1
mov r12, r1, lsl r3
ldrh r1, [r4, #0x0]
moveq r0, #0x0
ldmeqia sp!, {r4,lr}
bxeq lr
cmp r4, #0x0
moveq r0, #0x0
ldmeqia sp!, {r4,lr}
bxeq lr
ands r2, r1, r12
moveq r0, #0x0
ldmeqia sp!, {r4,lr}
bxeq lr
ands r2, lr, r12
moveq r0, #0x0
ldmeqia sp!, {r4,lr}
bxeq lr
add r2, r4, #0x4
bl WmGetSharedDataAddress
ldmia sp!, {r4,lr}
bx lr
arm_func_start WmDataSharingSendDataSet
WmDataSharingSendDataSet:
stmdb sp!, {r4-r10,lr}
sub sp, sp, #0x10
mov r10, r0
mov r9, r1
bl OS_DisableInterrupts
add r1, r10, #0x800
ldrh r1, [r1, #0x8]
mov r7, r0
mov r1, r1, lsl #0x9
ldrh r1, [r10, r1]
cmp r1, #0x0
bne _020DA210
bl WMi_GetMPReadyAIDs
add r1, r10, #0x800
ldrh r6, [r1, #0x8]
mov r5, r0
ldrh r1, [r1, #0x18]
add r0, r6, #0x1
and r0, r0, #0x3
mov r0, r0, lsl #0x10
mov r4, r0, lsr #0x10
cmp r1, #0x1
addeq r0, r4, #0x1
andeq r0, r0, #0x3
moveq r0, r0, lsl #0x10
moveq r8, r0, lsr #0x10
movne r8, r4
add r1, r10, r8, lsl #0x9
mov r0, #0x0
mov r2, #0x200
bl MIi_CpuClear16
add r0, r10, #0x800
ldrh r3, [r0, #0xe]
orr r2, r5, #0x1
mov r1, r8, lsl #0x9
and r2, r3, r2
strh r2, [r10, r1]
strh r4, [r0, #0x8]
ldrh r0, [r0, #0xe]
mov r1, r6, lsl #0x9
cmp r9, #0x1
strh r0, [r10, r1]
ldreqh r0, [r10, r1]
biceq r0, r0, #0x1
streqh r0, [r10, r1]
mov r0, r7
bl OS_RestoreInterrupts
add r3, r10, #0x800
ldrh r1, [r3, #0xe]
mov r4, #0x1
ldr r0, _020DA220 ; =WmDataSharingSetDataCallback
and r1, r1, r5
mov r1, r1, lsl #0x10
mov r1, r1, lsr #0x10
str r1, [sp, #0x0]
ldrh r5, [r3, #0x16]
mov r1, r10
add r2, r10, r6, lsl #0x9
str r5, [sp, #0x4]
str r4, [sp, #0x8]
ldrh r3, [r3, #0x14]
bl WM_SetMPDataToPortEx
cmp r0, #0x7
bne _020DA1E4
add r0, r10, r6, lsl #0x1
ldr r1, _020DA224 ; =0x0000FFFF
add r0, r0, #0x800
strh r1, [r0, #0x0]
add r0, r10, #0x800
ldrh r1, [r0, #0xa]
add sp, sp, #0x10
add r1, r1, #0x1
and r1, r1, #0x3
strh r1, [r0, #0xa]
ldmia sp!, {r4-r10,lr}
bx lr
_020DA1E4:
cmp r0, #0x0
addeq sp, sp, #0x10
ldmeqia sp!, {r4-r10,lr}
bxeq lr
cmp r0, #0x2
addne r0, r10, #0x800
movne r1, #0x5
strneh r1, [r0, #0x1c]
add sp, sp, #0x10
ldmia sp!, {r4-r10,lr}
bx lr
_020DA210:
bl OS_RestoreInterrupts
add sp, sp, #0x10
ldmia sp!, {r4-r10,lr}
bx lr
.balign 4
_020DA220: .word WmDataSharingSetDataCallback
_020DA224: .word 0x0000FFFF
arm_func_start WmDataSharingReceiveData
WmDataSharingReceiveData: ; 0x020DA228
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
mov r3, r1
mov r0, #0x1
mov r0, r0, lsl r3
add r12, r7, #0x800
mov r0, r0, lsl #0x10
ldrh r1, [r12, #0xe]
mov r5, r0, lsr #0x10
mov r6, r2
ands r0, r1, r5
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r7,lr}
bxeq lr
ldrh r4, [r12, #0x8]
mov r0, r4, lsl #0x9
ldrh r0, [r7, r0]
ands r0, r5, r0
bne _020DA2B4
ldrh r0, [r12, #0x18]
cmp r0, #0x1
addne sp, sp, #0x4
ldmneia sp!, {r4-r7,lr}
bxne lr
add r0, r4, #0x1
and r0, r0, #0x3
mov r0, r0, lsl #0x10
mov r4, r0, lsr #0x10
mov r0, r4, lsl #0x9
ldrh r0, [r7, r0]
ands r0, r5, r0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r7,lr}
bxeq lr
_020DA2B4:
add r2, r7, r4, lsl #0x9
mov r0, r7
add r2, r2, #0x4
bl WmGetSharedDataAddress
mov r1, r0
cmp r6, #0x0
beq _020DA2E4
add r0, r7, #0x800
ldrh r2, [r0, #0x10]
mov r0, r6
bl MIi_CpuCopy16
b _020DA2F4
_020DA2E4:
add r0, r7, #0x800
ldrh r2, [r0, #0x10]
mov r0, #0x0
bl MIi_CpuClear16
_020DA2F4:
bl OS_DisableInterrupts
mov r4, r4, lsl #0x9
ldrh r3, [r7, r4]
mvn r1, r5
add r2, r7, #0x2
and r1, r3, r1
strh r1, [r7, r4]
ldrh r1, [r2, r4]
orr r1, r1, r5
strh r1, [r2, r4]
bl OS_RestoreInterrupts
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
arm_func_start WmDataSharingReceiveCallback_Child
WmDataSharingReceiveCallback_Child: ; 0x020DA32C
stmdb sp!, {r4-r8,lr}
mov r8, r0
ldr r7, [r8, #0x1c]
cmp r7, #0x0
ldmeqia sp!, {r4-r8,lr}
bxeq lr
ldrh r0, [r8, #0x2]
cmp r0, #0x0
bne _020DA458
ldrh r0, [r8, #0x4]
cmp r0, #0x15
bgt _020DA394
cmp r0, #0x15
bge _020DA3C4
cmp r0, #0x9
ldmgtia sp!, {r4-r8,lr}
bxgt lr
cmp r0, #0x7
ldmltia sp!, {r4-r8,lr}
bxlt lr
cmp r0, #0x7
ldmeqia sp!, {r4-r8,lr}
bxeq lr
cmp r0, #0x9
ldmia sp!, {r4-r8,lr}
bx lr
_020DA394:
cmp r0, #0x1a
ldmgtia sp!, {r4-r8,lr}
bxgt lr
cmp r0, #0x19
ldmltia sp!, {r4-r8,lr}
bxlt lr
cmp r0, #0x19
ldmeqia sp!, {r4-r8,lr}
bxeq lr
cmp r0, #0x1a
ldmia sp!, {r4-r8,lr}
bx lr
_020DA3C4:
ldr r4, [r8, #0xc]
ldrh r6, [r8, #0x10]
ldrh r5, [r4, #0x0]
bl WM_GetAID
add r1, r7, #0x800
ldrh r1, [r1, #0x14]
cmp r6, r1
beq _020DA3EC
cmp r6, #0x200
movhi r6, #0x200
_020DA3EC:
cmp r6, #0x4
ldmccia sp!, {r4-r8,lr}
bxcc lr
mov r1, #0x1
mov r0, r1, lsl r0
ands r0, r5, r0
ldmeqia sp!, {r4-r8,lr}
bxeq lr
add r0, r7, #0x800
ldrh r1, [r0, #0x8]
mov r0, r4
mov r2, r6
add r1, r7, r1, lsl #0x9
bl MIi_CpuCopy16
add r1, r7, #0x800
ldrh r0, [r1, #0x8]
ldrh r2, [r8, #0x1a]
add r0, r7, r0, lsl #0x1
mov r2, r2, asr #0x1
add r0, r0, #0x800
strh r2, [r0, #0x0]
ldrh r0, [r1, #0x8]
add r0, r0, #0x1
and r0, r0, #0x3
strh r0, [r1, #0x8]
ldmia sp!, {r4-r8,lr}
bx lr
_020DA458:
add r0, r7, #0x800
mov r1, #0x5
strh r1, [r0, #0x1c]
ldmia sp!, {r4-r8,lr}
bx lr
arm_func_start WmDataSharingReceiveCallback_Parent
WmDataSharingReceiveCallback_Parent: ; 0x020DA46C
stmdb sp!, {r4-r6,lr}
ldr r4, [r0, #0x1c]
cmp r4, #0x0
ldmeqia sp!, {r4-r6,lr}
bxeq lr
ldrh r1, [r0, #0x2]
cmp r1, #0x0
bne _020DA5C4
ldrh r1, [r0, #0x4]
cmp r1, #0x15
bgt _020DA4D0
cmp r1, #0x15
bge _020DA504
cmp r1, #0x9
ldmgtia sp!, {r4-r6,lr}
bxgt lr
cmp r1, #0x7
ldmltia sp!, {r4-r6,lr}
bxlt lr
cmp r1, #0x7
beq _020DA528
cmp r1, #0x9
beq _020DA53C
ldmia sp!, {r4-r6,lr}
bx lr
_020DA4D0:
cmp r1, #0x1a
ldmgtia sp!, {r4-r6,lr}
bxgt lr
cmp r1, #0x19
ldmltia sp!, {r4-r6,lr}
bxlt lr
cmp r1, #0x19
ldmeqia sp!, {r4-r6,lr}
bxeq lr
cmp r1, #0x1a
beq _020DA53C
ldmia sp!, {r4-r6,lr}
bx lr
_020DA504:
ldrh r1, [r0, #0x12]
ldr r2, [r0, #0xc]
mov r0, r4
bl WmDataSharingReceiveData
mov r0, r4
mov r1, #0x0
bl WmDataSharingSendDataSet
ldmia sp!, {r4-r6,lr}
bx lr
_020DA528:
mov r0, r4
mov r1, #0x0
bl WmDataSharingSendDataSet
ldmia sp!, {r4-r6,lr}
bx lr
_020DA53C:
ldrh r5, [r0, #0x12]
mov r6, #0x1
bl OS_DisableInterrupts
add r1, r4, #0x800
ldrh lr, [r1, #0x8]
mvn r12, r6, lsl r5
mov r3, lr, lsl #0x9
ldrh r2, [r4, r3]
and r2, r2, r12
strh r2, [r4, r3]
ldrh r1, [r1, #0x18]
cmp r1, #0x1
bne _020DA58C
add r1, lr, #0x1
and r1, r1, #0x3
mov r1, r1, lsl #0x10
mov r2, r1, lsr #0x7
ldrh r1, [r4, r2]
and r1, r1, r12
strh r1, [r4, r2]
_020DA58C:
bl OS_RestoreInterrupts
mov r0, r4
mov r1, #0x0
bl WmDataSharingSendDataSet
add r0, r4, #0x800
ldrh r0, [r0, #0x18]
cmp r0, #0x1
ldmneia sp!, {r4-r6,lr}
bxne lr
mov r0, r4
mov r1, #0x0
bl WmDataSharingSendDataSet
ldmia sp!, {r4-r6,lr}
bx lr
_020DA5C4:
add r0, r4, #0x800
mov r1, #0x5
strh r1, [r0, #0x1c]
ldmia sp!, {r4-r6,lr}
bx lr
arm_func_start WmDataSharingSetDataCallback
WmDataSharingSetDataCallback: ; 0x020DA5D8
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
bl WMi_GetSystemWork
ldrh r2, [r5, #0xa]
ldr r1, _020DA6E4 ; =WmDataSharingReceiveCallback_Parent
add r0, r0, r2, lsl #0x2
ldr r2, [r0, #0xcc]
ldr r4, [r0, #0x10c]
cmp r2, r1
beq _020DA618
ldr r0, _020DA6E8 ; =WmDataSharingReceiveCallback_Child
cmp r2, r0
addne sp, sp, #0x4
ldmneia sp!, {r4-r5,lr}
bxne lr
_020DA618:
cmp r4, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,lr}
bxeq lr
ldr r0, [r5, #0x20]
cmp r4, r0
addne sp, sp, #0x4
ldmneia sp!, {r4-r5,lr}
bxne lr
bl WM_GetAID
ldrh r1, [r5, #0x2]
cmp r1, #0x0
bne _020DA694
cmp r0, #0x0
addne sp, sp, #0x4
ldmneia sp!, {r4-r5,lr}
bxne lr
add r1, r4, #0x800
ldrh r0, [r1, #0xa]
ldrh r2, [r5, #0x1a]
add sp, sp, #0x4
add r0, r4, r0, lsl #0x1
mov r2, r2, asr #0x1
add r0, r0, #0x800
strh r2, [r0, #0x0]
ldrh r0, [r1, #0xa]
add r0, r0, #0x1
and r0, r0, #0x3
strh r0, [r1, #0xa]
ldmia sp!, {r4-r5,lr}
bx lr
_020DA694:
cmp r1, #0xa
bne _020DA6CC
cmp r0, #0x0
addne r0, r4, #0x800
ldrneh r1, [r0, #0xa]
add sp, sp, #0x4
addne r1, r1, #0x3
andne r1, r1, #0x3
strneh r1, [r0, #0xa]
add r0, r4, #0x800
mov r1, #0x4
strh r1, [r0, #0x1c]
ldmia sp!, {r4-r5,lr}
bx lr
_020DA6CC:
add r0, r4, #0x800
mov r1, #0x5
strh r1, [r0, #0x1c]
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020DA6E4: .word WmDataSharingReceiveCallback_Parent
_020DA6E8: .word WmDataSharingReceiveCallback_Child
arm_func_start WM_StepDataSharing
WM_StepDataSharing: ; 0x020DA6EC
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0xc
mov r10, r0
mov r9, r1
mov r8, r2
mov r0, #0x2
mov r1, #0x9
mov r2, #0xa
bl WMi_CheckStateEx
_020DA710: ; 0x020DA710
cmp r0, #0x0
addne sp, sp, #0xc
ldmneia sp!, {r4-r11,lr}
bxne lr
cmp r10, #0x0
addeq sp, sp, #0xc
moveq r0, #0x6
ldmeqia sp!, {r4-r11,lr}
bxeq lr
cmp r9, #0x0
addeq sp, sp, #0xc
moveq r0, #0x6
ldmeqia sp!, {r4-r11,lr}
bxeq lr
cmp r8, #0x0
addeq sp, sp, #0xc
moveq r0, #0x6
ldmeqia sp!, {r4-r11,lr}
bxeq lr
bl WM_GetAID
movs r4, r0
bne _020DA770
bl WMi_GetMPReadyAIDs
mov r7, r0
_020DA770:
add r0, r10, #0x800
ldrh r0, [r0, #0x1c]
cmp r0, #0x5
addeq sp, sp, #0xc
moveq r0, #0x1
ldmeqia sp!, {r4-r11,lr}
bxeq lr
cmp r0, #0x1
beq _020DA7A8
cmp r0, #0x4
addne sp, sp, #0xc
movne r0, #0x3
ldmneia sp!, {r4-r11,lr}
bxne lr
_020DA7A8:
cmp r4, #0x0
mov r4, #0x5
bne _020DA94C
mov r6, #0x0
mov r11, r6
cmp r0, #0x4
bne _020DA870
add r1, r10, #0x800
mov r3, #0x1
strh r3, [r1, #0x1c]
ldrh r5, [r1, #0xe]
ldrh r2, [r1, #0x8]
ldr r0, _020DAA64 ; =WmDataSharingSetDataCallback
and r5, r5, r7
mov r5, r5, lsl #0x10
mov r5, r5, lsr #0x10
str r5, [sp, #0x0]
ldrh r5, [r1, #0x16]
add r2, r2, #0x3
and r2, r2, #0x3
str r5, [sp, #0x4]
str r3, [sp, #0x8]
mov r2, r2, lsl #0x10
mov r5, r2, lsr #0x10
ldrh r3, [r1, #0x14]
mov r1, r10
add r2, r10, r5, lsl #0x9
bl WM_SetMPDataToPortEx
cmp r0, #0x7
bne _020DA848
add r0, r10, r5, lsl #0x1
ldr r1, _020DAA68 ; =0x0000FFFF
add r0, r0, #0x800
strh r1, [r0, #0x0]
add r0, r10, #0x800
ldrh r1, [r0, #0xa]
add r1, r1, #0x1
and r1, r1, #0x3
strh r1, [r0, #0xa]
b _020DA870
_020DA848:
cmp r0, #0x0
beq _020DA870
cmp r0, #0x2
addne r0, r10, #0x800
movne r1, r4
strneh r1, [r0, #0x1c]
addne sp, sp, #0xc
movne r0, #0x1
ldmneia sp!, {r4-r11,lr}
bxne lr
_020DA870:
add r0, r10, #0x800
ldrh r2, [r0, #0xc]
ldrh r1, [r0, #0xa]
cmp r2, r1
beq _020DA908
mov r4, r2, lsl #0x9
ldrh r3, [r10, r4]
mov r1, r8
mov r2, #0x200
orr r3, r3, #0x1
strh r3, [r10, r4]
ldrh r0, [r0, #0xc]
add r0, r10, r0, lsl #0x9
bl MIi_CpuCopy16
add r1, r10, #0x800
ldrh r0, [r1, #0xc]
mov r6, #0x1
mov r4, #0x0
add r0, r10, r0, lsl #0x1
add r0, r0, #0x800
ldrh r0, [r0, #0x0]
strh r0, [r1, #0x1a]
ldrh r0, [r1, #0xc]
add r0, r0, #0x1
and r0, r0, #0x3
strh r0, [r1, #0xc]
ldrh r0, [r1, #0x18]
cmp r0, #0x0
bne _020DA904
cmp r7, #0x0
beq _020DA904
ldrh r0, [r1, #0x8]
mov r0, r0, lsl #0x9
ldrh r0, [r10, r0]
cmp r0, #0x1
moveq r11, r6
beq _020DA908
_020DA904:
mov r11, #0x0
_020DA908:
mov r0, r10
mov r1, #0x0
bl WmDataSharingSendDataSet
_020DA914: ; 0x020DA914
cmp r6, #0x0
beq _020DAA54
mov r0, r10
mov r2, r9
mov r1, #0x0
bl WmDataSharingReceiveData
add r0, r10, #0x800
ldrh r0, [r0, #0x18]
cmp r0, #0x0
bne _020DAA54
mov r0, r10
mov r1, r11
bl WmDataSharingSendDataSet
b _020DAA54
_020DA94C:
cmp r0, #0x4
mov r0, #0x0
addeq r1, r10, #0x800
moveq r0, #0x1
streqh r0, [r1, #0x1c]
beq _020DA9D0
add r1, r10, #0x800
ldrh r2, [r1, #0xc]
ldrh r1, [r1, #0x8]
cmp r2, r1
beq _020DA9D0
mov r2, r2, lsl #0x9
ldrh r1, [r10, r2]
ands r3, r1, #0x1
orreq r1, r1, #0x1
streqh r1, [r10, r2]
beq _020DA9D0
mov r1, r8
add r0, r10, r2
mov r2, #0x200
bl MIi_CpuCopy16
add r2, r10, #0x800
ldrh r1, [r2, #0xc]
mov r0, #0x1
mov r4, #0x0
add r1, r10, r1, lsl #0x1
add r1, r1, #0x800
ldrh r1, [r1, #0x0]
strh r1, [r2, #0x1a]
ldrh r1, [r2, #0xc]
add r1, r1, #0x1
and r1, r1, #0x3
strh r1, [r2, #0xc]
_020DA9D0:
cmp r0, #0x0
beq _020DAA54
add r0, r10, #0x800
ldrh r1, [r0, #0xa]
ldrh r2, [r0, #0x10]
mov r0, r9
add r1, r10, r1, lsl #0x9
add r7, r1, #0x20
mov r1, r7
bl MIi_CpuCopy16
add r3, r10, #0x800
ldrh r1, [r3, #0xe]
mov r5, #0x1
ldr r0, _020DAA64 ; =WmDataSharingSetDataCallback
str r1, [sp, #0x0]
ldrh r6, [r3, #0x16]
mov r1, r10
mov r2, r7
str r6, [sp, #0x4]
str r5, [sp, #0x8]
ldrh r3, [r3, #0x10]
bl WM_SetMPDataToPortEx
add r1, r10, #0x800
ldrh r2, [r1, #0xa]
cmp r0, #0x2
add r2, r2, #0x1
and r2, r2, #0x3
strh r2, [r1, #0xa]
beq _020DAA54
cmp r0, #0x0
movne r0, #0x5
strneh r0, [r1, #0x1c]
movne r4, r5
_020DAA54:
mov r0, r4
add sp, sp, #0xc
ldmia sp!, {r4-r11,lr}
bx lr
.balign 4
_020DAA64: .word WmDataSharingSetDataCallback
_020DAA68: .word 0x0000FFFF
arm_func_start WM_EndDataSharing
WM_EndDataSharing: ; 0x020DAA6C
stmdb sp!, {r4,lr}
movs r4, r0
moveq r0, #0x6
ldmeqia sp!, {r4,lr}
bxeq lr
add r0, r4, #0x800
ldrh r1, [r0, #0xe]
cmp r1, #0x0
moveq r0, #0x3
ldmeqia sp!, {r4,lr}
bxeq lr
ldrh r0, [r0, #0x16]
mov r1, #0x0
mov r2, r1
bl WM_SetPortCallback
add r1, r4, #0x800
mov r0, #0x0
strh r0, [r1, #0xe]
strh r0, [r1, #0x1c]
ldmia sp!, {r4,lr}
bx lr
arm_func_start WM_StartDataSharing
WM_StartDataSharing: ; 0x020DAAC0
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0xc
mov r10, r0
mov r7, r1
mov r6, r2
mov r0, #0x2
mov r1, #0x9
mov r2, #0xa
mov r5, r3
mov r9, #0x1
bl WMi_CheckStateEx
_020DAAEC: ; 0x020DAAEC
cmp r0, #0x0
addne sp, sp, #0xc
ldmneia sp!, {r4-r11,lr}
bxne lr
cmp r10, #0x0
addeq sp, sp, #0xc
moveq r0, #0x6
ldmeqia sp!, {r4-r11,lr}
bxeq lr
cmp r7, #0x10
addcs sp, sp, #0xc
movcs r0, #0x6
ldmcsia sp!, {r4-r11,lr}
bxcs lr
cmp r6, #0x0
addeq sp, sp, #0xc
moveq r0, #0x6
ldmeqia sp!, {r4-r11,lr}
bxeq lr
bl WM_GetAID
movs r4, r0
bne _020DAB4C
bl WMi_GetMPReadyAIDs
mov r9, r0
_020DAB4C:
mov r1, r10
mov r0, #0x0
mov r2, #0x820
bl MIi_CpuClearFast
add r0, r10, #0x800
mov r2, #0x0
strh r2, [r0, #0x8]
strh r2, [r0, #0xa]
strh r2, [r0, #0xc]
strh r5, [r0, #0x10]
strh r7, [r0, #0x16]
strh r2, [r0, #0xe]
mov r0, #0x1
ldr r1, [sp, #0x30]
orr r0, r6, r0, lsl r4
cmp r1, #0x0
mov r0, r0, lsl #0x10
movne r2, #0x1
add r1, r10, #0x800
strh r2, [r1, #0x18]
mov r0, r0, lsr #0x10
strh r0, [r1, #0xe]
bl MATH_CountPopulation
add r3, r10, #0x800
mul r1, r5, r0
strh r0, [r3, #0x12]
strh r1, [r3, #0x14]
ldrh r0, [r3, #0x14]
cmp r0, #0x1fc
movhi r0, #0x0
strhih r0, [r3, #0xe]
addhi sp, sp, #0xc
movhi r0, #0x6
ldmhiia sp!, {r4-r11,lr}
bxhi lr
add r0, r0, #0x4
strh r0, [r3, #0x14]
mov r0, #0x1
strh r0, [r3, #0x1c]
cmp r4, #0x0
bne _020DAD04
orr r2, r9, #0x1
mov r4, #0x0
_020DABF8:
ldrh r1, [r3, #0xe]
mov r0, r4, lsl #0x9
add r4, r4, #0x1
and r1, r1, r2
strh r1, [r10, r0]
cmp r4, #0x4
blt _020DABF8
ldr r1, _020DAD2C ; =WmDataSharingReceiveCallback_Parent
mov r0, r7
mov r2, r10
bl WM_SetPortCallback
mov r8, r10
mov r7, #0x0
mov r4, #0x2
mov r6, #0x1
ldr fp, _020DAD30 ; =WmDataSharingSetDataCallback
ldr r5, _020DAD34 ; =0x0000FFFF
b _020DACE4
_020DAC40:
add r12, r10, #0x800
ldrh r2, [r12, #0x8]
mov r0, r11
mov r1, r10
add r2, r2, #0x1
and r2, r2, #0x3
strh r2, [r12, #0x8]
ldrh r3, [r12, #0xe]
mov r2, r8
and r3, r3, r9
mov r3, r3, lsl #0x10
mov r3, r3, lsr #0x10
str r3, [sp, #0x0]
ldrh r3, [r12, #0x16]
str r3, [sp, #0x4]
str r6, [sp, #0x8]
ldrh r3, [r12, #0x14]
bl WM_SetMPDataToPortEx
cmp r0, #0x7
bne _020DACB4
add r0, r10, r7, lsl #0x1
add r0, r0, #0x800
strh r5, [r0, #0x0]
add r0, r10, #0x800
ldrh r1, [r0, #0xa]
add r1, r1, #0x1
and r1, r1, #0x3
strh r1, [r0, #0xa]
b _020DACDC
_020DACB4:
cmp r0, #0x0
beq _020DACDC
cmp r0, #0x2
addne r0, r10, #0x800
movne r1, #0x5
strneh r1, [r0, #0x1c]
addne sp, sp, #0xc
movne r0, #0x1
ldmneia sp!, {r4-r11,lr}
bxne lr
_020DACDC:
add r8, r8, #0x200
add r7, r7, #0x1
_020DACE4:
add r0, r10, #0x800
ldrh r0, [r0, #0x18]
cmp r0, #0x1
movne r0, r6
moveq r0, r4
cmp r7, r0
blt _020DAC40
b _020DAD1C
_020DAD04:
ldr r1, _020DAD38 ; =WmDataSharingReceiveCallback_Child
mov r4, #0x3
mov r0, r7
mov r2, r10
strh r4, [r3, #0xa]
bl WM_SetPortCallback
_020DAD1C:
mov r0, #0x0
add sp, sp, #0xc
ldmia sp!, {r4-r11,lr}
bx lr
.balign 4
_020DAD2C: .word WmDataSharingReceiveCallback_Parent
_020DAD30: .word WmDataSharingSetDataCallback
_020DAD34: .word 0x0000FFFF
_020DAD38: .word WmDataSharingReceiveCallback_Child