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