summaryrefslogtreecommitdiff
path: root/arm7/asm/SND_lfo.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm7/asm/SND_lfo.s')
-rw-r--r--arm7/asm/SND_lfo.s77
1 files changed, 77 insertions, 0 deletions
diff --git a/arm7/asm/SND_lfo.s b/arm7/asm/SND_lfo.s
new file mode 100644
index 00000000..cca10305
--- /dev/null
+++ b/arm7/asm/SND_lfo.s
@@ -0,0 +1,77 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start SND_GetLfoValue
+SND_GetLfoValue: ; 0x037FC7F4
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldrb r0, [r4, #2]
+ cmp r0, #0
+ moveq r0, #0
+ beq _037FC83C
+ ldrh r1, [r4, #6]
+ ldrh r0, [r4, #4]
+ cmp r1, r0
+ movcc r0, #0
+ bcc _037FC83C
+ ldrh r0, [r4, #8]
+ mov r0, r0, lsr #8
+ bl SND_SinIdx
+ ldrb r2, [r4, #3]
+ ldrb r1, [r4, #2]
+ mul r0, r1, r0
+ mul r0, r2, r0
+_037FC83C:
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start SND_UpdateLfo
+SND_UpdateLfo: ; 0x037FC844
+ ldrh r2, [r0, #6]
+ ldrh r1, [r0, #4]
+ cmp r2, r1
+ addcc r1, r2, #1
+ strcch r1, [r0, #6]
+ bxcc lr
+ ldrh r2, [r0, #8]
+ ldrb r1, [r0, #1]
+ mov r3, r1, lsl #6
+ add r1, r2, r1, lsl #6
+ mov r2, r1, lsr #8
+ b _037FC878
+_037FC874:
+ sub r2, r2, #128 ; 0x80
+_037FC878:
+ cmp r2, #128 ; 0x80
+ bcs _037FC874
+ ldrh r1, [r0, #8]
+ add r1, r1, r3
+ strh r1, [r0, #8]
+ ldrh r1, [r0, #8]
+ and r1, r1, #255 ; 0xff
+ strh r1, [r0, #8]
+ ldrh r1, [r0, #8]
+ orr r1, r1, r2, lsl #8
+ strh r1, [r0, #8]
+ bx lr
+
+ arm_func_start SND_StartLfo
+SND_StartLfo: ; 0x037FC8A8
+ mov r1, #0
+ strh r1, [r0, #8]
+ strh r1, [r0, #6]
+ bx lr
+
+ arm_func_start SND_InitLfoParam
+SND_InitLfoParam: ; 0x037FC8B8
+ mov r2, #0
+ strb r2, [r0]
+ strb r2, [r0, #2]
+ mov r1, #1
+ strb r1, [r0, #3]
+ mov r1, #16
+ strb r1, [r0, #1]
+ strh r2, [r0, #4]
+ bx lr