summaryrefslogtreecommitdiff
path: root/arm9/asm/WM_mp.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/WM_mp.s')
-rw-r--r--arm9/asm/WM_mp.s320
1 files changed, 320 insertions, 0 deletions
diff --git a/arm9/asm/WM_mp.s b/arm9/asm/WM_mp.s
new file mode 100644
index 00000000..0c2fca76
--- /dev/null
+++ b/arm9/asm/WM_mp.s
@@ -0,0 +1,320 @@
+ .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