summaryrefslogtreecommitdiff
path: root/arm7/asm/SND_channel.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm7/asm/SND_channel.s')
-rw-r--r--arm7/asm/SND_channel.s208
1 files changed, 208 insertions, 0 deletions
diff --git a/arm7/asm/SND_channel.s b/arm7/asm/SND_channel.s
new file mode 100644
index 00000000..850c06f3
--- /dev/null
+++ b/arm7/asm/SND_channel.s
@@ -0,0 +1,208 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start FUN_037FC530
+FUN_037FC530: ; 0x037FC530
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, r1
+ add r0, r6, #40 ; 0x28
+ bl SND_GetLfoValue
+ mov r4, r0
+ mov ip, r0, asr #31
+ mov r3, #0
+ cmp ip, r3
+ cmpeq r0, r3
+ beq _037FC5B0
+ ldrb r1, [r6, #40] ; 0x28
+ cmp r1, #0
+ beq _037FC59C
+ cmp r1, #1
+ beq _037FC584
+ cmp r1, #2
+ moveq ip, ip, lsl #6
+ orreq ip, ip, r0, lsr #26
+ moveq r4, r0, lsl #6
+ b _037FC5A8
+_037FC584:
+ mov r2, #60 ; 0x3c
+ umull r4, r1, r0, r2
+ mla r1, r0, r3, r1
+ mla r1, ip, r2, r1
+ mov ip, r1
+ b _037FC5A8
+_037FC59C:
+ mov ip, ip, lsl #6
+ orr ip, ip, r0, lsr #26
+ mov r4, r0, lsl #6
+_037FC5A8:
+ mov r4, r4, lsr #14
+ orr r4, r4, ip, lsl #18
+_037FC5B0:
+ cmp r5, #0
+ beq _037FC5C0
+ add r0, r6, #40 ; 0x28
+ bl SND_UpdateLfo
+_037FC5C0:
+ mov r0, r4
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_037FC5CC
+FUN_037FC5CC: ; 0x037FC5CC
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ mov r5, r1
+ ldrsh r3, [r4, #50] ; 0x32
+ cmp r3, #0
+ moveq r0, #0
+ beq _037FC630
+ ldr r0, [r4, #20]
+ ldr r2, [r4, #24]
+ cmp r0, r2
+ movge r0, #0
+ bge _037FC630
+ sub r0, r2, r0
+ smull r0, r1, r3, r0
+ mov r3, r2, asr #31
+ bl _ll_sdiv
+ cmp r5, #0
+ beq _037FC630
+ ldrb r1, [r4, #3]
+ mov r1, r1, lsl #29
+ movs r1, r1, lsr #31
+ ldrne r1, [r4, #20]
+ addne r1, r1, #1
+ strne r1, [r4, #20]
+_037FC630:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_037FC63C
+FUN_037FC63C: ; 0x037FC63C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldrh lr, [r0, #36] ; 0x24
+ and r2, lr, #255 ; 0xff
+ ldrh ip, [r1, #36] ; 0x24
+ and r0, ip, #255 ; 0xff
+ mov r2, r2, lsl #4
+ mov r3, r0, lsl #4
+ ldr r1, _037FC698 ; =_03807294
+ ldrb r0, [r1, lr, asr #8]
+ mov r2, r2, asr r0
+ ldrb r0, [r1, ip, asr #8]
+ mov r0, r3, asr r0
+ cmp r2, r0
+ beq _037FC688
+ cmp r2, r0
+ movlt r0, #1
+ mvnge r0, #0
+ b _037FC68C
+_037FC688:
+ mov r0, #0
+_037FC68C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FC698: .word _03807294
+
+ arm_func_start FUN_037FC69C
+FUN_037FC69C: ; 0x037FC69C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r0, _037FC6E4 ; =0xFFFE9680
+ str r0, [r4, #16]
+ mov r0, #0
+ strb r0, [r4, #2]
+ str r1, [r4, #52] ; 0x34
+ add r0, r4, #40 ; 0x28
+ bl SND_StartLfo
+ ldrb r0, [r4, #3]
+ orr r0, r0, #2
+ strb r0, [r4, #3]
+ ldrb r0, [r4, #3]
+ bic r0, r0, #1
+ orr r0, r0, #1
+ strb r0, [r4, #3]
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FC6E4: .word 0xFFFE9680
+
+ arm_func_start FUN_037FC6E8
+FUN_037FC6E8: ; 0x037FC6E8
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov ip, #0
+ str ip, [r4, #80] ; 0x50
+ str r1, [r4, #72] ; 0x48
+ str r2, [r4, #76] ; 0x4c
+ str ip, [r4, #52] ; 0x34
+ strb r3, [r4, #34] ; 0x22
+ mov r1, #127 ; 0x7f
+ strh r1, [r4, #36] ; 0x24
+ ldrb r2, [r4, #3]
+ bic r2, r2, #2
+ strb r2, [r4, #3]
+ ldrb r2, [r4, #3]
+ orr r2, r2, #4
+ strb r2, [r4, #3]
+ mov r2, #60 ; 0x3c
+ strb r2, [r4, #8]
+ strb r2, [r4, #5]
+ strb r1, [r4, #9]
+ strb ip, [r4, #10]
+ strh ip, [r4, #12]
+ strh ip, [r4, #6]
+ strh ip, [r4, #14]
+ strb ip, [r4, #11]
+ strb r1, [r4, #4]
+ strh ip, [r4, #50] ; 0x32
+ str ip, [r4, #24]
+ str ip, [r4, #20]
+ bl SND_SetExChannelAttack
+ mov r0, r4
+ mov r1, #127 ; 0x7f
+ bl SND_SetExChannelDecay
+ mov r0, r4
+ mov r1, #127 ; 0x7f
+ bl SND_SetExChannelSustain
+ mov r0, r4
+ mov r1, #127 ; 0x7f
+ bl SND_SetExChannelRelease
+ add r0, r4, #40 ; 0x28
+ bl SND_InitLfoParam
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_037FC794
+FUN_037FC794: ; 0x037FC794
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r1, r0
+ cmp r1, #127 ; 0x7f
+ ldreq r0, _037FC7F0 ; =0x0000FFFF
+ beq _037FC7E4
+ cmp r1, #126 ; 0x7e
+ moveq r0, #15360 ; 0x3c00
+ beq _037FC7E4
+ cmp r1, #50 ; 0x32
+ movlt r0, r1, lsl #1
+ addlt r0, r0, #1
+ movlt r0, r0, lsl #16
+ movlt r0, r0, lsr #16
+ blt _037FC7E4
+ mov r0, #7680 ; 0x1e00
+ rsb r1, r1, #126 ; 0x7e
+ bl _s32_div_f
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+_037FC7E4:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FC7F0: .word 0x0000FFFF