diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2020-05-01 19:46:30 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-01 19:46:30 -0400 |
commit | 1fd5891305afd443d87652b2bc4a6aa6fb6d8283 (patch) | |
tree | bcf5a83e87cf4104edbf08bef76487ef4aed4613 | |
parent | ce558d0870e8b8ceb626ee8a6f165e8be9869ede (diff) | |
parent | a85a2f1e3e622d2555110c062196f969b1411be2 (diff) |
Merge pull request #54 from red031000/master
split libsnd
-rw-r--r-- | arm9/arm9.lcf | 8 | ||||
-rw-r--r-- | arm9/asm/SND_alarm.s | 77 | ||||
-rw-r--r-- | arm9/asm/SND_bank.s | 328 | ||||
-rw-r--r-- | arm9/asm/SND_command.s | 617 | ||||
-rw-r--r-- | arm9/asm/SND_interface.s | 459 | ||||
-rw-r--r-- | arm9/asm/SND_main.s | 45 | ||||
-rw-r--r-- | arm9/asm/SND_util.s | 39 | ||||
-rw-r--r-- | arm9/asm/SND_work.s | 115 | ||||
-rw-r--r-- | arm9/asm/libsnd.s | 1655 | ||||
-rw-r--r-- | arm9/global.inc | 11 |
10 files changed, 1698 insertions, 1656 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 302a83e6..b595e5f4 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -179,7 +179,13 @@ SECTIONS { MI_uncompress.o (.text) MI_dma_card.o (.text) MI_init.o (.text) - libsnd.o (.text) + SND_interface.o (.text) + SND_main.o (.text) + SND_command.o (.text) + SND_alarm.o (.text) + SND_work.o (.text) + SND_util.o (.text) + SND_bank.o (.text) libpxi.o (.text) libfs.o (.text) libdgt.o (.text) diff --git a/arm9/asm/SND_alarm.s b/arm9/asm/SND_alarm.s new file mode 100644 index 00000000..8f1090b7 --- /dev/null +++ b/arm9/asm/SND_alarm.s @@ -0,0 +1,77 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start SNDi_CallAlarmHandler +SNDi_CallAlarmHandler: ; 0x020CF4B0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, _020CF50C ; =0x021D5300 + and r2, r0, #0xff + mov r1, #0xc + mla r3, r2, r1, r3 + mov r1, r0, asr #0x8 + ldrb r0, [r3, #0x8] + and r1, r1, #0xff + cmp r1, r0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r1, [r3, #0x0] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + ldr r0, [r3, #0x4] + blx r1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CF50C: .word 0x021D5300 + + arm_func_start SNDi_SetAlarmHandler +SNDi_SetAlarmHandler: + mov r3, #0xc + mul r3, r0, r3 + ldr r0, _020CF53C ; =0x021D5300 + str r1, [r0, r3] + add r1, r0, r3 + str r2, [r1, #0x4] + ldrb r0, [r1, #0x8] + add r0, r0, #0x1 + strb r0, [r1, #0x8] + ldrb r0, [r1, #0x8] + bx lr + .balign 4 +_020CF53C: .word 0x021D5300 + + arm_func_start SNDi_IncAlarmId +SNDi_IncAlarmId: ; 0x020CF540 + ldr r2, _020CF55C ; =0x021D5300 + mov r1, #0xc + mla r1, r0, r1, r2 + ldrb r0, [r1, #0x8] + add r0, r0, #0x1 + strb r0, [r1, #0x8] + bx lr + .balign 4 +_020CF55C: .word 0x021D5300 + + arm_func_start SND_AlarmInit +SND_AlarmInit: ; 0x020CF560 + ldr r1, _020CF58C ; =0x021D5300 + mov r2, #0x0 + mov r0, r2 +_020CF56C: + str r0, [r1, #0x0] + str r0, [r1, #0x4] + add r2, r2, #0x1 + strb r0, [r1, #0x8] + cmp r2, #0x8 + add r1, r1, #0xc + blt _020CF56C + bx lr + .balign 4 +_020CF58C: .word 0x021D5300 diff --git a/arm9/asm/SND_bank.s b/arm9/asm/SND_bank.s new file mode 100644 index 00000000..df62e2b6 --- /dev/null +++ b/arm9/asm/SND_bank.s @@ -0,0 +1,328 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start SND_GetWaveDataAddress +SND_GetWaveDataAddress: ; 0x020CF768 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl SNDi_LockMutex + add r0, r5, r4, lsl #0x2 + ldr r4, [r0, #0x3c] + cmp r4, #0x0 + beq _020CF798 + cmp r4, #0x2000000 + addcc r4, r5, r4 + b _020CF79C +_020CF798: + mov r4, #0x0 +_020CF79C: + bl SNDi_UnlockMutex + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start SND_SetWaveDataAddress +SND_SetWaveDataAddress: ; 0x020CF7B0 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl SNDi_LockMutex + add r0, r6, #0x3c + add r2, r6, r5, lsl #0x2 + add r0, r0, r5, lsl #0x2 + mov r1, #0x4 + str r4, [r2, #0x3c] + bl DC_StoreRange + bl SNDi_UnlockMutex + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start SND_GetWaveDataCount +SND_GetWaveDataCount: ; 0x020CF7E8 + ldr r0, [r0, #0x38] + bx lr + + arm_func_start SND_GetNextInstData +SND_GetNextInstData: ; 0x020CF7F0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r4, [r2, #0x0] + ldr r3, [r0, #0x38] + cmp r4, r3 + bhs _020CF9B8 + mov r12, #0x0 +_020CF80C: + add r3, r0, r4, lsl #0x2 + ldr r4, [r3, #0x3c] + strb r4, [r1, #0x0] + ldrb r3, [r1, #0x0] + cmp r3, #0x10 + bgt _020CF850 + cmp r3, #0x10 + bge _020CF8A8 + cmp r3, #0x5 + addls pc, pc, r3, lsl #0x2 + b _020CF998 +_020CF838: + b _020CF998 + b _020CF85C + b _020CF85C + b _020CF85C + b _020CF85C + b _020CF85C +_020CF850: + cmp r3, #0x11 + beq _020CF924 + b _020CF998 +_020CF85C: + mov r3, r4, lsr #0x8 + add r5, r0, r4, lsr #0x8 + ldrh r4, [r0, r3] + ldrh r3, [r5, #0x2] + add sp, sp, #0x4 + mov r0, #0x1 + strh r4, [r1, #0x2] + strh r3, [r1, #0x4] + ldrh r4, [r5, #0x4] + ldrh r3, [r5, #0x6] + strh r4, [r1, #0x6] + strh r3, [r1, #0x8] + ldrh r3, [r5, #0x8] + strh r3, [r1, #0xA] + ldr r1, [r2] + add r1, r1, #0x1 + str r1, [r2] + ldmia sp!, {r4-r5,lr} + bx lr +_020CF8A8: + add r5, r0, r4, lsr #0x8 + b _020CF904 +_020CF8B0: + mov r0, #0xc + mla r12, lr, r0, r5 + ldrh r4, [r12, #0x2] + ldrh r3, [r12, #0x4] + add sp, sp, #0x4 + mov r0, #0x1 + strh r4, [r1, #0x0] + strh r3, [r1, #0x2] + ldrh r4, [r12, #0x6] + ldrh r3, [r12, #0x8] + strh r4, [r1, #0x4] + strh r3, [r1, #0x6] + ldrh r4, [r12, #0xa] + ldrh r3, [r12, #0xc] + strh r4, [r1, #0x8] + strh r3, [r1, #0xa] + ldr r1, [r2, #0x4] + add r1, r1, #0x1 + str r1, [r2, #0x4] + ldmia sp!, {r4-r5,lr} + bx lr +_020CF904: + ldrb r4, [r5, #0x1] + ldrb r3, [r5, #0x0] + ldr lr, [r2, #0x4] + sub r3, r4, r3 + add r3, r3, #0x1 + cmp lr, r3 + blo _020CF8B0 + b _020CF998 +_020CF924: + add r4, r0, r4, lsr #0x8 + b _020CF98C +_020CF92C: + ldrb lr, [r4, r3] + cmp lr, #0x0 + beq _020CF998 + mov r0, #0xc + mla lr, r3, r0, r4 + ldrh r12, [lr, #0x8] + ldrh r3, [lr, #0xa] + add sp, sp, #0x4 + mov r0, #0x1 + strh r12, [r1, #0x0] + strh r3, [r1, #0x2] + ldrh r12, [lr, #0xc] + ldrh r3, [lr, #0xe] + strh r12, [r1, #0x4] + strh r3, [r1, #0x6] + ldrh r12, [lr, #0x10] + ldrh r3, [lr, #0x12] + strh r12, [r1, #0x8] + strh r3, [r1, #0xa] + ldr r1, [r2, #0x4] + add r1, r1, #0x1 + str r1, [r2, #0x4] + ldmia sp!, {r4-r5,lr} + bx lr +_020CF98C: + ldr r3, [r2, #0x4] + cmp r3, #0x8 + blo _020CF92C +_020CF998: + ldr r3, [r2, #0x0] + add r3, r3, #0x1 + str r3, [r2, #0x0] + str r12, [r2, #0x4] + ldr r4, [r2, #0x0] + ldr r3, [r0, #0x38] + cmp r4, r3 + blo _020CF80C +_020CF9B8: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start SND_GetFirstInstDataPos +SND_GetFirstInstDataPos: ; 0x020CF9C8 + sub sp, sp, #0x8 + mov r1, #0x0 + str r1, [sp, #0x0] + str r1, [sp, #0x4] + str r1, [r0, #0x0] + str r1, [r0, #0x4] + add sp, sp, #0x8 + bx lr + + arm_func_start SND_DestroyWaveArc +SND_DestroyWaveArc: ; 0x020CF9E8 + stmdb sp!, {r4-r6,lr} + mov r4, r0 + bl SNDi_LockMutex + ldr r0, [r4, #0x18] + cmp r0, #0x0 + beq _020CFA28 + mov r5, #0x0 + mov r4, #0x8 +_020CFA08: + ldr r6, [r0, #0x4] + mov r1, r4 + str r5, [r0, #0x0] + str r5, [r0, #0x4] + bl DC_StoreRange + mov r0, r6 + cmp r6, #0x0 + bne _020CFA08 +_020CFA28: + bl SNDi_UnlockMutex + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start SND_DestroyBank +SND_DestroyBank: ; 0x020CFA34 + stmdb sp!, {r4-r8,lr} + mov r7, r0 + bl SNDi_LockMutex + add r5, r7, #0x18 + mov r6, #0x0 + mov r8, #0x8 + mov r4, #0x3c +_020CFA50: + add r1, r7, r6, lsl #0x3 + ldr r0, [r1, #0x18] + cmp r0, #0x0 + beq _020CFAB8 + ldr r3, [r0, #0x18] + cmp r5, r3 + bne _020CFA80 + ldr r2, [r1, #0x1c] + mov r1, r4 + str r2, [r0, #0x18] + bl DC_StoreRange + b _020CFAB8 +_020CFA80: + cmp r3, #0x0 + beq _020CFAA0 +_020CFA88: + ldr r0, [r3, #0x4] + cmp r5, r0 + beq _020CFAA0 + mov r3, r0 + cmp r0, #0x0 + bne _020CFA88 +_020CFAA0: + add r0, r7, r6, lsl #0x3 + ldr r2, [r0, #0x1c] + mov r0, r3 + mov r1, r8 + str r2, [r3, #0x4] + bl DC_StoreRange +_020CFAB8: + add r6, r6, #0x1 + cmp r6, #0x4 + add r5, r5, #0x8 + blt _020CFA50 + bl SNDi_UnlockMutex + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start SND_AssignWaveArc +SND_AssignWaveArc: ; 0x020CFAD4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl SNDi_LockMutex + add r3, r6, r5, lsl #0x3 + ldr r2, [r3, #0x18] + mov r12, r5, lsl #0x3 + cmp r2, #0x0 + beq _020CFB70 + cmp r4, r2 + bne _020CFB10 + bl SNDi_UnlockMutex + ldmia sp!, {r4-r6,lr} + bx lr +_020CFB10: + add r1, r6, #0x18 + ldr r0, [r2, #0x18] + add r12, r1, r12 + cmp r12, r0 + bne _020CFB3C + ldr r0, [r3, #0x1c] + mov r1, #0x3c + str r0, [r2, #0x18] + ldr r0, [r3, #0x18] + bl DC_StoreRange + b _020CFB70 +_020CFB3C: + cmp r0, #0x0 + beq _020CFB5C +_020CFB44: + ldr r1, [r0, #0x4] + cmp r12, r1 + beq _020CFB5C + mov r0, r1 + cmp r1, #0x0 + bne _020CFB44 +_020CFB5C: + add r1, r6, r5, lsl #0x3 + ldr r2, [r1, #0x1c] + mov r1, #0x8 + str r2, [r0, #0x4] + bl DC_StoreRange +_020CFB70: + add r0, r6, #0x18 + ldr r1, [r4, #0x18] + add r0, r0, r5, lsl #0x3 + str r0, [r4, #0x18] + add r0, r6, r5, lsl #0x3 + str r1, [r0, #0x1c] + str r4, [r0, #0x18] + bl SNDi_UnlockMutex + mov r0, r6 + mov r1, #0x3c + bl DC_StoreRange + mov r0, r4 + mov r1, #0x3c + bl DC_StoreRange + ldmia sp!, {r4-r6,lr} + bx lr diff --git a/arm9/asm/SND_command.s b/arm9/asm/SND_command.s new file mode 100644 index 00000000..7218baa2 --- /dev/null +++ b/arm9/asm/SND_command.s @@ -0,0 +1,617 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start IsCommandAvailable +IsCommandAvailable: + stmdb sp!, {r4,lr} + bl OS_IsRunOnEmulator +_020CEC94: + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4, lr} + bxeq lr + bl OS_DisableInterrupts + ldr r1, _020CECD0 + mov r2, #0x10 + str r2, [r1] + ldr r4, [r1] + bl OS_RestoreInterrupts + cmp r4, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + ldmia sp!, {r4, lr} + bx lr +_020CECD0: .word 0x04FFF200 + + arm_func_start AllocCommand +AllocCommand: ; 0x020CECD4 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020CED24 ; =0x021D3838 + ldr r4, [r1, #0x0] + cmp r4, #0x0 + bne _020CECFC + bl OS_RestoreInterrupts +_020CECF0: + mov r0, #0x0 + ldmia sp!, {r4, lr} + bx lr +_020CECFC: + ldr r2, [r4, #0x0] + str r2, [r1, #0x0] + cmp r2, #0x0 + ldreq r1, _020CED28 ; =0x021D3848 + moveq r2, #0x0 + streq r2, [r1, #0x0] + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CED24: .word 0x021D3838 +_020CED28: .word 0x021D3848 + + arm_func_start RequestCommandProc +RequestCommandProc: ; 0x020CED2C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, #0x7 + mov r4, #0x0 +_020CED3C: + mov r0, r5 + mov r1, r4 + mov r2, r4 + bl PXI_SendWordByFifo +_020CED4C: + cmp r0, #0 + blt _020CED3C + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start InitPXI +InitPXI: ; 0x020CED60 + stmdb sp!, {r4-r6,lr} + ldr r1, _020CEDC8 ; =PxiFifoCallback + mov r0, #0x7 + bl PXI_SetFifoRecvCallback + bl IsCommandAvailable +_020CED74: + cmp r0, #0x0 + ldmeqia sp!, {r4-r6, lr} + bxeq lr + mov r0, #0x7 + mov r1, #0x1 + bl PXI_IsCallbackReady + cmp r0, #0x0 + ldmneia sp!, {r4-r6, lr} + bxne lr + mov r6, #0x64 + mov r5, #0x7 + mov r4, #0x1 +_020CEDA4: + mov r0, r6 + bl OS_SpinWait + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady + cmp r0, #0x0 + beq _020CEDA4 + ldmia sp!, {r4-r6, lr} + bx lr +_020CEDC8: .word PxiFifoCallback + + arm_func_start PxiFifoCallback +PxiFifoCallback: ; 0x020CEDCC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + bl OS_DisableInterrupts + mov r4, r0 + mov r0, r5 + bl SNDi_CallAlarmHandler + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start SND_CountWaitingCommand +SND_CountWaitingCommand: ; 0x020CEDFC + stmdb sp!, {r4,lr} + bl SND_CountFreeCommand + mov r4, r0 + bl SND_CountReservedCommand + rsb r1, r4, #0x100 + sub r0, r1, r0 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start SND_CountReservedCommand +SND_CountReservedCommand: ; 0x020CEE1C + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020CEE58 ; =0x021D3840 + mov r4, #0x0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + beq _020CEE48 +_020CEE38: + ldr r1, [r1, #0x0] + add r4, r4, #0x1 + cmp r1, #0x0 + bne _020CEE38 +_020CEE48: + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CEE58: .word 0x021D3840 + + arm_func_start SND_CountFreeCommand +SND_CountFreeCommand: ; 0x020CEE5C + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020CEE98 ; =0x021D3838 + mov r4, #0x0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + beq _020CEE88 +_020CEE78: + ldr r1, [r1, #0x0] + add r4, r4, #0x1 + cmp r1, #0x0 + bne _020CEE78 +_020CEE88: + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CEE98: .word 0x021D3838 + + arm_func_start SND_IsFinishedCommandTag +SND_IsFinishedCommandTag: + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r1, _020CEEEC ; =0x021D383C + ldr r1, [r1, #0x0] + cmp r4, r1 + bls _020CEECC + sub r1, r4, r1 + cmp r1, #0x80000000 + movcc r4, #0x0 + movcs r4, #0x1 + b _020CEEDC +_020CEECC: + sub r1, r1, r4 + cmp r1, #0x80000000 + movcc r4, #0x1 + movcs r4, #0x0 +_020CEEDC: + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CEEEC: .word 0x021D383C + + arm_func_start SND_GetCurrentCommandTag +SND_GetCurrentCommandTag: ; 0x020CEEF0 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020CEF24 ; =0x021D3840 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + ldreq r1, _020CEF28 ; =0x021D383C + ldreq r4, [r1, #0x0] + ldrne r1, _020CEF2C ; =0x021D3858 + ldrne r4, [r1, #0x0] + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CEF24: .word 0x021D3840 +_020CEF28: .word 0x021D383C +_020CEF2C: .word 0x021D3858 + + arm_func_start SND_WaitForCommandProc +SND_WaitForCommandProc: ; 0x020CEF30 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl SND_IsFinishedCommandTag +_020CEF40: + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5, lr} + bxne lr + mov r4, #0x0 +_020CEF54: + mov r0, r4 + bl SND_RecvCommandReply + cmp r0, #0x0 + bne _020CEF54 + mov r0, r5 + bl SND_IsFinishedCommandTag + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5, lr} + bxne lr + bl RequestCommandProc + mov r0, r5 + bl SND_IsFinishedCommandTag + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5, lr} + bxne lr + mov r4, #0x1 +_020CEF9C: + mov r0, r4 + bl SND_RecvCommandReply + mov r0, r5 + bl SND_IsFinishedCommandTag + cmp r0, #0x0 + beq _020CEF9C + add sp, sp, #0x4 + ldmia sp!, {r4-r5, lr} + bx lr + + arm_func_start SND_FlushCommand +SND_FlushCommand: ; 0x020CEFC0 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020CF164 ; =0x021D3840 + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + bne _020CEFF8 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r9,lr} + bx lr +_020CEFF8: + ldr r1, _020CF168 ; =0x021D3854 + ldr r1, [r1, #0x0] + cmp r1, #0x8 + blt _020CF03C + ands r1, r5, #0x1 + bne _020CF024 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r9,lr} + bx lr +_020CF024: + mov r0, #0x1 + bl SND_RecvCommandReply + ldr r0, _020CF168 ; =0x021D3854 + ldr r0, [r0, #0x0] + cmp r0, #0x8 + bge _020CF024 +_020CF03C: + ldr r0, _020CF16C ; =0x021D3B00 + mov r1, #0x1800 + bl DC_FlushRange + ldr r1, _020CF164 ; =0x021D3840 + mov r0, #0x7 + ldr r1, [r1, #0x0] + mov r2, #0x0 + bl PXI_SendWordByFifo +_020CF05C: + cmp r0, #0x0 + bge _020CF0E0 + ands r0, r5, #0x1 + bne _020CF084 + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r9, lr} + bx lr +_020CF084: + ldr r1, _020CF164 + mov r0, #0x7 + ldr r1, [r1] + mov r2, #0x0 + bl PXI_SendWordByFifo + cmp r0, #0x0 + bge _020CF0E0 + ldr r6, _020CF164 + mov r9, #0x64 + mov r8, #0x7 + mov r7, #0x0 +_020CF0B0: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, r9 + bl OS_SpinWait + bl OS_DisableInterrupts + mov r4, r0 + mov r0, r8 + ldr r1, [r6] + mov r2, r7 + bl PXI_SendWordByFifo + cmp r0, #0x0 + blt _020CF0B0 +_020CF0E0: + ands r0, r5, #0x2 + beq _020CF0EC + bl RequestCommandProc +_020CF0EC: + ldr r0, _020CF170 + ldr r1, _020CF164 + ldr r3, [r0] + ldr r5, [r1] + add r1, r3, #0x1 + ldr r2, _020CF174 + str r1, [r0] + str r5, [r2, r3, lsl #2] + cmp r1, #0x8 + movgt r1, #0x0 + ldr r2, _020CF168 + strgt r1, [r0] + ldr r1, _020CF178 + ldr r3, [r2] + ldr r0, [r1] + add ip, r3, #0x1 + add r6, r0, #0x1 + ldr r5, _020CF164 + mov lr, #0x0 + ldr r3, _020CF17C + mov r0, r4 + str lr, [r5] + str lr, [r3] + str ip, [r2] + str r6, [r1] + bl OS_RestoreInterrupts + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r9, lr} + bx lr +_020CF164: .word 0x021D3840 +_020CF168: .word 0x021D3854 +_020CF16C: .word 0x021D3B00 +_020CF170: .word 0x021D3850 +_020CF174: .word 0x021D385C +_020CF178: .word 0x021D3858 +_020CF17C: .word 0x021D3844 + + arm_func_start SND_PushCommand +SND_PushCommand: ; 0x020CF180 + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r2, _020CF1C0 ; =0x021D3844 + ldr r1, [r2, #0x0] + cmp r1, #0x0 + ldreq r1, _020CF1C4 ; =0x021D3840 + streq r4, [r2, #0x0] + streq r4, [r1, #0x0] + strne r4, [r1, #0x0] + strne r4, [r2, #0x0] + mov r1, #0x0 + str r1, [r4, #0x0] + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CF1C0: .word 0x021D3844 +_020CF1C4: .word 0x021D3840 + + arm_func_start SND_AllocCommand +SND_AllocCommand: + stmdb sp!, {r4,lr} + mov r4, r0 + bl IsCommandAvailable +_020CF1D4: + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + bl AllocCommand + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + ands r0, r4, #0x1 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + bl SND_CountWaitingCommand + cmp r0, #0x0 + ble _020CF238 + mov r4, #0x0 +_020CF214: + mov r0, r4 + bl SND_RecvCommandReply + cmp r0, #0x0 + bne _020CF214 + bl AllocCommand + cmp r0, #0x0 + beq _020CF240 + ldmia sp!, {r4,lr} + bx lr +_020CF238: + mov r0, #0x1 + bl SND_FlushCommand +_020CF240: + bl RequestCommandProc + mov r4, #0x1 +_020CF248: + mov r0, r4 + bl SND_RecvCommandReply + bl AllocCommand + cmp r0, #0x0 + beq _020CF248 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start SND_RecvCommandReply +SND_RecvCommandReply: ; 0x020CF264 + stmdb sp!, {r4-r6,lr} + mov r4, r0 + bl OS_DisableInterrupts + mov r5, r0 + ands r0, r4, #0x1 + beq _020CF2C0 + bl SNDi_GetFinishedCommandTag + ldr r4, _020CF380 ; =0x021D383C + ldr r1, [r4, #0x0] + cmp r1, r0 + bne _020CF2E8 + mov r6, #0x64 +_020CF294: + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r6 + bl OS_SpinWait + bl OS_DisableInterrupts + mov r5, r0 + bl SNDi_GetFinishedCommandTag + ldr r1, [r4, #0x0] + cmp r1, r0 + beq _020CF294 + b _020CF2E8 +_020CF2C0: + bl SNDi_GetFinishedCommandTag + ldr r1, _020CF380 ; =0x021D383C + ldr r1, [r1, #0x0] + cmp r1, r0 + bne _020CF2E8 + mov r0, r5 + bl OS_RestoreInterrupts +_020CF2DC: + mov r0, #0x0 + ldmia sp!, {r4-r6, lr} + bx lr +_020CF2E8: + ldr r0, _020CF384 ; =0x021D384C + ldr r2, _020CF388 ; =0x021D385C + ldr r3, [r0, #0x0] + add r1, r3, #0x1 + ldr r4, [r2, r3, lsl #0x2] + str r1, [r0, #0x0] + cmp r1, #0x8 + movgt r1, #0x0 + strgt r1, [r0, #0x0] + ldr r0, [r4, #0x0] + mov r1, r4 + cmp r0, #0x0 + beq _020CF32C +_020CF31C: + ldr r1, [r1, #0x0] + ldr r0, [r1, #0x0] + cmp r0, #0x0 + bne _020CF31C +_020CF32C: + ldr r0, _020CF38C ; =0x021D3848 + ldr r3, _020CF390 ; =0x021D3854 + ldr r0, [r0, #0x0] + ldr r2, _020CF380 ; =0x021D383C + cmp r0, #0x0 + strne r4, [r0, #0x0] + ldreq r0, _020CF394 ; =0x021D3838 + ldr lr, [r3, #0x0] + streq r4, [r0, #0x0] + ldr ip, _020CF38C ; =0x021D3848 + sub r6, lr, #0x1 + ldr r0, [r2, #0x0] + str r1, [r12, #0x0] + add lr, r0, #0x1 + mov r0, r5 + str r6, [r3, #0x0] + str lr, [r2, #0x0] + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020CF380: .word 0x021D383C +_020CF384: .word 0x021D384C +_020CF388: .word 0x021D385C +_020CF38C: .word 0x021D3848 +_020CF390: .word 0x021D3854 +_020CF394: .word 0x021D3838 + + arm_func_start SND_CommandInit +SND_CommandInit: ; 0x020CF398 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + bl InitPXI + ldr r3, _020CF478 ; =0x021D3B00 + ldr r0, _020CF47C ; =0x021D3838 + mov r4, #0x0 + str r3, [r0, #0x0] + mov r1, r3 + mov r0, #0x18 +_020CF3BC: + add r4, r4, #0x1 + mla r2, r4, r0, r1 + cmp r4, #0xff + str r2, [r3], #0x18 + blt _020CF3BC + ldr r7, _020CF480 ; =0x021D4B00 + mov r10, #0x0 + ldr r5, _020CF484 ; =0x021D3840 + ldr r4, _020CF488 ; =0x021D3844 + ldr lr, _020CF48C ; =0x021D3854 + ldr ip, _020CF490 ; =0x021D384C + ldr r3, _020CF494 ; =0x021D3850 + ldr r1, _020CF498 ; =0x021D383C + ldr sb, _020CF49C ; =0x021D52E8 + ldr r6, _020CF4A0 ; =0x021D3848 + ldr r2, _020CF4A4 ; =0x021D3858 + mov r8, #0x1 + ldr r0, _020CF4A8 ; =0x021D3880 + ldr fp, _020CF4AC ; =0x021D5360 + str r9, [r6, #0x0] + str r10, [r7, #0x7e8] + str r10, [r5, #0x0] + str r10, [r4, #0x0] + str r10, [lr, #0x0] + str r10, [r12, #0x0] + str r10, [r3, #0x0] + str r8, [r2, #0x0] + str r10, [r1, #0x0] + str r0, [r11, #0x0] + bl SNDi_InitSharedWork + mov r0, r8 + bl SND_AllocCommand +_020CF43C: + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r11, lr} + bxeq lr + mov r2, #0x1D + mov r1, fp + str r2, [r0, #0x4] + ldr r1, [r1] + str r1, [r0, #0x8] + bl SND_PushCommand + mov r0, r8 + bl SND_FlushCommand + add sp, sp, #0x4 + ldmia sp!, {r4-r11, lr} + bx lr +_020CF478: .word 0x021D3B00 +_020CF47C: .word 0x021D3838 +_020CF480: .word 0x021D4B00 +_020CF484: .word 0x021D3840 +_020CF488: .word 0x021D3844 +_020CF48C: .word 0x021D3854 +_020CF490: .word 0x021D384C +_020CF494: .word 0x021D3850 +_020CF498: .word 0x021D383C +_020CF49C: .word 0x021D52E8 +_020CF4A0: .word 0x021D3848 +_020CF4A4: .word 0x021D3858 +_020CF4A8: .word 0x021D3880 +_020CF4AC: .word 0x021D5360 diff --git a/arm9/asm/SND_interface.s b/arm9/asm/SND_interface.s new file mode 100644 index 00000000..121d325b --- /dev/null +++ b/arm9/asm/SND_interface.s @@ -0,0 +1,459 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start PushCommand_impl +PushCommand_impl: ; 0x020CE66C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r0, #0x1 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl SND_AllocCommand +_020CE68C: + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7, lr} + bxeq lr + str r7, [r0, #0x4] + str r6, [r0, #0x8] + str r5, [r0, #0xc] + ldr r1, [sp, #0x18] + str r4, [r0, #0x10] + str r1, [r0, #0x14] + bl SND_PushCommand + add sp, sp, #0x4 + ldmia sp!, {r4-r7, lr} + bx lr + + arm_func_start SNDi_SetTrackParam +SNDi_SetTrackParam: ; 0x020CE6C4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r12, [sp, #0x8] + mov lr, r2 + str r3, [sp, #0x0] + mov r2, r1 + orr r1, r0, r12, lsl #0x18 + mov r3, lr + mov r0, #0x7 + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_020CE6F8 +FUN_020CE6F8: ; 0x020CE6F8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, r2 + str r3, [sp, #0x0] + mov r1, r0 + mov r2, lr + mov r3, r12 + mov r0, #0x6 + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_ResetMasterPan +SND_ResetMasterPan: ; 0x020CE72C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0x0 + mov r3, r2 + mov r0, #0x18 + mvn r1, #0x0 + str r2, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetMasterPan +SND_SetMasterPan: ; 0x020CE758 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0x0 + mov r1, r0 + mov r3, r2 + mov r0, #0x18 + str r2, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetOutputSelector +SND_SetOutputSelector: ; 0x020CE784 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, r2 + str r3, [sp, #0x0] + mov r1, r0 + mov r2, lr + mov r3, r12 + mov r0, #0x19 + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_InvalidateWaveData +SND_InvalidateWaveData: ; 0x020CE7B8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x20 + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_InvalidateBankData +SND_InvalidateBankData: ; 0x020CE7E4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x1f + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_InvalidateSeqData +SND_InvalidateSeqData: ; 0x020CE810 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x1e + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetupChannelPcm +SND_SetupChannelPcm: ; 0x020CE83C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r12, [sp, #0x18] + mov r3, r3, lsl #0x1a + orr r4, r3, r1, lsl #0x18 + ldr r5, [sp, #0x24] + mov r3, r12, lsl #0x18 + ldr r1, [sp, #0x1c] + ldr r12, [sp, #0x10] + orr r4, r4, r5, lsl #0x10 + orr r4, r12, r4 + ldr lr, [sp, #0x20] + orr r3, r3, r1, lsl #0x16 + ldr r12, [sp, #0x14] + orr r1, r0, lr, lsl #0x10 + orr r3, r12, r3 + mov r0, #0xe + str r4, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start SND_SetChannelPan +SND_SetChannelPan: ; 0x020CE894 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x15 + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetChannelVolume +SND_SetChannelVolume: ; 0x020CE8C0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + mov r12, #0x0 + mov r1, r0 + mov r2, lr + mov r0, #0x14 + str r12, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetChannelTimer +SND_SetChannelTimer: ; 0x020CE8F4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x13 + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_UnlockChannel +SND_UnlockChannel: ; 0x020CE920 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x1b + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_LockChannel +SND_LockChannel: ; 0x020CE94C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x1a + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetupAlarm +SND_SetupAlarm: ; 0x020CE978 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r4, r2 + mov r5, r1 + ldr r2, [sp, #0x18] + mov r6, r0 + mov r1, r3 + bl SNDi_SetAlarmHandler +_020CE998: + str r0, [sp] + mov r1, r6 + mov r2, r5 + mov r3, r4 + mov r0, #0x12 + bl PushCommand_impl + add sp, sp, #0x8 + ldmia sp!, {r4-r6, lr} + bx lr + + arm_func_start SND_SetupCapture +SND_SetupCapture: ; 0x020CE9BC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, r0, lsl #0x1f + orr r0, r0, r1, lsl #0x1e + ldr r12, [sp, #0x8] + mov r1, r2 + orr r0, r0, r12, lsl #0x1d + ldr r2, [sp, #0xc] + mov lr, #0x0 + orr r0, r0, r2, lsl #0x1c + ldr r12, [sp, #0x10] + mov r2, r3 + orr r3, r0, r12, lsl #0x1b + mov r0, #0x11 + str lr, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_StopTimer +SND_StopTimer: ; 0x020CEA08 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r7, r2 + mov r9, r0 + mov r8, r1 + mov r6, r3 + mov r4, r7 + mov r5, #0x0 + b _020CEA44 +_020CEA2C: + ands r0, r4, #0x1 + beq _020CEA3C + mov r0, r5 + bl SNDi_IncAlarmId +_020CEA3C: + add r5, r5, #0x1 + mov r4, r4, lsr #0x1 +_020CEA44: + cmp r5, #0x8 + bge _020CEA54 + cmp r4, #0x0 + bne _020CEA2C +_020CEA54: + mov r1, r9 + mov r2, r8 + mov r3, r7 + mov r0, #0xd + str r6, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start SND_StartTimer +SND_StartTimer: ; 0x020CEA78 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, r2 + str r3, [sp, #0x0] + mov r1, r0 + mov r2, lr + mov r3, r12 + mov r0, #0xc + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetTrackAllocatableChannel +SND_SetTrackAllocatableChannel: ; 0x020CEAAC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + mov r12, #0x0 + mov r1, r0 + mov r2, lr + mov r0, #0x9 + str r12, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetTrackPan +SND_SetTrackPan: ; 0x020CEAE0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r3, r2 + mov r12, #0x1 + mov r2, #0x9 + str r12, [sp, #0x0] + bl SNDi_SetTrackParam + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetTrackPitch +SND_SetTrackPitch: ; 0x020CEB08 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r3, r2 + mov r12, #0x2 + mov r2, #0xc + str r12, [sp, #0x0] + bl SNDi_SetTrackParam + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_SetPlayerChannelPriority +SND_SetPlayerChannelPriority: ; 0x020CEB30 + ldr ip, _020CEB44 ; =FUN_020CE6F8 + mov r2, r1 + mov r1, #0x4 + mov r3, #0x1 + bx r12 + .balign 4 +_020CEB44: .word FUN_020CE6F8 + + arm_func_start SND_SetPlayerVolume +SND_SetPlayerVolume: ; 0x020CEB48 + ldr ip, _020CEB5C ; =FUN_020CE6F8 + mov r2, r1 + mov r1, #0x6 + mov r3, #0x2 + bx r12 + .balign 4 +_020CEB5C: .word FUN_020CE6F8 + + arm_func_start SND_PauseSeq +SND_PauseSeq: ; 0x020CEB60 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r3, #0x0 + mov r1, r0 + mov r0, #0x4 + str r3, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_StartPreparedSeq +SND_StartPreparedSeq: ; 0x020CEB8C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0x0 + mov r1, r0 + mov r3, r2 + mov r0, #0x3 + str r2, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_PrepareSeq +SND_PrepareSeq: ; 0x020CEBB8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, r2 + str r3, [sp, #0x0] + mov r1, r0 + mov r2, lr + mov r3, r12 + mov r0, #0x2 + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SND_StopSeq +SND_StopSeq: ; 0x020CEBEC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0x0 + mov r1, r0 + mov r3, r2 + mov r0, #0x1 + str r2, [sp, #0x0] + bl PushCommand_impl + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr diff --git a/arm9/asm/SND_main.s b/arm9/asm/SND_main.s new file mode 100644 index 00000000..6ae5e845 --- /dev/null +++ b/arm9/asm/SND_main.s @@ -0,0 +1,45 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start SNDi_UnlockMutex +SNDi_UnlockMutex: ; 0x020CEC18 + ldr ip, _020CEC24 ; =OS_UnlockMutex + ldr r0, _020CEC28 ; =0x021D3820 + bx r12 + .balign 4 +_020CEC24: .word OS_UnlockMutex +_020CEC28: .word 0x021D3820 + + arm_func_start SNDi_LockMutex +SNDi_LockMutex: ; 0x020CEC2C + ldr ip, _020CEC38 ; =OS_LockMutex + ldr r0, _020CEC3C ; =0x021D3820 + bx r12 + .balign 4 +_020CEC38: .word OS_LockMutex +_020CEC3C: .word 0x021D3820 + + arm_func_start SND_Init +SND_Init: ; 0x020CEC40 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020CEC84 ; =0x021D381C + ldr r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020CEC88 ; =0x021D3820 + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_InitMutex + bl SND_CommandInit + bl SND_AlarmInit + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CEC84: .word 0x021D381C +_020CEC88: .word 0x021D3820 diff --git a/arm9/asm/SND_util.s b/arm9/asm/SND_util.s new file mode 100644 index 00000000..8a35db45 --- /dev/null +++ b/arm9/asm/SND_util.s @@ -0,0 +1,39 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start SND_CalcChannelVolume +SND_CalcChannelVolume: ; 0x020CF6F4 + ldr r1, _020CF75C ; =0xFFFFFD2D + cmp r0, r1 + movlt r0, r1 + blt _020CF70C + cmp r0, #0x0 + movgt r0, #0x0 +_020CF70C: + ldr r1, _020CF760 ; =0x000002D3 + ldr r2, _020CF764 ; =0x02103CAC + add r3, r0, r1 + mvn r1, #0xef + cmp r0, r1 + ldrb r2, [r2, r3] + movlt r0, #0x3 + blt _020CF74C + mvn r1, #0x77 + cmp r0, r1 + movlt r0, #0x2 + blt _020CF74C + mvn r1, #0x3b + cmp r0, r1 + movlt r0, #0x1 + movge r0, #0x0 +_020CF74C: + orr r0, r2, r0, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bx lr + .balign 4 +_020CF75C: .word 0xFFFFFD2D +_020CF760: .word 0x000002D3 +_020CF764: .word 0x02103CAC diff --git a/arm9/asm/SND_work.s b/arm9/asm/SND_work.s new file mode 100644 index 00000000..7dbcec9a --- /dev/null +++ b/arm9/asm/SND_work.s @@ -0,0 +1,115 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start SNDi_InitSharedWork +SNDi_InitSharedWork: ; 0x020CF590 + stmdb sp!, {r4,lr} + mov r4, #0x0 + str r4, [r0, #0x4] + strh r4, [r0, #0x8] + strh r4, [r0, #0xa] + mov r12, r0 + str r4, [r0, #0x0] + mov r3, r4 + mvn r2, #0x0 +_020CF5B4: + mov lr, r3 + str r3, [r12, #0x40] +_020CF5BC: + add r1, r12, lr, lsl #0x1 + add lr, lr, #0x1 + strh r2, [r1, #0x20] + cmp lr, #0x10 + blt _020CF5BC + add r4, r4, #0x1 + cmp r4, #0x10 + add r12, r12, #0x24 + blt _020CF5B4 + mov r3, #0x0 + mvn r2, #0x0 +_020CF5E8: + add r1, r0, r3, lsl #0x1 + add r1, r1, #0x200 + add r3, r3, #0x1 + strh r2, [r1, #0x60] + cmp r3, #0x10 + blt _020CF5E8 + mov r1, #0x280 + bl DC_FlushRange + ldmia sp!, {r4,lr} + bx lr + + arm_func_start SNDi_GetFinishedCommandTag +SNDi_GetFinishedCommandTag: ; 0x020CF610 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020CF640 ; =0x021D5360 + mov r1, #0x4 + ldr r0, [r0, #0x0] + bl DC_InvalidateRange + ldr r0, _020CF640 ; =0x021D5360 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CF640: .word 0x021D5360 + + arm_func_start SND_GetPlayerTickCounter +SND_GetPlayerTickCounter: ; 0x020CF644 + stmdb sp!, {r4,lr} + mov r1, #0x24 + mul r4, r0, r1 + ldr r0, _020CF680 ; =0x021D5360 + mov r1, #0x4 + ldr r0, [r0, #0x0] + add r0, r0, #0x40 + add r0, r0, r4 + bl DC_InvalidateRange + ldr r0, _020CF680 ; =0x021D5360 + ldr r0, [r0, #0x0] + add r0, r0, r4 + ldr r0, [r0, #0x40] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020CF680: .word 0x021D5360 + + arm_func_start SND_GetChannelStatus +SND_GetChannelStatus: ; 0x020CF684 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020CF6B8 ; =0x021D5360 + mov r1, #0x2 + ldr r0, [r0, #0x0] + add r0, r0, #0x8 + bl DC_InvalidateRange + ldr r0, _020CF6B8 ; =0x021D5360 + ldr r0, [r0, #0x0] + ldrh r0, [r0, #0x8] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CF6B8: .word 0x021D5360 + + arm_func_start SND_GetPlayerStatus +SND_GetPlayerStatus: ; 0x020CF6BC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020CF6F0 ; =0x021D5360 + mov r1, #0x4 + ldr r0, [r0, #0x0] + add r0, r0, #0x4 + bl DC_InvalidateRange + ldr r0, _020CF6F0 ; =0x021D5360 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020CF6F0: .word 0x021D5360 diff --git a/arm9/asm/libsnd.s b/arm9/asm/libsnd.s deleted file mode 100644 index 99351712..00000000 --- a/arm9/asm/libsnd.s +++ /dev/null @@ -1,1655 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - - arm_func_start PushCommand_impl -PushCommand_impl: ; 0x020CE66C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r0, #0x1 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl SND_AllocCommand -_020CE68C: - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7, lr} - bxeq lr - str r7, [r0, #0x4] - str r6, [r0, #0x8] - str r5, [r0, #0xc] - ldr r1, [sp, #0x18] - str r4, [r0, #0x10] - str r1, [r0, #0x14] - bl SND_PushCommand - add sp, sp, #0x4 - ldmia sp!, {r4-r7, lr} - bx lr - - arm_func_start SNDi_SetTrackParam -SNDi_SetTrackParam: ; 0x020CE6C4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r12, [sp, #0x8] - mov lr, r2 - str r3, [sp, #0x0] - mov r2, r1 - orr r1, r0, r12, lsl #0x18 - mov r3, lr - mov r0, #0x7 - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start FUN_020CE6F8 -FUN_020CE6F8: ; 0x020CE6F8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, r2 - str r3, [sp, #0x0] - mov r1, r0 - mov r2, lr - mov r3, r12 - mov r0, #0x6 - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_ResetMasterPan -SND_ResetMasterPan: ; 0x020CE72C - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, #0x0 - mov r3, r2 - mov r0, #0x18 - mvn r1, #0x0 - str r2, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetMasterPan -SND_SetMasterPan: ; 0x020CE758 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, #0x0 - mov r1, r0 - mov r3, r2 - mov r0, #0x18 - str r2, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetOutputSelector -SND_SetOutputSelector: ; 0x020CE784 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, r2 - str r3, [sp, #0x0] - mov r1, r0 - mov r2, lr - mov r3, r12 - mov r0, #0x19 - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_InvalidateWaveData -SND_InvalidateWaveData: ; 0x020CE7B8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x20 - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_InvalidateBankData -SND_InvalidateBankData: ; 0x020CE7E4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x1f - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_InvalidateSeqData -SND_InvalidateSeqData: ; 0x020CE810 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x1e - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetupChannelPcm -SND_SetupChannelPcm: ; 0x020CE83C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r12, [sp, #0x18] - mov r3, r3, lsl #0x1a - orr r4, r3, r1, lsl #0x18 - ldr r5, [sp, #0x24] - mov r3, r12, lsl #0x18 - ldr r1, [sp, #0x1c] - ldr r12, [sp, #0x10] - orr r4, r4, r5, lsl #0x10 - orr r4, r12, r4 - ldr lr, [sp, #0x20] - orr r3, r3, r1, lsl #0x16 - ldr r12, [sp, #0x14] - orr r1, r0, lr, lsl #0x10 - orr r3, r12, r3 - mov r0, #0xe - str r4, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start SND_SetChannelPan -SND_SetChannelPan: ; 0x020CE894 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x15 - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetChannelVolume -SND_SetChannelVolume: ; 0x020CE8C0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - mov r12, #0x0 - mov r1, r0 - mov r2, lr - mov r0, #0x14 - str r12, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetChannelTimer -SND_SetChannelTimer: ; 0x020CE8F4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x13 - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_UnlockChannel -SND_UnlockChannel: ; 0x020CE920 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x1b - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_LockChannel -SND_LockChannel: ; 0x020CE94C - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x1a - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetupAlarm -SND_SetupAlarm: ; 0x020CE978 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x8 - mov r4, r2 - mov r5, r1 - ldr r2, [sp, #0x18] - mov r6, r0 - mov r1, r3 - bl SNDi_SetAlarmHandler -_020CE998: - str r0, [sp] - mov r1, r6 - mov r2, r5 - mov r3, r4 - mov r0, #0x12 - bl PushCommand_impl - add sp, sp, #0x8 - ldmia sp!, {r4-r6, lr} - bx lr - - arm_func_start SND_SetupCapture -SND_SetupCapture: ; 0x020CE9BC - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, r0, lsl #0x1f - orr r0, r0, r1, lsl #0x1e - ldr r12, [sp, #0x8] - mov r1, r2 - orr r0, r0, r12, lsl #0x1d - ldr r2, [sp, #0xc] - mov lr, #0x0 - orr r0, r0, r2, lsl #0x1c - ldr r12, [sp, #0x10] - mov r2, r3 - orr r3, r0, r12, lsl #0x1b - mov r0, #0x11 - str lr, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_StopTimer -SND_StopTimer: ; 0x020CEA08 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - mov r7, r2 - mov r9, r0 - mov r8, r1 - mov r6, r3 - mov r4, r7 - mov r5, #0x0 - b _020CEA44 -_020CEA2C: - ands r0, r4, #0x1 - beq _020CEA3C - mov r0, r5 - bl SNDi_IncAlarmId -_020CEA3C: - add r5, r5, #0x1 - mov r4, r4, lsr #0x1 -_020CEA44: - cmp r5, #0x8 - bge _020CEA54 - cmp r4, #0x0 - bne _020CEA2C -_020CEA54: - mov r1, r9 - mov r2, r8 - mov r3, r7 - mov r0, #0xd - str r6, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {r4-r9,lr} - bx lr - - arm_func_start SND_StartTimer -SND_StartTimer: ; 0x020CEA78 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, r2 - str r3, [sp, #0x0] - mov r1, r0 - mov r2, lr - mov r3, r12 - mov r0, #0xc - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetTrackAllocatableChannel -SND_SetTrackAllocatableChannel: ; 0x020CEAAC - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - mov r12, #0x0 - mov r1, r0 - mov r2, lr - mov r0, #0x9 - str r12, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetTrackPan -SND_SetTrackPan: ; 0x020CEAE0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r3, r2 - mov r12, #0x1 - mov r2, #0x9 - str r12, [sp, #0x0] - bl SNDi_SetTrackParam - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetTrackPitch -SND_SetTrackPitch: ; 0x020CEB08 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r3, r2 - mov r12, #0x2 - mov r2, #0xc - str r12, [sp, #0x0] - bl SNDi_SetTrackParam - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_SetPlayerChannelPriority -SND_SetPlayerChannelPriority: ; 0x020CEB30 - ldr ip, _020CEB44 ; =FUN_020CE6F8 - mov r2, r1 - mov r1, #0x4 - mov r3, #0x1 - bx r12 - .balign 4 -_020CEB44: .word FUN_020CE6F8 - - arm_func_start SND_SetPlayerVolume -SND_SetPlayerVolume: ; 0x020CEB48 - ldr ip, _020CEB5C ; =FUN_020CE6F8 - mov r2, r1 - mov r1, #0x6 - mov r3, #0x2 - bx r12 - .balign 4 -_020CEB5C: .word FUN_020CE6F8 - - arm_func_start SND_PauseSeq -SND_PauseSeq: ; 0x020CEB60 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r3, #0x0 - mov r1, r0 - mov r0, #0x4 - str r3, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_StartPreparedSeq -SND_StartPreparedSeq: ; 0x020CEB8C - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, #0x0 - mov r1, r0 - mov r3, r2 - mov r0, #0x3 - str r2, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_PrepareSeq -SND_PrepareSeq: ; 0x020CEBB8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, r2 - str r3, [sp, #0x0] - mov r1, r0 - mov r2, lr - mov r3, r12 - mov r0, #0x2 - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SND_StopSeq -SND_StopSeq: ; 0x020CEBEC - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, #0x0 - mov r1, r0 - mov r3, r2 - mov r0, #0x1 - str r2, [sp, #0x0] - bl PushCommand_impl - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start SNDi_UnlockMutex -SNDi_UnlockMutex: ; 0x020CEC18 - ldr ip, _020CEC24 ; =OS_UnlockMutex - ldr r0, _020CEC28 ; =0x021D3820 - bx r12 - .balign 4 -_020CEC24: .word OS_UnlockMutex -_020CEC28: .word 0x021D3820 - - arm_func_start SNDi_LockMutex -SNDi_LockMutex: ; 0x020CEC2C - ldr ip, _020CEC38 ; =OS_LockMutex - ldr r0, _020CEC3C ; =0x021D3820 - bx r12 - .balign 4 -_020CEC38: .word OS_LockMutex -_020CEC3C: .word 0x021D3820 - - arm_func_start SND_Init -SND_Init: ; 0x020CEC40 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020CEC84 ; =0x021D381C - ldr r0, [r1, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r0, _020CEC88 ; =0x021D3820 - mov r2, #0x1 - str r2, [r1, #0x0] - bl OS_InitMutex - bl SND_CommandInit - bl SND_AlarmInit - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CEC84: .word 0x021D381C -_020CEC88: .word 0x021D3820 - - arm_func_start IsCommandAvailable -IsCommandAvailable: - stmdb sp!, {r4,lr} - bl OS_IsRunOnEmulator -_020CEC94: - cmp r0, #0x0 - moveq r0, #0x1 - ldmeqia sp!, {r4, lr} - bxeq lr - bl OS_DisableInterrupts - ldr r1, _020CECD0 - mov r2, #0x10 - str r2, [r1] - ldr r4, [r1] - bl OS_RestoreInterrupts - cmp r4, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - ldmia sp!, {r4, lr} - bx lr -_020CECD0: .word 0x04FFF200 - - arm_func_start AllocCommand -AllocCommand: ; 0x020CECD4 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020CED24 ; =0x021D3838 - ldr r4, [r1, #0x0] - cmp r4, #0x0 - bne _020CECFC - bl OS_RestoreInterrupts -_020CECF0: - mov r0, #0x0 - ldmia sp!, {r4, lr} - bx lr -_020CECFC: - ldr r2, [r4, #0x0] - str r2, [r1, #0x0] - cmp r2, #0x0 - ldreq r1, _020CED28 ; =0x021D3848 - moveq r2, #0x0 - streq r2, [r1, #0x0] - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CED24: .word 0x021D3838 -_020CED28: .word 0x021D3848 - - arm_func_start RequestCommandProc -RequestCommandProc: ; 0x020CED2C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, #0x7 - mov r4, #0x0 -_020CED3C: - mov r0, r5 - mov r1, r4 - mov r2, r4 - bl PXI_SendWordByFifo -_020CED4C: - cmp r0, #0 - blt _020CED3C - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start InitPXI -InitPXI: ; 0x020CED60 - stmdb sp!, {r4-r6,lr} - ldr r1, _020CEDC8 ; =PxiFifoCallback - mov r0, #0x7 - bl PXI_SetFifoRecvCallback - bl IsCommandAvailable -_020CED74: - cmp r0, #0x0 - ldmeqia sp!, {r4-r6, lr} - bxeq lr - mov r0, #0x7 - mov r1, #0x1 - bl PXI_IsCallbackReady - cmp r0, #0x0 - ldmneia sp!, {r4-r6, lr} - bxne lr - mov r6, #0x64 - mov r5, #0x7 - mov r4, #0x1 -_020CEDA4: - mov r0, r6 - bl OS_SpinWait - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady - cmp r0, #0x0 - beq _020CEDA4 - ldmia sp!, {r4-r6, lr} - bx lr -_020CEDC8: .word PxiFifoCallback - - arm_func_start PxiFifoCallback -PxiFifoCallback: ; 0x020CEDCC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r1 - bl OS_DisableInterrupts - mov r4, r0 - mov r0, r5 - bl SNDi_CallAlarmHandler - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start SND_CountWaitingCommand -SND_CountWaitingCommand: ; 0x020CEDFC - stmdb sp!, {r4,lr} - bl SND_CountFreeCommand - mov r4, r0 - bl SND_CountReservedCommand - rsb r1, r4, #0x100 - sub r0, r1, r0 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start SND_CountReservedCommand -SND_CountReservedCommand: ; 0x020CEE1C - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020CEE58 ; =0x021D3840 - mov r4, #0x0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - beq _020CEE48 -_020CEE38: - ldr r1, [r1, #0x0] - add r4, r4, #0x1 - cmp r1, #0x0 - bne _020CEE38 -_020CEE48: - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CEE58: .word 0x021D3840 - - arm_func_start SND_CountFreeCommand -SND_CountFreeCommand: ; 0x020CEE5C - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020CEE98 ; =0x021D3838 - mov r4, #0x0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - beq _020CEE88 -_020CEE78: - ldr r1, [r1, #0x0] - add r4, r4, #0x1 - cmp r1, #0x0 - bne _020CEE78 -_020CEE88: - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CEE98: .word 0x021D3838 - - arm_func_start SND_IsFinishedCommandTag -SND_IsFinishedCommandTag: - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_DisableInterrupts - ldr r1, _020CEEEC ; =0x021D383C - ldr r1, [r1, #0x0] - cmp r4, r1 - bls _020CEECC - sub r1, r4, r1 - cmp r1, #0x80000000 - movcc r4, #0x0 - movcs r4, #0x1 - b _020CEEDC -_020CEECC: - sub r1, r1, r4 - cmp r1, #0x80000000 - movcc r4, #0x1 - movcs r4, #0x0 -_020CEEDC: - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CEEEC: .word 0x021D383C - - arm_func_start SND_GetCurrentCommandTag -SND_GetCurrentCommandTag: ; 0x020CEEF0 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020CEF24 ; =0x021D3840 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - ldreq r1, _020CEF28 ; =0x021D383C - ldreq r4, [r1, #0x0] - ldrne r1, _020CEF2C ; =0x021D3858 - ldrne r4, [r1, #0x0] - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CEF24: .word 0x021D3840 -_020CEF28: .word 0x021D383C -_020CEF2C: .word 0x021D3858 - - arm_func_start SND_WaitForCommandProc -SND_WaitForCommandProc: ; 0x020CEF30 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl SND_IsFinishedCommandTag -_020CEF40: - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5, lr} - bxne lr - mov r4, #0x0 -_020CEF54: - mov r0, r4 - bl SND_RecvCommandReply - cmp r0, #0x0 - bne _020CEF54 - mov r0, r5 - bl SND_IsFinishedCommandTag - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5, lr} - bxne lr - bl RequestCommandProc - mov r0, r5 - bl SND_IsFinishedCommandTag - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5, lr} - bxne lr - mov r4, #0x1 -_020CEF9C: - mov r0, r4 - bl SND_RecvCommandReply - mov r0, r5 - bl SND_IsFinishedCommandTag - cmp r0, #0x0 - beq _020CEF9C - add sp, sp, #0x4 - ldmia sp!, {r4-r5, lr} - bx lr - - arm_func_start SND_FlushCommand -SND_FlushCommand: ; 0x020CEFC0 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020CF164 ; =0x021D3840 - mov r4, r0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - bne _020CEFF8 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r9,lr} - bx lr -_020CEFF8: - ldr r1, _020CF168 ; =0x021D3854 - ldr r1, [r1, #0x0] - cmp r1, #0x8 - blt _020CF03C - ands r1, r5, #0x1 - bne _020CF024 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r9,lr} - bx lr -_020CF024: - mov r0, #0x1 - bl SND_RecvCommandReply - ldr r0, _020CF168 ; =0x021D3854 - ldr r0, [r0, #0x0] - cmp r0, #0x8 - bge _020CF024 -_020CF03C: - ldr r0, _020CF16C ; =0x021D3B00 - mov r1, #0x1800 - bl DC_FlushRange - ldr r1, _020CF164 ; =0x021D3840 - mov r0, #0x7 - ldr r1, [r1, #0x0] - mov r2, #0x0 - bl PXI_SendWordByFifo -_020CF05C: - cmp r0, #0x0 - bge _020CF0E0 - ands r0, r5, #0x1 - bne _020CF084 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r9, lr} - bx lr -_020CF084: - ldr r1, _020CF164 - mov r0, #0x7 - ldr r1, [r1] - mov r2, #0x0 - bl PXI_SendWordByFifo - cmp r0, #0x0 - bge _020CF0E0 - ldr r6, _020CF164 - mov r9, #0x64 - mov r8, #0x7 - mov r7, #0x0 -_020CF0B0: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, r9 - bl OS_SpinWait - bl OS_DisableInterrupts - mov r4, r0 - mov r0, r8 - ldr r1, [r6] - mov r2, r7 - bl PXI_SendWordByFifo - cmp r0, #0x0 - blt _020CF0B0 -_020CF0E0: - ands r0, r5, #0x2 - beq _020CF0EC - bl RequestCommandProc -_020CF0EC: - ldr r0, _020CF170 - ldr r1, _020CF164 - ldr r3, [r0] - ldr r5, [r1] - add r1, r3, #0x1 - ldr r2, _020CF174 - str r1, [r0] - str r5, [r2, r3, lsl #2] - cmp r1, #0x8 - movgt r1, #0x0 - ldr r2, _020CF168 - strgt r1, [r0] - ldr r1, _020CF178 - ldr r3, [r2] - ldr r0, [r1] - add ip, r3, #0x1 - add r6, r0, #0x1 - ldr r5, _020CF164 - mov lr, #0x0 - ldr r3, _020CF17C - mov r0, r4 - str lr, [r5] - str lr, [r3] - str ip, [r2] - str r6, [r1] - bl OS_RestoreInterrupts - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r9, lr} - bx lr -_020CF164: .word 0x021D3840 -_020CF168: .word 0x021D3854 -_020CF16C: .word 0x021D3B00 -_020CF170: .word 0x021D3850 -_020CF174: .word 0x021D385C -_020CF178: .word 0x021D3858 -_020CF17C: .word 0x021D3844 - - arm_func_start SND_PushCommand -SND_PushCommand: ; 0x020CF180 - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_DisableInterrupts - ldr r2, _020CF1C0 ; =0x021D3844 - ldr r1, [r2, #0x0] - cmp r1, #0x0 - ldreq r1, _020CF1C4 ; =0x021D3840 - streq r4, [r2, #0x0] - streq r4, [r1, #0x0] - strne r4, [r1, #0x0] - strne r4, [r2, #0x0] - mov r1, #0x0 - str r1, [r4, #0x0] - bl OS_RestoreInterrupts - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CF1C0: .word 0x021D3844 -_020CF1C4: .word 0x021D3840 - - arm_func_start SND_AllocCommand -SND_AllocCommand: - stmdb sp!, {r4,lr} - mov r4, r0 - bl IsCommandAvailable -_020CF1D4: - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - bl AllocCommand - cmp r0, #0x0 - ldmneia sp!, {r4,lr} - bxne lr - ands r0, r4, #0x1 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - bl SND_CountWaitingCommand - cmp r0, #0x0 - ble _020CF238 - mov r4, #0x0 -_020CF214: - mov r0, r4 - bl SND_RecvCommandReply - cmp r0, #0x0 - bne _020CF214 - bl AllocCommand - cmp r0, #0x0 - beq _020CF240 - ldmia sp!, {r4,lr} - bx lr -_020CF238: - mov r0, #0x1 - bl SND_FlushCommand -_020CF240: - bl RequestCommandProc - mov r4, #0x1 -_020CF248: - mov r0, r4 - bl SND_RecvCommandReply - bl AllocCommand - cmp r0, #0x0 - beq _020CF248 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start SND_RecvCommandReply -SND_RecvCommandReply: ; 0x020CF264 - stmdb sp!, {r4-r6,lr} - mov r4, r0 - bl OS_DisableInterrupts - mov r5, r0 - ands r0, r4, #0x1 - beq _020CF2C0 - bl SNDi_GetFinishedCommandTag - ldr r4, _020CF380 ; =0x021D383C - ldr r1, [r4, #0x0] - cmp r1, r0 - bne _020CF2E8 - mov r6, #0x64 -_020CF294: - mov r0, r5 - bl OS_RestoreInterrupts - mov r0, r6 - bl OS_SpinWait - bl OS_DisableInterrupts - mov r5, r0 - bl SNDi_GetFinishedCommandTag - ldr r1, [r4, #0x0] - cmp r1, r0 - beq _020CF294 - b _020CF2E8 -_020CF2C0: - bl SNDi_GetFinishedCommandTag - ldr r1, _020CF380 ; =0x021D383C - ldr r1, [r1, #0x0] - cmp r1, r0 - bne _020CF2E8 - mov r0, r5 - bl OS_RestoreInterrupts -_020CF2DC: - mov r0, #0x0 - ldmia sp!, {r4-r6, lr} - bx lr -_020CF2E8: - ldr r0, _020CF384 ; =0x021D384C - ldr r2, _020CF388 ; =0x021D385C - ldr r3, [r0, #0x0] - add r1, r3, #0x1 - ldr r4, [r2, r3, lsl #0x2] - str r1, [r0, #0x0] - cmp r1, #0x8 - movgt r1, #0x0 - strgt r1, [r0, #0x0] - ldr r0, [r4, #0x0] - mov r1, r4 - cmp r0, #0x0 - beq _020CF32C -_020CF31C: - ldr r1, [r1, #0x0] - ldr r0, [r1, #0x0] - cmp r0, #0x0 - bne _020CF31C -_020CF32C: - ldr r0, _020CF38C ; =0x021D3848 - ldr r3, _020CF390 ; =0x021D3854 - ldr r0, [r0, #0x0] - ldr r2, _020CF380 ; =0x021D383C - cmp r0, #0x0 - strne r4, [r0, #0x0] - ldreq r0, _020CF394 ; =0x021D3838 - ldr lr, [r3, #0x0] - streq r4, [r0, #0x0] - ldr ip, _020CF38C ; =0x021D3848 - sub r6, lr, #0x1 - ldr r0, [r2, #0x0] - str r1, [r12, #0x0] - add lr, r0, #0x1 - mov r0, r5 - str r6, [r3, #0x0] - str lr, [r2, #0x0] - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020CF380: .word 0x021D383C -_020CF384: .word 0x021D384C -_020CF388: .word 0x021D385C -_020CF38C: .word 0x021D3848 -_020CF390: .word 0x021D3854 -_020CF394: .word 0x021D3838 - - arm_func_start SND_CommandInit -SND_CommandInit: ; 0x020CF398 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - bl InitPXI - ldr r3, _020CF478 ; =0x021D3B00 - ldr r0, _020CF47C ; =0x021D3838 - mov r4, #0x0 - str r3, [r0, #0x0] - mov r1, r3 - mov r0, #0x18 -_020CF3BC: - add r4, r4, #0x1 - mla r2, r4, r0, r1 - cmp r4, #0xff - str r2, [r3], #0x18 - blt _020CF3BC - ldr r7, _020CF480 ; =0x021D4B00 - mov r10, #0x0 - ldr r5, _020CF484 ; =0x021D3840 - ldr r4, _020CF488 ; =0x021D3844 - ldr lr, _020CF48C ; =0x021D3854 - ldr ip, _020CF490 ; =0x021D384C - ldr r3, _020CF494 ; =0x021D3850 - ldr r1, _020CF498 ; =0x021D383C - ldr sb, _020CF49C ; =0x021D52E8 - ldr r6, _020CF4A0 ; =0x021D3848 - ldr r2, _020CF4A4 ; =0x021D3858 - mov r8, #0x1 - ldr r0, _020CF4A8 ; =0x021D3880 - ldr fp, _020CF4AC ; =0x021D5360 - str r9, [r6, #0x0] - str r10, [r7, #0x7e8] - str r10, [r5, #0x0] - str r10, [r4, #0x0] - str r10, [lr, #0x0] - str r10, [r12, #0x0] - str r10, [r3, #0x0] - str r8, [r2, #0x0] - str r10, [r1, #0x0] - str r0, [r11, #0x0] - bl SNDi_InitSharedWork - mov r0, r8 - bl SND_AllocCommand -_020CF43C: - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r11, lr} - bxeq lr - mov r2, #0x1D - mov r1, fp - str r2, [r0, #0x4] - ldr r1, [r1] - str r1, [r0, #0x8] - bl SND_PushCommand - mov r0, r8 - bl SND_FlushCommand - add sp, sp, #0x4 - ldmia sp!, {r4-r11, lr} - bx lr -_020CF478: .word 0x021D3B00 -_020CF47C: .word 0x021D3838 -_020CF480: .word 0x021D4B00 -_020CF484: .word 0x021D3840 -_020CF488: .word 0x021D3844 -_020CF48C: .word 0x021D3854 -_020CF490: .word 0x021D384C -_020CF494: .word 0x021D3850 -_020CF498: .word 0x021D383C -_020CF49C: .word 0x021D52E8 -_020CF4A0: .word 0x021D3848 -_020CF4A4: .word 0x021D3858 -_020CF4A8: .word 0x021D3880 -_020CF4AC: .word 0x021D5360 - - arm_func_start SNDi_CallAlarmHandler -SNDi_CallAlarmHandler: ; 0x020CF4B0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, _020CF50C ; =0x021D5300 - and r2, r0, #0xff - mov r1, #0xc - mla r3, r2, r1, r3 - mov r1, r0, asr #0x8 - ldrb r0, [r3, #0x8] - and r1, r1, #0xff - cmp r1, r0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r1, [r3, #0x0] - cmp r1, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - ldr r0, [r3, #0x4] - blx r1 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CF50C: .word 0x021D5300 - - arm_func_start SNDi_SetAlarmHandler -SNDi_SetAlarmHandler: - mov r3, #0xc - mul r3, r0, r3 - ldr r0, _020CF53C ; =0x021D5300 - str r1, [r0, r3] - add r1, r0, r3 - str r2, [r1, #0x4] - ldrb r0, [r1, #0x8] - add r0, r0, #0x1 - strb r0, [r1, #0x8] - ldrb r0, [r1, #0x8] - bx lr - .balign 4 -_020CF53C: .word 0x021D5300 - - arm_func_start SNDi_IncAlarmId -SNDi_IncAlarmId: ; 0x020CF540 - ldr r2, _020CF55C ; =0x021D5300 - mov r1, #0xc - mla r1, r0, r1, r2 - ldrb r0, [r1, #0x8] - add r0, r0, #0x1 - strb r0, [r1, #0x8] - bx lr - .balign 4 -_020CF55C: .word 0x021D5300 - - arm_func_start SND_AlarmInit -SND_AlarmInit: ; 0x020CF560 - ldr r1, _020CF58C ; =0x021D5300 - mov r2, #0x0 - mov r0, r2 -_020CF56C: - str r0, [r1, #0x0] - str r0, [r1, #0x4] - add r2, r2, #0x1 - strb r0, [r1, #0x8] - cmp r2, #0x8 - add r1, r1, #0xc - blt _020CF56C - bx lr - .balign 4 -_020CF58C: .word 0x021D5300 - - arm_func_start SNDi_InitSharedWork -SNDi_InitSharedWork: ; 0x020CF590 - stmdb sp!, {r4,lr} - mov r4, #0x0 - str r4, [r0, #0x4] - strh r4, [r0, #0x8] - strh r4, [r0, #0xa] - mov r12, r0 - str r4, [r0, #0x0] - mov r3, r4 - mvn r2, #0x0 -_020CF5B4: - mov lr, r3 - str r3, [r12, #0x40] -_020CF5BC: - add r1, r12, lr, lsl #0x1 - add lr, lr, #0x1 - strh r2, [r1, #0x20] - cmp lr, #0x10 - blt _020CF5BC - add r4, r4, #0x1 - cmp r4, #0x10 - add r12, r12, #0x24 - blt _020CF5B4 - mov r3, #0x0 - mvn r2, #0x0 -_020CF5E8: - add r1, r0, r3, lsl #0x1 - add r1, r1, #0x200 - add r3, r3, #0x1 - strh r2, [r1, #0x60] - cmp r3, #0x10 - blt _020CF5E8 - mov r1, #0x280 - bl DC_FlushRange - ldmia sp!, {r4,lr} - bx lr - - arm_func_start SNDi_GetFinishedCommandTag -SNDi_GetFinishedCommandTag: ; 0x020CF610 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020CF640 ; =0x021D5360 - mov r1, #0x4 - ldr r0, [r0, #0x0] - bl DC_InvalidateRange - ldr r0, _020CF640 ; =0x021D5360 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CF640: .word 0x021D5360 - - arm_func_start SND_GetPlayerTickCounter -SND_GetPlayerTickCounter: ; 0x020CF644 - stmdb sp!, {r4,lr} - mov r1, #0x24 - mul r4, r0, r1 - ldr r0, _020CF680 ; =0x021D5360 - mov r1, #0x4 - ldr r0, [r0, #0x0] - add r0, r0, #0x40 - add r0, r0, r4 - bl DC_InvalidateRange - ldr r0, _020CF680 ; =0x021D5360 - ldr r0, [r0, #0x0] - add r0, r0, r4 - ldr r0, [r0, #0x40] - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020CF680: .word 0x021D5360 - - arm_func_start SND_GetChannelStatus -SND_GetChannelStatus: ; 0x020CF684 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020CF6B8 ; =0x021D5360 - mov r1, #0x2 - ldr r0, [r0, #0x0] - add r0, r0, #0x8 - bl DC_InvalidateRange - ldr r0, _020CF6B8 ; =0x021D5360 - ldr r0, [r0, #0x0] - ldrh r0, [r0, #0x8] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CF6B8: .word 0x021D5360 - - arm_func_start SND_GetPlayerStatus -SND_GetPlayerStatus: ; 0x020CF6BC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020CF6F0 ; =0x021D5360 - mov r1, #0x4 - ldr r0, [r0, #0x0] - add r0, r0, #0x4 - bl DC_InvalidateRange - ldr r0, _020CF6F0 ; =0x021D5360 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020CF6F0: .word 0x021D5360 - - arm_func_start SND_CalcChannelVolume -SND_CalcChannelVolume: ; 0x020CF6F4 - ldr r1, _020CF75C ; =0xFFFFFD2D - cmp r0, r1 - movlt r0, r1 - blt _020CF70C - cmp r0, #0x0 - movgt r0, #0x0 -_020CF70C: - ldr r1, _020CF760 ; =0x000002D3 - ldr r2, _020CF764 ; =0x02103CAC - add r3, r0, r1 - mvn r1, #0xef - cmp r0, r1 - ldrb r2, [r2, r3] - movlt r0, #0x3 - blt _020CF74C - mvn r1, #0x77 - cmp r0, r1 - movlt r0, #0x2 - blt _020CF74C - mvn r1, #0x3b - cmp r0, r1 - movlt r0, #0x1 - movge r0, #0x0 -_020CF74C: - orr r0, r2, r0, lsl #0x8 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bx lr - .balign 4 -_020CF75C: .word 0xFFFFFD2D -_020CF760: .word 0x000002D3 -_020CF764: .word 0x02103CAC - - arm_func_start SND_GetWaveDataAddress -SND_GetWaveDataAddress: ; 0x020CF768 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - bl SNDi_LockMutex - add r0, r5, r4, lsl #0x2 - ldr r4, [r0, #0x3c] - cmp r4, #0x0 - beq _020CF798 - cmp r4, #0x2000000 - addcc r4, r5, r4 - b _020CF79C -_020CF798: - mov r4, #0x0 -_020CF79C: - bl SNDi_UnlockMutex - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start SND_SetWaveDataAddress -SND_SetWaveDataAddress: ; 0x020CF7B0 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl SNDi_LockMutex - add r0, r6, #0x3c - add r2, r6, r5, lsl #0x2 - add r0, r0, r5, lsl #0x2 - mov r1, #0x4 - str r4, [r2, #0x3c] - bl DC_StoreRange - bl SNDi_UnlockMutex - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start SND_GetWaveDataCount -SND_GetWaveDataCount: ; 0x020CF7E8 - ldr r0, [r0, #0x38] - bx lr - - arm_func_start SND_GetNextInstData -SND_GetNextInstData: ; 0x020CF7F0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r4, [r2, #0x0] - ldr r3, [r0, #0x38] - cmp r4, r3 - bhs _020CF9B8 - mov r12, #0x0 -_020CF80C: - add r3, r0, r4, lsl #0x2 - ldr r4, [r3, #0x3c] - strb r4, [r1, #0x0] - ldrb r3, [r1, #0x0] - cmp r3, #0x10 - bgt _020CF850 - cmp r3, #0x10 - bge _020CF8A8 - cmp r3, #0x5 - addls pc, pc, r3, lsl #0x2 - b _020CF998 -_020CF838: - b _020CF998 - b _020CF85C - b _020CF85C - b _020CF85C - b _020CF85C - b _020CF85C -_020CF850: - cmp r3, #0x11 - beq _020CF924 - b _020CF998 -_020CF85C: - mov r3, r4, lsr #0x8 - add r5, r0, r4, lsr #0x8 - ldrh r4, [r0, r3] - ldrh r3, [r5, #0x2] - add sp, sp, #0x4 - mov r0, #0x1 - strh r4, [r1, #0x2] - strh r3, [r1, #0x4] - ldrh r4, [r5, #0x4] - ldrh r3, [r5, #0x6] - strh r4, [r1, #0x6] - strh r3, [r1, #0x8] - ldrh r3, [r5, #0x8] - strh r3, [r1, #0xA] - ldr r1, [r2] - add r1, r1, #0x1 - str r1, [r2] - ldmia sp!, {r4-r5,lr} - bx lr -_020CF8A8: - add r5, r0, r4, lsr #0x8 - b _020CF904 -_020CF8B0: - mov r0, #0xc - mla r12, lr, r0, r5 - ldrh r4, [r12, #0x2] - ldrh r3, [r12, #0x4] - add sp, sp, #0x4 - mov r0, #0x1 - strh r4, [r1, #0x0] - strh r3, [r1, #0x2] - ldrh r4, [r12, #0x6] - ldrh r3, [r12, #0x8] - strh r4, [r1, #0x4] - strh r3, [r1, #0x6] - ldrh r4, [r12, #0xa] - ldrh r3, [r12, #0xc] - strh r4, [r1, #0x8] - strh r3, [r1, #0xa] - ldr r1, [r2, #0x4] - add r1, r1, #0x1 - str r1, [r2, #0x4] - ldmia sp!, {r4-r5,lr} - bx lr -_020CF904: - ldrb r4, [r5, #0x1] - ldrb r3, [r5, #0x0] - ldr lr, [r2, #0x4] - sub r3, r4, r3 - add r3, r3, #0x1 - cmp lr, r3 - blo _020CF8B0 - b _020CF998 -_020CF924: - add r4, r0, r4, lsr #0x8 - b _020CF98C -_020CF92C: - ldrb lr, [r4, r3] - cmp lr, #0x0 - beq _020CF998 - mov r0, #0xc - mla lr, r3, r0, r4 - ldrh r12, [lr, #0x8] - ldrh r3, [lr, #0xa] - add sp, sp, #0x4 - mov r0, #0x1 - strh r12, [r1, #0x0] - strh r3, [r1, #0x2] - ldrh r12, [lr, #0xc] - ldrh r3, [lr, #0xe] - strh r12, [r1, #0x4] - strh r3, [r1, #0x6] - ldrh r12, [lr, #0x10] - ldrh r3, [lr, #0x12] - strh r12, [r1, #0x8] - strh r3, [r1, #0xa] - ldr r1, [r2, #0x4] - add r1, r1, #0x1 - str r1, [r2, #0x4] - ldmia sp!, {r4-r5,lr} - bx lr -_020CF98C: - ldr r3, [r2, #0x4] - cmp r3, #0x8 - blo _020CF92C -_020CF998: - ldr r3, [r2, #0x0] - add r3, r3, #0x1 - str r3, [r2, #0x0] - str r12, [r2, #0x4] - ldr r4, [r2, #0x0] - ldr r3, [r0, #0x38] - cmp r4, r3 - blo _020CF80C -_020CF9B8: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start SND_GetFirstInstDataPos -SND_GetFirstInstDataPos: ; 0x020CF9C8 - sub sp, sp, #0x8 - mov r1, #0x0 - str r1, [sp, #0x0] - str r1, [sp, #0x4] - str r1, [r0, #0x0] - str r1, [r0, #0x4] - add sp, sp, #0x8 - bx lr - - arm_func_start SND_DestroyWaveArc -SND_DestroyWaveArc: ; 0x020CF9E8 - stmdb sp!, {r4-r6,lr} - mov r4, r0 - bl SNDi_LockMutex - ldr r0, [r4, #0x18] - cmp r0, #0x0 - beq _020CFA28 - mov r5, #0x0 - mov r4, #0x8 -_020CFA08: - ldr r6, [r0, #0x4] - mov r1, r4 - str r5, [r0, #0x0] - str r5, [r0, #0x4] - bl DC_StoreRange - mov r0, r6 - cmp r6, #0x0 - bne _020CFA08 -_020CFA28: - bl SNDi_UnlockMutex - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start SND_DestroyBank -SND_DestroyBank: ; 0x020CFA34 - stmdb sp!, {r4-r8,lr} - mov r7, r0 - bl SNDi_LockMutex - add r5, r7, #0x18 - mov r6, #0x0 - mov r8, #0x8 - mov r4, #0x3c -_020CFA50: - add r1, r7, r6, lsl #0x3 - ldr r0, [r1, #0x18] - cmp r0, #0x0 - beq _020CFAB8 - ldr r3, [r0, #0x18] - cmp r5, r3 - bne _020CFA80 - ldr r2, [r1, #0x1c] - mov r1, r4 - str r2, [r0, #0x18] - bl DC_StoreRange - b _020CFAB8 -_020CFA80: - cmp r3, #0x0 - beq _020CFAA0 -_020CFA88: - ldr r0, [r3, #0x4] - cmp r5, r0 - beq _020CFAA0 - mov r3, r0 - cmp r0, #0x0 - bne _020CFA88 -_020CFAA0: - add r0, r7, r6, lsl #0x3 - ldr r2, [r0, #0x1c] - mov r0, r3 - mov r1, r8 - str r2, [r3, #0x4] - bl DC_StoreRange -_020CFAB8: - add r6, r6, #0x1 - cmp r6, #0x4 - add r5, r5, #0x8 - blt _020CFA50 - bl SNDi_UnlockMutex - ldmia sp!, {r4-r8,lr} - bx lr - - arm_func_start SND_AssignWaveArc -SND_AssignWaveArc: ; 0x020CFAD4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl SNDi_LockMutex - add r3, r6, r5, lsl #0x3 - ldr r2, [r3, #0x18] - mov r12, r5, lsl #0x3 - cmp r2, #0x0 - beq _020CFB70 - cmp r4, r2 - bne _020CFB10 - bl SNDi_UnlockMutex - ldmia sp!, {r4-r6,lr} - bx lr -_020CFB10: - add r1, r6, #0x18 - ldr r0, [r2, #0x18] - add r12, r1, r12 - cmp r12, r0 - bne _020CFB3C - ldr r0, [r3, #0x1c] - mov r1, #0x3c - str r0, [r2, #0x18] - ldr r0, [r3, #0x18] - bl DC_StoreRange - b _020CFB70 -_020CFB3C: - cmp r0, #0x0 - beq _020CFB5C -_020CFB44: - ldr r1, [r0, #0x4] - cmp r12, r1 - beq _020CFB5C - mov r0, r1 - cmp r1, #0x0 - bne _020CFB44 -_020CFB5C: - add r1, r6, r5, lsl #0x3 - ldr r2, [r1, #0x1c] - mov r1, #0x8 - str r2, [r0, #0x4] - bl DC_StoreRange -_020CFB70: - add r0, r6, #0x18 - ldr r1, [r4, #0x18] - add r0, r0, r5, lsl #0x3 - str r0, [r4, #0x18] - add r0, r6, r5, lsl #0x3 - str r1, [r0, #0x1c] - str r4, [r0, #0x18] - bl SNDi_UnlockMutex - mov r0, r6 - mov r1, #0x3c - bl DC_StoreRange - mov r0, r4 - mov r1, #0x3c - bl DC_StoreRange - ldmia sp!, {r4-r6,lr} - bx lr diff --git a/arm9/global.inc b/arm9/global.inc index 0c2ce68e..37a16c3e 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -3592,8 +3592,11 @@ .extern SDK_STATIC_BSS_END
.extern SDK_STATIC_BSS_START
.extern SDK_SYS_STACKSIZE
+.extern SND_AlarmInit
+.extern SND_AllocCommand
.extern SND_AssignWaveArc
.extern SND_CalcChannelVolume
+.extern SND_CommandInit
.extern SND_DestroyBank
.extern SND_DestroyWaveArc
.extern SND_FlushCommand
@@ -3613,6 +3616,7 @@ .extern SND_LockChannel
.extern SND_PauseSeq
.extern SND_PrepareSeq
+.extern SND_PushCommand
.extern SND_RecvCommandReply
.extern SND_ResetMasterPan
.extern SND_SetChannelPan
@@ -3635,6 +3639,13 @@ .extern SND_StopTimer
.extern SND_UnlockChannel
.extern SND_WaitForCommandProc
+.extern SNDi_CallAlarmHandler
+.extern SNDi_GetFinishedCommandTag
+.extern SNDi_IncAlarmId
+.extern SNDi_InitSharedWork
+.extern SNDi_LockMutex
+.extern SNDi_SetAlarmHandler
+.extern SNDi_UnlockMutex
.extern STD_CopyLString
.extern SVC_Sqrt
.extern SVC_WaitByLoop
|