summaryrefslogtreecommitdiff
path: root/arm7/asm/SND_util.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm7/asm/SND_util.s')
-rw-r--r--arm7/asm/SND_util.s184
1 files changed, 184 insertions, 0 deletions
diff --git a/arm7/asm/SND_util.s b/arm7/asm/SND_util.s
new file mode 100644
index 00000000..256f5f41
--- /dev/null
+++ b/arm7/asm/SND_util.s
@@ -0,0 +1,184 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start SND_CalcRandom
+SND_CalcRandom: ; 0x037FC058
+ ldr r2, _037FC080 ; =_03807660
+ ldr r3, [r2]
+ ldr r0, _037FC084 ; =0x0019660D
+ ldr r1, _037FC088 ; =0x3C6EF35F
+ mla r0, r3, r0, r1
+ str r0, [r2]
+ mov r0, r0, lsr #16
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ bx lr
+_037FC080: .word _03807660
+_037FC084: .word 0x0019660D
+_037FC088: .word 0x3C6EF35F
+
+ arm_func_start SND_SinIdx
+SND_SinIdx: ; 0x037FC08C
+ cmp r0, #32
+ ldrlt r1, _037FC0F4 ; =_03807170
+ ldrltsb r0, [r1, r0]
+ bxlt lr
+ cmp r0, #64 ; 0x40
+ rsblt r1, r0, #64 ; 0x40
+ ldrlt r0, _037FC0F4 ; =_03807170
+ ldrltsb r0, [r0, r1]
+ bxlt lr
+ cmp r0, #96 ; 0x60
+ bge _037FC0D4
+ sub r1, r0, #64 ; 0x40
+ ldr r0, _037FC0F4 ; =_03807170
+ ldrsb r0, [r0, r1]
+ rsb r0, r0, #0
+ mov r0, r0, lsl #24
+ mov r0, r0, asr #24
+ bx lr
+_037FC0D4:
+ sub r0, r0, #96 ; 0x60
+ rsb r1, r0, #32
+ ldr r0, _037FC0F4 ; =_03807170
+ ldrsb r0, [r0, r1]
+ rsb r0, r0, #0
+ mov r0, r0, lsl #24
+ mov r0, r0, asr #24
+ bx lr
+_037FC0F4: .word _03807170
+
+ arm_func_start SND_CalcChannelVolume
+SND_CalcChannelVolume: ; 0x037FC0F8
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r0, _037FC168 ; =0xFFFFFD2D
+ cmp r4, r0
+ movlt r4, r0
+ blt _037FC118
+ cmp r4, #0
+ movgt r4, #0
+_037FC118:
+ ldr r0, _037FC16C ; =0x000002D3
+ add r0, r4, r0
+ bl FUN_037FC170
+ mvn r1, #239 ; 0xef
+ cmp r4, r1
+ movlt r1, #3
+ blt _037FC154
+ mvn r1, #119 ; 0x77
+ cmp r4, r1
+ movlt r1, #2
+ blt _037FC154
+ mvn r1, #59 ; 0x3b
+ cmp r4, r1
+ movlt r1, #1
+ movge r1, #0
+_037FC154:
+ orr r0, r0, r1, lsl #8
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FC168: .word 0xFFFFFD2D
+_037FC16C: .word 0x000002D3
+
+ arm_func_start FUN_037FC170
+FUN_037FC170: ; 0x037FC170
+ ldr ip, _037FC178 ; =SVC_GetVolumeTable
+ bx ip
+_037FC178: .word SVC_GetVolumeTable
+
+ arm_func_start SND_CalcTimer
+SND_CalcTimer: ; 0x037FC17C
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ mov r4, #0
+ rsb r0, r1, #0
+ b _037FC19C
+_037FC194:
+ sub r4, r4, #1
+ add r0, r0, #768 ; 0x300
+_037FC19C:
+ cmp r0, #0
+ blt _037FC194
+ b _037FC1B0
+_037FC1A8:
+ add r4, r4, #1
+ sub r0, r0, #768 ; 0x300
+_037FC1B0:
+ cmp r0, #768 ; 0x300
+ bge _037FC1A8
+ bl FUN_037FC2A4
+ mov r2, #0
+ mov r1, #65536 ; 0x10000
+ adds lr, r0, r1
+ adc ip, r2, #0
+ mov r3, r5, asr #31
+ umull r1, r0, lr, r5
+ mla r0, lr, r3, r0
+ mla r0, ip, r5, r0
+ sub lr, r4, #16
+ cmp lr, #0
+ bgt _037FC208
+ rsb r2, lr, #0
+ mov r3, r0, lsr r2
+ mov r5, r1, lsr r2
+ rsb r1, r2, #32
+ orr r5, r5, r0, lsl r1
+ sub r1, r2, #32
+ orr r5, r5, r0, lsr r1
+ b _037FC264
+_037FC208:
+ cmp lr, #32
+ bge _037FC25C
+ mvn r5, #0
+ rsb r4, lr, #32
+ mov ip, r5, lsl r4
+ rsb r3, r4, #32
+ orr ip, ip, r5, lsr r3
+ sub r3, r4, #32
+ orr ip, ip, r5, lsl r3
+ and r3, r0, ip
+ and r5, r1, r5, lsl r4
+ cmp r3, r2
+ cmpeq r5, r2
+ ldrne r0, _037FC2A0 ; =0x0000FFFF
+ bne _037FC294
+ mov r5, r1, lsl lr
+ mov r3, r0, lsl lr
+ orr r3, r3, r1, lsr r4
+ sub r0, lr, #32
+ orr r3, r3, r1, lsl r0
+ b _037FC264
+_037FC25C:
+ ldr r0, _037FC2A0 ; =0x0000FFFF
+ b _037FC294
+_037FC264:
+ mov r1, #0
+ mov r0, #16
+ cmp r3, r1
+ cmpeq r5, r0
+ movcc r5, r0
+ bcc _037FC28C
+ ldr r0, _037FC2A0 ; =0x0000FFFF
+ cmp r3, r1
+ cmpeq r5, r0
+ movhi r5, r0
+_037FC28C:
+ mov r0, r5, lsl #16
+ mov r0, r0, lsr #16
+_037FC294:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FC2A0: .word 0x0000FFFF
+
+ arm_func_start FUN_037FC2A4
+FUN_037FC2A4: ; 0x037FC2A4
+ ldr ip, _037FC2AC ; =SVC_GetPitchTable
+ bx ip
+_037FC2AC: .word SVC_GetPitchTable