diff options
Diffstat (limited to 'arm7/asm/SND_lfo.s')
-rw-r--r-- | arm7/asm/SND_lfo.s | 77 |
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 |