summaryrefslogtreecommitdiff
path: root/arm7/asm/SND_seq.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm7/asm/SND_seq.s')
-rw-r--r--arm7/asm/SND_seq.s549
1 files changed, 549 insertions, 0 deletions
diff --git a/arm7/asm/SND_seq.s b/arm7/asm/SND_seq.s
new file mode 100644
index 00000000..cbf98551
--- /dev/null
+++ b/arm7/asm/SND_seq.s
@@ -0,0 +1,549 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start SNDi_SetTrackParam
+SNDi_SetTrackParam: ; 0x037FE9F4
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov sl, r1
+ mov r9, r2
+ mov r8, r3
+ ldr r7, [sp, #40] ; 0x28
+ ldr r2, _037FEA94 ; =_038084AC
+ mov r1, #36 ; 0x24
+ mla fp, r0, r1, r2
+ mov r6, #0
+ mov r0, r8, lsl #16
+ mov r4, r0, lsr #16
+ and r5, r8, #255 ; 0xff
+ b _037FEA78
+_037FEA2C:
+ ands r0, sl, #1
+ beq _037FEA70
+ mov r0, fp
+ mov r1, r6
+ bl FUN_037FE460
+ cmp r0, #0
+ beq _037FEA70
+ cmp r7, #1
+ beq _037FEA64
+ cmp r7, #2
+ beq _037FEA6C
+ cmp r7, #4
+ streq r8, [r0, r9]
+ b _037FEA70
+_037FEA64:
+ strb r5, [r0, r9]
+ b _037FEA70
+_037FEA6C:
+ strh r4, [r0, r9]
+_037FEA70:
+ add r6, r6, #1
+ mov sl, sl, lsr #1
+_037FEA78:
+ cmp r6, #16
+ bge _037FEA88
+ cmp sl, #0
+ bne _037FEA2C
+_037FEA88:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_037FEA94: .word _038084AC
+
+ arm_func_start SNDi_SetPlayerParam
+SNDi_SetPlayerParam: ; 0x037FEA98
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr lr, _037FEAE0 ; =_038084AC
+ mov ip, #36 ; 0x24
+ mla ip, r0, ip, lr
+ cmp r3, #1
+ beq _037FEAC8
+ cmp r3, #2
+ beq _037FEAD0
+ cmp r3, #4
+ streq r2, [ip, r1]
+ b _037FEAD4
+_037FEAC8:
+ strb r2, [ip, r1]
+ b _037FEAD4
+_037FEAD0:
+ strh r2, [ip, r1]
+_037FEAD4:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FEAE0: .word _038084AC
+
+ arm_func_start SND_InvalidateBank
+SND_InvalidateBank: ; 0x037FEAE4
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r7, r0
+ mov r6, r1
+ mov r5, #0
+ ldr r4, _037FEB40 ; =_038084AC
+ mov r8, #36 ; 0x24
+_037FEAFC:
+ mul r1, r5, r8
+ add r0, r4, r1
+ ldrb r1, [r4, r1]
+ mov r1, r1, lsl #31
+ movs r1, r1, lsr #31
+ beq _037FEB2C
+ ldr r1, [r0, #32]
+ cmp r7, r1
+ bhi _037FEB2C
+ cmp r1, r6
+ bhi _037FEB2C
+ bl FUN_037FE3AC
+_037FEB2C:
+ add r5, r5, #1
+ cmp r5, #16
+ blt _037FEAFC
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037FEB40: .word _038084AC
+
+ arm_func_start SND_InvalidateSeq
+SND_InvalidateSeq: ; 0x037FEB44
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov sl, r0
+ mov r9, r1
+ mov r7, #0
+ mov r5, r7
+ ldr fp, _037FEBDC ; =_038084AC
+ mov r4, #36 ; 0x24
+_037FEB64:
+ mul r0, r7, r4
+ add r8, fp, r0
+ ldrb r0, [fp, r0]
+ mov r0, r0, lsl #31
+ movs r0, r0, lsr #31
+ beq _037FEBC4
+ mov r6, r5
+ b _037FEBBC
+_037FEB84:
+ mov r0, r8
+ mov r1, r6
+ bl FUN_037FE460
+ cmp r0, #0
+ beq _037FEBB8
+ ldr r0, [r0, #40] ; 0x28
+ cmp sl, r0
+ bhi _037FEBB8
+ cmp r0, r9
+ bhi _037FEBB8
+ mov r0, r8
+ bl FUN_037FE3AC
+ b _037FEBC4
+_037FEBB8:
+ add r6, r6, #1
+_037FEBBC:
+ cmp r6, #16
+ blt _037FEB84
+_037FEBC4:
+ add r7, r7, #1
+ cmp r7, #16
+ blt _037FEB64
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_037FEBDC: .word _038084AC
+
+ arm_func_start SND_SetTrackAllocatableChannel
+SND_SetTrackAllocatableChannel: ; 0x037FEBE0
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r6, r1
+ ldr r3, _037FEC54 ; =_038084AC
+ mov r1, #36 ; 0x24
+ mla r5, r0, r1, r3
+ mov r4, #0
+ mov r0, r2, lsl #16
+ mov r7, r0, lsr #16
+ b _037FEC38
+_037FEC08:
+ ands r0, r6, #1
+ beq _037FEC30
+ mov r0, r5
+ mov r1, r4
+ bl FUN_037FE460
+ cmp r0, #0
+ strneh r7, [r0, #30]
+ ldrneb r1, [r0]
+ orrne r1, r1, #128 ; 0x80
+ strneb r1, [r0]
+_037FEC30:
+ add r4, r4, #1
+ mov r6, r6, lsr #1
+_037FEC38:
+ cmp r4, #16
+ bge _037FEC48
+ cmp r6, #0
+ bne _037FEC08
+_037FEC48:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FEC54: .word _038084AC
+
+ arm_func_start SND_SetTrackMute
+SND_SetTrackMute: ; 0x037FEC58
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r1
+ mov r6, r2
+ ldr r2, _037FECC8 ; =_038084AC
+ mov r1, #36 ; 0x24
+ mla r5, r0, r1, r2
+ mov r4, #0
+ b _037FECAC
+_037FEC7C:
+ ands r0, r7, #1
+ beq _037FECA4
+ mov r0, r5
+ mov r1, r4
+ bl FUN_037FE460
+ cmp r0, #0
+ beq _037FECA4
+ mov r1, r5
+ mov r2, r6
+ bl FUN_037FD440
+_037FECA4:
+ add r4, r4, #1
+ mov r7, r7, lsr #1
+_037FECAC:
+ cmp r4, #16
+ bge _037FECBC
+ cmp r7, #0
+ bne _037FEC7C
+_037FECBC:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FECC8: .word _038084AC
+
+ arm_func_start SND_SkipSeq
+SND_SkipSeq: ; 0x037FECCC
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r6, r1
+ ldr r2, _037FED90 ; =_038084AC
+ mov r1, #36 ; 0x24
+ mla r5, r0, r1, r2
+ mov r8, #0
+ mov r4, #127 ; 0x7f
+_037FECE8:
+ mov r0, r5
+ mov r1, r8
+ bl FUN_037FE460
+ movs r7, r0
+ beq _037FED10
+ mov r1, r5
+ mov r2, r4
+ bl FUN_037FE588
+ mov r0, r7
+ bl FUN_037FE54C
+_037FED10:
+ add r8, r8, #1
+ cmp r8, #16
+ blt _037FECE8
+ bl SND_StopIntervalTimer
+ mov r4, #0
+ mov r7, r4
+ b _037FED50
+_037FED2C:
+ mov r0, r5
+ mov r1, r7
+ bl FUN_037FD548
+ cmp r0, #0
+ beq _037FED4C
+ mov r0, r5
+ bl FUN_037FE3AC
+ b _037FED58
+_037FED4C:
+ add r4, r4, #1
+_037FED50:
+ cmp r4, r6
+ bcc _037FED2C
+_037FED58:
+ bl SND_StartIntervalTimer
+ ldr r0, _037FED94 ; =SNDi_SharedWork
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _037FED88
+ add r3, r0, #64 ; 0x40
+ ldrb r1, [r5, #1]
+ mov r0, #36 ; 0x24
+ mul r2, r1, r0
+ ldr r0, [r3, r2]
+ add r0, r0, r4
+ str r0, [r3, r2]
+_037FED88:
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037FED90: .word _038084AC
+_037FED94: .word SNDi_SharedWork
+
+ arm_func_start SND_PauseSeq
+SND_PauseSeq: ; 0x037FED98
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ ldr r5, _037FEE18 ; =_038084AC
+ mov r2, #36 ; 0x24
+ mul r3, r0, r2
+ add r4, r5, r3
+ ldrb r0, [r5, r3]
+ bic r2, r0, #4
+ and r0, r1, #255 ; 0xff
+ and r0, r0, #1
+ orr r0, r2, r0, lsl #2
+ strb r0, [r5, r3]
+ cmp r1, #0
+ beq _037FEE0C
+ mov r7, #0
+ mov r5, #127 ; 0x7f
+_037FEDD8:
+ mov r0, r4
+ mov r1, r7
+ bl FUN_037FE460
+ movs r6, r0
+ beq _037FEE00
+ mov r1, r4
+ mov r2, r5
+ bl FUN_037FE588
+ mov r0, r6
+ bl FUN_037FE54C
+_037FEE00:
+ add r7, r7, #1
+ cmp r7, #16
+ blt _037FEDD8
+_037FEE0C:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FEE18: .word _038084AC
+
+ arm_func_start SND_StopSeq
+SND_StopSeq: ; 0x037FEE1C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r2, _037FEE70 ; =_038084AC
+ mov r0, #36 ; 0x24
+ mul r1, r4, r0
+ add r0, r2, r1
+ ldrb r1, [r2, r1]
+ mov r1, r1, lsl #31
+ movs r1, r1, lsr #31
+ beq _037FEE68
+ bl FUN_037FE3AC
+ ldr r0, _037FEE74 ; =SNDi_SharedWork
+ ldr r2, [r0]
+ cmp r2, #0
+ ldrne r1, [r2, #4]
+ movne r0, #1
+ mvnne r0, r0, lsl r4
+ andne r0, r1, r0
+ strne r0, [r2, #4]
+_037FEE68:
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FEE70: .word _038084AC
+_037FEE74: .word SNDi_SharedWork
+
+ arm_func_start SND_StartSeq
+SND_StartSeq: ; 0x037FEE78
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ bl SND_PrepareSeq
+ mov r0, r4
+ bl SND_StartPreparedSeq
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start SND_StartPreparedSeq
+SND_StartPreparedSeq: ; 0x037FEE94
+ ldr r2, _037FEEB0 ; =_038084AC
+ mov r1, #36 ; 0x24
+ mul r1, r0, r1
+ ldrb r0, [r2, r1]
+ orr r0, r0, #2
+ strb r0, [r2, r1]
+ bx lr
+_037FEEB0: .word _038084AC
+
+ arm_func_start SND_PrepareSeq
+SND_PrepareSeq: ; 0x037FEEB4
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ mov r8, r1
+ mov r6, r2
+ mov r5, r3
+ ldr r1, _037FEFFC ; =_038084AC
+ mov r0, #36 ; 0x24
+ mul r0, r4, r0
+ add r7, r1, r0
+ ldrb r0, [r1, r0]
+ mov r0, r0, lsl #31
+ movs r0, r0, lsr #31
+ beq _037FEEF4
+ mov r0, r7
+ bl FUN_037FE3AC
+_037FEEF4:
+ mov r0, r7
+ mov r1, r5
+ bl FUN_037FE5F8
+ bl FUN_037FD4C0
+ movs r9, r0
+ bmi _037FEFF0
+ ldr r0, _037FF000 ; =_038086EC
+ add r5, r0, r9, lsl #6
+ mov r0, r5
+ bl FUN_037FE6BC
+ mov r0, r5
+ mov r1, r8
+ mov r2, r6
+ bl FUN_037FE6A8
+ strb r9, [r7, #8]
+ ldr r0, [r5, #40] ; 0x28
+ bl FUN_037FE9B8
+ ldr r0, [r5, #40] ; 0x28
+ bl FUN_037FE968
+ add r2, r5, #40 ; 0x28
+ ldr r1, [r5, #40] ; 0x28
+ add r1, r1, #1
+ str r1, [r5, #40] ; 0x28
+ cmp r0, #254 ; 0xfe
+ ldrne r0, [r2]
+ subne r0, r0, #1
+ strne r0, [r2]
+ bne _037FEFB8
+ mov r0, r5
+ bl FUN_037FE918
+ mov r0, r0, lsl #15
+ mov r5, r0, lsr #16
+ mov r6, #1
+ ldr r8, _037FF000 ; =_038086EC
+ b _037FEFB0
+_037FEF80:
+ ands r0, r5, #1
+ beq _037FEFA4
+ bl FUN_037FD4C0
+ movs r9, r0
+ bmi _037FEFB8
+ add r0, r8, r9, lsl #6
+ bl FUN_037FE6BC
+ add r0, r7, r6
+ strb r9, [r0, #8]
+_037FEFA4:
+ add r6, r6, #1
+ mov r0, r5, lsl #15
+ mov r5, r0, lsr #16
+_037FEFB0:
+ cmp r5, #0
+ bne _037FEF80
+_037FEFB8:
+ ldrb r0, [r7]
+ bic r0, r0, #1
+ orr r0, r0, #1
+ strb r0, [r7]
+ ldrb r0, [r7]
+ bic r0, r0, #2
+ strb r0, [r7]
+ ldr r0, _037FF004 ; =SNDi_SharedWork
+ ldr r2, [r0]
+ cmp r2, #0
+ ldrne r1, [r2, #4]
+ movne r0, #1
+ orrne r0, r1, r0, lsl r4
+ strne r0, [r2, #4]
+_037FEFF0:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037FEFFC: .word _038084AC
+_037FF000: .word _038086EC
+_037FF004: .word SNDi_SharedWork
+
+ arm_func_start SND_SeqMain
+SND_SeqMain: ; 0x037FF008
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ mov r8, r0
+ mov r5, #0
+ mov r6, r5
+ mov sl, #1
+ ldr r4, _037FF0A0 ; =_038084AC
+ mov r9, #36 ; 0x24
+_037FF024:
+ mul r0, r6, r9
+ add r7, r4, r0
+ ldrb r1, [r4, r0]
+ mov r0, r1, lsl #31
+ movs r0, r0, lsr #31
+ beq _037FF07C
+ mov r0, r1, lsl #30
+ movs r0, r0, lsr #31
+ beq _037FF06C
+ cmp r8, #0
+ beq _037FF064
+ mov r0, r1, lsl #29
+ movs r0, r0, lsr #31
+ bne _037FF064
+ mov r0, r7
+ bl FUN_037FE48C
+_037FF064:
+ mov r0, r7
+ bl FUN_037FE1A0
+_037FF06C:
+ ldrb r0, [r7]
+ mov r0, r0, lsl #31
+ movs r0, r0, lsr #31
+ orrne r5, r5, sl, lsl r6
+_037FF07C:
+ add r6, r6, #1
+ cmp r6, #16
+ blt _037FF024
+ ldr r0, _037FF0A4 ; =SNDi_SharedWork
+ ldr r0, [r0]
+ cmp r0, #0
+ strne r5, [r0, #4]
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ bx lr
+_037FF0A0: .word _038084AC
+_037FF0A4: .word SNDi_SharedWork
+
+ arm_func_start SND_SeqInit
+SND_SeqInit: ; 0x037FF0A8
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov lr, #0
+ ldr r3, _037FF10C ; =_038084AC
+ mov r0, #36 ; 0x24
+_037FF0BC:
+ mul r2, lr, r0
+ add ip, r3, r2
+ ldrb r1, [r3, r2]
+ bic r1, r1, #1
+ strb r1, [r3, r2]
+ strb lr, [ip, #1]
+ add lr, lr, #1
+ cmp lr, #16
+ blt _037FF0BC
+ mov r2, #0
+ ldr r1, _037FF110 ; =_038086EC
+_037FF0E8:
+ ldrb r0, [r1, r2, lsl #6]
+ bic r0, r0, #1
+ strb r0, [r1, r2, lsl #6]
+ add r2, r2, #1
+ cmp r2, #32
+ blt _037FF0E8
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FF10C: .word _038084AC
+_037FF110: .word _038086EC