summaryrefslogtreecommitdiff
path: root/arm9/asm/NNS_SND_resource_mgr.s
blob: 944754ccae805b38e01d739018e015734d32451a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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