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

321 lines
5.6 KiB
ArmAsm

.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start WM_EndMP
WM_EndMP: ; 0x020D9960
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
bl WMi_GetSystemWork
mov r4, r0
mov r0, #0x2
mov r1, #0x9
mov r2, #0xa
bl WMi_CheckStateEx
_020D9984: ; 0x020D9984
cmp r0, #0x0
addne sp, sp, #0x4
ldmneia sp!, {r4-r5,lr}
bxne lr
ldr r0, [r4, #0x4]
mov r1, #0x4
add r0, r0, #0xc
bl DC_InvalidateRange
ldr r0, [r4, #0x4]
ldr r0, [r0, #0xc]
cmp r0, #0x0
addeq sp, sp, #0x4
moveq r0, #0x3
ldmeqia sp!, {r4-r5,lr}
bxeq lr
mov r1, r5
mov r0, #0x10
bl WMi_SetCallbackTable
mov r0, #0x10
mov r1, #0x0
bl WMi_SendCommand
_020D99D8: ; 0x020D99D8
cmp r0, #0x0
moveq r0, #0x2
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
arm_func_start WM_SetMPDataToPortEx
WM_SetMPDataToPortEx: ; 0x020D99EC
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x14
mov r9, r0
mov r8, r1
mov r7, r2
mov r6, r3
mov r5, #0x1
bl WMi_GetSystemWork
ldr r4, [r0, #0x4]
mov r0, #0x2
mov r1, #0x9
mov r2, #0xa
bl WMi_CheckStateEx
_020D9A20: ; 0x020D9A20
cmp r0, #0x0
addne sp, sp, #0x14
ldmneia sp!, {r4-r9,lr}
bxne lr
add r0, r4, #0x3c
mov r1, #0x2
bl DC_InvalidateRange
add r0, r4, #0x188
mov r1, #0x2
bl DC_InvalidateRange
add r0, r4, #0x100
ldrh r0, [r0, #0x88]
cmp r0, #0x0
bne _020D9A7C
ldr r0, _020D9B44 ; =0x00000182
mov r1, #0x2
add r0, r4, r0
bl DC_InvalidateRange
add r2, r4, #0x100
add r0, r4, #0x86
mov r1, #0x2
ldrh r5, [r2, #0x82]
bl DC_InvalidateRange
_020D9A7C:
cmp r7, #0x0
addeq sp, sp, #0x14
moveq r0, #0x6
ldmeqia sp!, {r4-r9,lr}
bxeq lr
cmp r5, #0x0
addeq sp, sp, #0x14
moveq r0, #0x7
ldmeqia sp!, {r4-r9,lr}
bxeq lr
add r0, r4, #0x7c
mov r1, #0x2
bl DC_InvalidateRange
ldr r0, [r4, #0x7c]
cmp r7, r0
addeq sp, sp, #0x14
moveq r0, #0x6
ldmeqia sp!, {r4-r9,lr}
bxeq lr
cmp r6, #0x200
addhi sp, sp, #0x14
movhi r0, #0x6
ldmhiia sp!, {r4-r9,lr}
bxhi lr
cmp r6, #0x0
addeq sp, sp, #0x14
moveq r0, #0x6
ldmeqia sp!, {r4-r9,lr}
bxeq lr
mov r0, r7
mov r1, r6
bl DC_StoreRange
ldrh r2, [sp, #0x30]
ldrh r1, [sp, #0x34]
ldrh r0, [sp, #0x38]
str r2, [sp, #0x0]
str r1, [sp, #0x4]
str r0, [sp, #0x8]
str r9, [sp, #0xc]
mov r2, r7
mov r3, r6
mov r0, #0xf
mov r1, #0x7
str r8, [sp, #0x10]
bl WMi_SendCommand
_020D9B30: ; 0x020D9B30
cmp r0, #0x0
moveq r0, #0x2
add sp, sp, #0x14
ldmia sp!, {r4-r9,lr}
bx lr
.balign 4
_020D9B44: .word 0x00000182
arm_func_start WM_StartMP
WM_StartMP: ; 0x020D9B48
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x24
mov r6, r1
mov r7, r0
mov r5, r2
add r1, sp, #0x8
mov r0, #0x0
mov r2, #0x1c
mov r4, r3
bl MIi_CpuClear32
ldrh r12, [sp, #0x3c]
mov r0, #0x3
str r0, [sp, #0x8]
ldrh lr, [sp, #0x38]
strh r12, [sp, #0xc]
strh r12, [sp, #0xe]
mov r0, r7
mov r1, r6
mov r2, r5
mov r3, r4
add r12, sp, #0x8
str lr, [sp, #0x0]
str r12, [sp, #0x4]
bl WMi_StartMP
add sp, sp, #0x24
ldmia sp!, {r4-r7,lr}
bx lr
arm_func_start WM_StartMPEx
WM_StartMPEx: ; 0x020D9BB4
stmdb sp!, {r4-r8,lr}
sub sp, sp, #0x28
mov r6, r1
mov r7, r0
mov r5, r2
add r1, sp, #0x8
mov r0, #0x0
mov r2, #0x1c
mov r4, r3
bl MIi_CpuClear32
ldrh lr, [sp, #0x44]
ldr r1, [sp, #0x58]
ldrh r12, [sp, #0x48]
ldr r0, [sp, #0x54]
ldr r8, _020D9C54 ; =0x00001E03
cmp r0, #0x0
ldr r3, [sp, #0x4c]
ldr r2, [sp, #0x50]
strb r1, [sp, #0x22]
strh r12, [sp, #0x1e]
strb r3, [sp, #0x20]
strb r2, [sp, #0x21]
ldrh r1, [sp, #0x40]
str r8, [sp, #0x8]
orrne r0, r8, #0x4
strne r0, [sp, #0x8]
strh lr, [sp, #0xc]
strh lr, [sp, #0xe]
strneh lr, [sp, #0x10]
str r1, [sp, #0x0]
add r12, sp, #0x8
mov r0, r7
mov r1, r6
mov r2, r5
mov r3, r4
str r12, [sp, #0x4]
bl WMi_StartMP
add sp, sp, #0x28
ldmia sp!, {r4-r8,lr}
bx lr
.balign 4
_020D9C54: .word 0x00001E03
arm_func_start WMi_StartMP
WMi_StartMP: ; 0x020D9C58
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x34
mov r9, r0
mov r8, r1
mov r7, r2
mov r6, r3
bl WMi_GetSystemWork
ldr r5, [r0, #0x4]
mov r0, #0x2
mov r1, #0x7
mov r2, #0x8
bl WMi_CheckStateEx
_020D9C88: ; 0x020D9C88
cmp r0, #0x0
addne sp, sp, #0x34
ldmneia sp!, {r4-r9,lr}
bxne lr
add r0, r5, #0x188
mov r1, #0x2
bl DC_InvalidateRange
add r0, r5, #0xc6
mov r1, #0x2
bl DC_InvalidateRange
add r0, r5, #0x100
ldrh r0, [r0, #0x88]
cmp r0, #0x0
beq _020D9CD8
ldrh r0, [r5, #0xc6]
cmp r0, #0x1
addne sp, sp, #0x34
movne r0, #0x3
ldmneia sp!, {r4-r9,lr}
bxne lr
_020D9CD8:
add r0, r5, #0xc
mov r1, #0x4
bl DC_InvalidateRange
ldr r0, [r5, #0xc]
cmp r0, #0x1
addeq sp, sp, #0x34
moveq r0, #0x3
ldmeqia sp!, {r4-r9,lr}
bxeq lr
ands r0, r7, #0x3f
addne sp, sp, #0x34
movne r0, #0x6
ldmneia sp!, {r4-r9,lr}
bxne lr
ldrh r4, [sp, #0x50]
ands r0, r4, #0x1f
addne sp, sp, #0x34
movne r0, #0x6
ldmneia sp!, {r4-r9,lr}
bxne lr
add r0, r5, #0x9c
mov r1, #0x2
bl DC_InvalidateRange
ldrh r0, [r5, #0x9c]
cmp r0, #0x0
bne _020D9D70
bl WM_GetMPReceiveBufferSize
_020D9D44: ; 0x020D9D44
cmp r7, r0
addlt sp, sp, #0x34
movlt r0, #0x6
ldmltia sp!, {r4-r9,lr}
bxlt lr
bl WM_GetMPSendBufferSize
_020D9D5C: ; 0x020D9D5C
cmp r4, r0
addlt sp, sp, #0x34
movlt r0, #0x6
ldmltia sp!, {r4-r9,lr}
bxlt lr
_020D9D70:
mov r1, r9
mov r0, #0xe
bl WMi_SetCallbackTable
add r1, sp, #0x0
mov r0, #0x0
mov r2, #0x30
bl MIi_CpuClear32
ldrh r3, [sp, #0x50]
mov r4, r7, lsr #0x1
mov r5, #0xe
ldr r0, [sp, #0x54]
add r1, sp, #0x14
mov r2, #0x1c
strh r5, [sp, #0x0]
str r8, [sp, #0x4]
str r4, [sp, #0x8]
str r6, [sp, #0xc]
str r3, [sp, #0x10]
bl MIi_CpuCopy32
_020D9DBC: ; 0x020D9DBC
add r0, sp, #0x0
mov r1, #0x30
bl WMi_SendCommandDirect
_020D9DC8: ; 0x020D9DC8
cmp r0, #0x0
moveq r0, #0x2
add sp, sp, #0x34
ldmia sp!, {r4-r9,lr}
bx lr