summaryrefslogtreecommitdiff
path: root/arm9/asm/NNS_SND_resource_mgr.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/NNS_SND_resource_mgr.s')
-rw-r--r--arm9/asm/NNS_SND_resource_mgr.s129
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