diff options
Diffstat (limited to 'arm9/asm/NNS_SND_resource_mgr.s')
-rw-r--r-- | arm9/asm/NNS_SND_resource_mgr.s | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/arm9/asm/NNS_SND_resource_mgr.s b/arm9/asm/NNS_SND_resource_mgr.s new file mode 100644 index 00000000..944754cc --- /dev/null +++ b/arm9/asm/NNS_SND_resource_mgr.s @@ -0,0 +1,129 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global sCaptureLock +sCaptureLock: ; 0x021D1CB0 + .space 0x4 + + .global sAlarmLock +sAlarmLock: ; 0x021D1CB4 + .space 0x4 + + .global sChannelLock +sChannelLock: ; 0x021D1CB8 + .space 0x4 + + .section .text + + arm_func_start NNSi_SndInitResourceMgr +NNSi_SndInitResourceMgr: ; 0x020C0270 + ldr r2, _020C0290 ; =sChannelLock + mov r3, #0x0 + ldr r1, _020C0294 ; =sCaptureLock + ldr r0, _020C0298 ; =sAlarmLock + str r3, [r2, #0x0] + str r3, [r1, #0x0] + str r3, [r0, #0x0] + bx lr + .balign 4 +_020C0290: .word sChannelLock +_020C0294: .word sCaptureLock +_020C0298: .word sAlarmLock + + arm_func_start NNS_SndFreeAlarm +NNS_SndFreeAlarm: ; 0x020C029C + ldr r1, _020C02B8 ; =sAlarmLock + mov r2, #0x1 + mvn r0, r2, lsl r0 + ldr r2, [r1, #0x0] + and r0, r2, r0 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020C02B8: .word sAlarmLock + + arm_func_start NNS_SndAllocAlarm +NNS_SndAllocAlarm: ; 0x020C02BC + ldr r0, _020C02FC ; =sAlarmLock + mov r3, #0x1 + ldr r2, [r0, #0x0] + mov r0, #0x0 +_020C02CC: + ands r1, r2, r3 + ldreq r1, _020C02FC ; =sAlarmLock + ldreq r2, [r1, #0x0] + orreq r2, r2, r3 + streq r2, [r1, #0x0] + bxeq lr + add r0, r0, #0x1 + cmp r0, #0x8 + mov r3, r3, lsl #0x1 + blt _020C02CC + mvn r0, #0x0 + bx lr + .balign 4 +_020C02FC: .word sAlarmLock + + arm_func_start NNS_SndUnlockCapture +NNS_SndUnlockCapture: ; 0x020C0300 + ldr r1, _020C0318 ; =sCaptureLock + mvn r0, r0 + ldr r2, [r1, #0x0] + and r0, r2, r0 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020C0318: .word sCaptureLock + + arm_func_start NNS_SndLockCapture +NNS_SndLockCapture: ; 0x020C031C + ldr r1, _020C033C ; =sCaptureLock + ldr r2, [r1, #0x0] + ands r3, r0, r2 + movne r0, #0x0 + orreq r0, r2, r0 + streq r0, [r1, #0x0] + moveq r0, #0x1 + bx lr + .balign 4 +_020C033C: .word sCaptureLock + + arm_func_start NNS_SndUnlockChannel +NNS_SndUnlockChannel: ; 0x020C0340 + stmdb sp!, {r4,lr} + movs r4, r0 + ldmeqia sp!, {r4,pc} + mov r1, #0x0 + bl SND_UnlockChannel + ldr r0, _020C036C ; =sChannelLock + mvn r1, r4 + ldr r2, [r0, #0x0] + and r1, r2, r1 + str r1, [r0, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020C036C: .word sChannelLock + + arm_func_start NNS_SndLockChannel +NNS_SndLockChannel: ; 0x020C0370 + stmdb sp!, {r4,lr} + movs r4, r0 + moveq r0, #0x1 + ldmeqia sp!, {r4,pc} + ldr r1, _020C03B4 ; =sChannelLock + ldr r1, [r1, #0x0] + ands r1, r4, r1 + movne r0, #0x0 + ldmneia sp!, {r4,pc} + mov r1, #0x0 + bl SND_LockChannel + ldr r1, _020C03B4 ; =sChannelLock + mov r0, #0x1 + ldr r2, [r1, #0x0] + orr r2, r2, r4 + str r2, [r1, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020C03B4: .word sChannelLock |