diff options
Diffstat (limited to 'arm9/asm/WM_mp.s')
-rw-r--r-- | arm9/asm/WM_mp.s | 320 |
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 |