summaryrefslogtreecommitdiff
path: root/arm7/asm/SND_command.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm7/asm/SND_command.s')
-rw-r--r--arm7/asm/SND_command.s629
1 files changed, 629 insertions, 0 deletions
diff --git a/arm7/asm/SND_command.s b/arm7/asm/SND_command.s
new file mode 100644
index 00000000..3b49c224
--- /dev/null
+++ b/arm7/asm/SND_command.s
@@ -0,0 +1,629 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start ReadDriverInfo
+ReadDriverInfo: ; 0x037FF6E4
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ ldr r0, _037FF74C ; =SNDi_Work
+ mov r1, r5
+ mov r2, #4480 ; 0x1180
+ bl MIi_CpuCopy32
+ ldr r1, _037FF74C ; =SNDi_Work
+ add r0, r5, #4096 ; 0x1000
+ str r1, [r0, #448] ; 0x1c0
+ mov r4, #0
+_037FF710:
+ mov r0, r4
+ bl SND_GetChannelControl
+ add r1, r5, r4, lsl #2
+ add r1, r1, #4096 ; 0x1000
+ str r0, [r1, #384] ; 0x180
+ add r4, r4, #1
+ cmp r4, #16
+ blt _037FF710
+ mov r0, #0
+ bl SND_GetLockedChannel
+ add r1, r5, #4096 ; 0x1000
+ str r0, [r1, #452] ; 0x1c4
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FF74C: .word SNDi_Work
+
+ arm_func_start StopTimer
+StopTimer: ; 0x037FF750
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r9, r2
+ mov r5, r3
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r8, #0
+ b _037FF790
+_037FF778:
+ ands r0, r9, #1
+ beq _037FF788
+ mov r0, r8
+ bl SND_StopAlarm
+_037FF788:
+ add r8, r8, #1
+ mov r9, r9, lsr #1
+_037FF790:
+ cmp r8, #8
+ bge _037FF7A0
+ cmp r9, #0
+ bne _037FF778
+_037FF7A0:
+ mov r8, #0
+ b _037FF7C4
+_037FF7A8:
+ ands r0, r7, #1
+ beq _037FF7BC
+ mov r0, r8
+ mov r1, r5
+ bl SND_StopChannel
+_037FF7BC:
+ add r8, r8, #1
+ mov r7, r7, lsr #1
+_037FF7C4:
+ cmp r8, #16
+ bge _037FF7D4
+ cmp r7, #0
+ bne _037FF7A8
+_037FF7D4:
+ ands r0, r6, #1
+ movne r1, #0
+ ldrne r0, _037FF80C ; =0x04000508
+ strneb r1, [r0]
+ ands r0, r6, #2
+ movne r1, #0
+ ldrne r0, _037FF810 ; =0x04000509
+ strneb r1, [r0]
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ bl SND_UpdateSharedWork
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037FF80C: .word 0x04000508
+_037FF810: .word 0x04000509
+
+ arm_func_start StartTimer
+StartTimer: ; 0x037FF814
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r2, #0
+ b _037FF858
+_037FF838:
+ ands r0, r7, #1
+ movne r0, r2, lsl #4
+ addne r0, r0, #67108864 ; 0x4000000
+ ldrneb r1, [r0, #1027] ; 0x403
+ orrne r1, r1, #128 ; 0x80
+ strneb r1, [r0, #1027] ; 0x403
+ add r2, r2, #1
+ mov r7, r7, lsr #1
+_037FF858:
+ cmp r2, #16
+ bge _037FF868
+ cmp r7, #0
+ bne _037FF838
+_037FF868:
+ ands r0, r6, #1
+ beq _037FF8A0
+ ands r0, r6, #2
+ ldreq r1, _037FF8FC ; =0x04000508
+ ldreqb r0, [r1]
+ orreq r0, r0, #128 ; 0x80
+ streqb r0, [r1]
+ beq _037FF8B4
+ ldr r2, _037FF8FC ; =0x04000508
+ ldrh r1, [r2]
+ ldr r0, _037FF900 ; =0x00008080
+ orr r0, r1, r0
+ strh r0, [r2]
+ b _037FF8B4
+_037FF8A0:
+ ands r0, r6, #2
+ ldrne r1, _037FF904 ; =0x04000509
+ ldrneb r0, [r1]
+ orrne r0, r0, #128 ; 0x80
+ strneb r0, [r1]
+_037FF8B4:
+ mov r6, #0
+ b _037FF8D4
+_037FF8BC:
+ ands r0, r5, #1
+ beq _037FF8CC
+ mov r0, r6
+ bl SND_StartAlarm
+_037FF8CC:
+ add r6, r6, #1
+ mov r5, r5, lsr #1
+_037FF8D4:
+ cmp r6, #8
+ bge _037FF8E4
+ cmp r5, #0
+ bne _037FF8BC
+_037FF8E4:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ bl SND_UpdateSharedWork
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FF8FC: .word 0x04000508
+_037FF900: .word 0x00008080
+_037FF904: .word 0x04000509
+
+ arm_func_start SetChannelPan
+SetChannelPan: ; 0x037FF908
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, #0
+ b _037FF938
+_037FF91C:
+ ands r0, r6, #1
+ beq _037FF930
+ mov r0, r4
+ mov r1, r5
+ bl SND_SetChannelPan
+_037FF930:
+ add r4, r4, #1
+ mov r6, r6, lsr #1
+_037FF938:
+ cmp r4, #16
+ bge _037FF948
+ cmp r6, #0
+ bne _037FF91C
+_037FF948:
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start SetChannelVolume
+SetChannelVolume: ; 0x037FF950
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, #0
+ b _037FF98C
+_037FF96C:
+ ands r0, r7, #1
+ beq _037FF984
+ mov r0, r4
+ mov r1, r6
+ mov r2, r5
+ bl SND_SetChannelVolume
+_037FF984:
+ add r4, r4, #1
+ mov r7, r7, lsr #1
+_037FF98C:
+ cmp r4, #16
+ bge _037FF99C
+ cmp r7, #0
+ bne _037FF96C
+_037FF99C:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+
+ arm_func_start SetChannelTimer
+SetChannelTimer: ; 0x037FF9A8
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, #0
+ b _037FF9D8
+_037FF9BC:
+ ands r0, r6, #1
+ beq _037FF9D0
+ mov r0, r4
+ mov r1, r5
+ bl SND_SetChannelTimer
+_037FF9D0:
+ add r4, r4, #1
+ mov r6, r6, lsr #1
+_037FF9D8:
+ cmp r4, #16
+ bge _037FF9E8
+ cmp r6, #0
+ bne _037FF9BC
+_037FF9E8:
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start InitPXI
+InitPXI: ; 0x037FF9F0
+ mov r0, #7
+ ldr r1, _037FFA00 ; =PxiFifoCallback
+ ldr ip, _037FFA04 ; =PXI_SetFifoRecvCallback
+ bx ip
+_037FFA00: .word PxiFifoCallback
+_037FFA04: .word PXI_SetFifoRecvCallback
+
+ arm_func_start PxiFifoCallback
+PxiFifoCallback: ; 0x037FFA08
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r1
+ bl OS_DisableInterrupts
+ mov r4, r0
+ cmp r5, #33554432 ; 0x2000000
+ bcc _037FFA38
+ ldr r0, _037FFA58 ; =_038090EC
+ mov r1, r5
+ mov r2, #0
+ bl OS_SendMessage
+ b _037FFA44
+_037FFA38:
+ cmp r5, #0
+ bne _037FFA44
+ bl SND_SendWakeupMessage
+_037FFA44:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FFA58: .word _038090EC
+
+ arm_func_start SND_CommandProc
+SND_CommandProc: ; 0x037FFA5C
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #52 ; 0x34
+ ldr r7, _037FFEC4 ; =SNDi_SharedWork
+ ldr r9, _037FFEC8 ; =_038090EC
+ add r8, sp, #24
+ mov r4, #0
+ ldr r6, _037FFECC ; =0x0000FFFF
+ ldr r5, _037FFED0 ; =0x003FFFFF
+ b _037FFEA0
+_037FFA80:
+ ldr lr, [sp, #24]
+ b _037FFE88
+_037FFA88:
+ add ip, sp, #28
+ ldmia lr!, {r0, r1, r2, r3}
+ stmia ip!, {r0, r1, r2, r3}
+ ldmia lr, {r0, r1}
+ stmia ip, {r0, r1}
+ ldr r0, [sp, #32]
+ cmp r0, #33 ; 0x21
+ addls pc, pc, r0, lsl #2
+ b _037FFE84
+ b _037FFB34
+ b _037FFB4C
+ b _037FFB58
+ b _037FFB70
+ b _037FFB7C
+ b _037FFB8C
+ b _037FFB9C
+ b _037FFBB4
+ b _037FFBDC
+ b _037FFBF0
+ b _037FFC04
+ b _037FFC20
+ b _037FFC38
+ b _037FFC50
+ b _037FFD08
+ b _037FFD74
+ b _037FFDA8
+ b _037FFC68
+ b _037FFCB0
+ b _037FFCD4
+ b _037FFCE4
+ b _037FFCF8
+ b _037FFDD4
+ b _037FFDE0
+ b _037FFDEC
+ b _037FFDF8
+ b _037FFE10
+ b _037FFE20
+ b _037FFE30
+ b _037FFE70
+ b _037FFE40
+ b _037FFE50
+ b _037FFE60
+ b _037FFE7C
+_037FFB34:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ ldr r2, [sp, #44] ; 0x2c
+ ldr r3, [sp, #48] ; 0x30
+ bl SND_StartSeq
+ b _037FFE84
+_037FFB4C:
+ ldr r0, [sp, #36] ; 0x24
+ bl SND_StopSeq
+ b _037FFE84
+_037FFB58:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ ldr r2, [sp, #44] ; 0x2c
+ ldr r3, [sp, #48] ; 0x30
+ bl SND_PrepareSeq
+ b _037FFE84
+_037FFB70:
+ ldr r0, [sp, #36] ; 0x24
+ bl SND_StartPreparedSeq
+ b _037FFE84
+_037FFB7C:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ bl SND_PauseSeq
+ b _037FFE84
+_037FFB8C:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ bl SND_SkipSeq
+ b _037FFE84
+_037FFB9C:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ ldr r2, [sp, #44] ; 0x2c
+ ldr r3, [sp, #48] ; 0x30
+ bl SNDi_SetPlayerParam
+ b _037FFE84
+_037FFBB4:
+ ldr r1, [sp, #36] ; 0x24
+ mov r0, r1, lsr #24
+ and r0, r0, #255 ; 0xff
+ str r0, [sp]
+ bic r0, r1, #-16777216 ; 0xff000000
+ ldr r1, [sp, #40] ; 0x28
+ ldr r2, [sp, #44] ; 0x2c
+ ldr r3, [sp, #48] ; 0x30
+ bl SNDi_SetTrackParam
+ b _037FFE84
+_037FFBDC:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ ldr r2, [sp, #44] ; 0x2c
+ bl SND_SetTrackMute
+ b _037FFE84
+_037FFBF0:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ ldr r2, [sp, #44] ; 0x2c
+ bl SND_SetTrackAllocatableChannel
+ b _037FFE84
+_037FFC04:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ ldr r2, [sp, #44] ; 0x2c
+ mov r2, r2, lsl #16
+ mov r2, r2, asr #16
+ bl SND_SetPlayerLocalVariable
+ b _037FFE84
+_037FFC20:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ mov r1, r1, lsl #16
+ mov r1, r1, asr #16
+ bl SND_SetPlayerGlobalVariable
+ b _037FFE84
+_037FFC38:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ ldr r2, [sp, #44] ; 0x2c
+ ldr r3, [sp, #48] ; 0x30
+ bl StartTimer
+ b _037FFE84
+_037FFC50:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ ldr r2, [sp, #44] ; 0x2c
+ ldr r3, [sp, #48] ; 0x30
+ bl StopTimer
+ b _037FFE84
+_037FFC68:
+ ldr r1, [sp, #44] ; 0x2c
+ mov r0, r1, lsr #29
+ and r0, r0, #1
+ str r0, [sp]
+ mov r0, r1, lsr #28
+ and r0, r0, #1
+ str r0, [sp, #4]
+ mov r0, r1, lsr #27
+ and r0, r0, #1
+ str r0, [sp, #8]
+ mov r0, r1, lsr #31
+ and r0, r0, #1
+ mov r1, r1, lsr #30
+ and r1, r1, #1
+ ldr r2, [sp, #36] ; 0x24
+ ldr r3, [sp, #40] ; 0x28
+ bl SND_SetupCapture
+ b _037FFE84
+_037FFCB0:
+ ldr r0, [sp, #48] ; 0x30
+ str r0, [sp, #4]
+ ldr r3, [sp, #44] ; 0x2c
+ str r4, [sp]
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ mov r2, #0
+ bl SND_SetupAlarm
+ b _037FFE84
+_037FFCD4:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ bl SetChannelTimer
+ b _037FFE84
+_037FFCE4:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ ldr r2, [sp, #44] ; 0x2c
+ bl SetChannelVolume
+ b _037FFE84
+_037FFCF8:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ bl SetChannelPan
+ b _037FFE84
+_037FFD08:
+ ldr r3, [sp, #48] ; 0x30
+ ldr r1, [sp, #36] ; 0x24
+ ldr r0, [sp, #44] ; 0x2c
+ and r2, r3, r6
+ str r2, [sp]
+ and r2, r0, r5
+ str r2, [sp, #4]
+ mov r2, r0, lsr #24
+ and r2, r2, #127 ; 0x7f
+ str r2, [sp, #8]
+ mov r0, r0, lsr #22
+ and r0, r0, #3
+ str r0, [sp, #12]
+ and r0, r6, r1, lsr #16
+ str r0, [sp, #16]
+ mov r0, r3, lsr #16
+ and r0, r0, #127 ; 0x7f
+ str r0, [sp, #20]
+ and r0, r1, r6
+ ldr r1, [sp, #40] ; 0x28
+ bic r1, r1, #-134217728 ; 0xf8000000
+ mov r2, r3, lsr #24
+ and r2, r2, #3
+ mov r3, r3, lsr #26
+ and r3, r3, #3
+ bl SND_SetupChannelPcm
+ b _037FFE84
+_037FFD74:
+ ldr r1, [sp, #44] ; 0x2c
+ ldr r3, [sp, #40] ; 0x28
+ and r0, r6, r1, lsr #8
+ str r0, [sp]
+ and r0, r1, #127 ; 0x7f
+ str r0, [sp, #4]
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #48] ; 0x30
+ and r2, r3, #127 ; 0x7f
+ mov r3, r3, lsr #8
+ and r3, r3, #3
+ bl SND_SetupChannelPsg
+ b _037FFE84
+_037FFDA8:
+ ldr r3, [sp, #44] ; 0x2c
+ ldr r2, [sp, #40] ; 0x28
+ and r0, r3, #127 ; 0x7f
+ str r0, [sp]
+ ldr r0, [sp, #36] ; 0x24
+ and r1, r2, #127 ; 0x7f
+ mov r2, r2, lsr #8
+ and r2, r2, #3
+ and r3, r6, r3, lsr #8
+ bl SND_SetupChannelNoise
+ b _037FFE84
+_037FFDD4:
+ ldr r0, [sp, #36] ; 0x24
+ bl SNDi_SetSurroundDecay
+ b _037FFE84
+_037FFDE0:
+ ldr r0, [sp, #36] ; 0x24
+ bl SND_SetMasterVolume
+ b _037FFE84
+_037FFDEC:
+ ldr r0, [sp, #36] ; 0x24
+ bl SND_SetMasterPan
+ b _037FFE84
+_037FFDF8:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ ldr r2, [sp, #44] ; 0x2c
+ ldr r3, [sp, #48] ; 0x30
+ bl SND_SetOutputSelector
+ b _037FFE84
+_037FFE10:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ bl SND_LockChannel
+ b _037FFE84
+_037FFE20:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ bl SND_UnlockChannel
+ b _037FFE84
+_037FFE30:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ bl SND_StopUnlockedChannel
+ b _037FFE84
+_037FFE40:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ bl SND_InvalidateSeq
+ b _037FFE84
+_037FFE50:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ bl SND_InvalidateBank
+ b _037FFE84
+_037FFE60:
+ ldr r0, [sp, #36] ; 0x24
+ ldr r1, [sp, #40] ; 0x28
+ bl SND_InvalidateWave
+ b _037FFE84
+_037FFE70:
+ ldr r0, [sp, #36] ; 0x24
+ str r0, [r7]
+ b _037FFE84
+_037FFE7C:
+ ldr r0, [sp, #36] ; 0x24
+ bl ReadDriverInfo
+_037FFE84:
+ ldr lr, [sp, #28]
+_037FFE88:
+ cmp lr, #0
+ bne _037FFA88
+ ldr r1, [r7]
+ ldr r0, [r1]
+ add r0, r0, #1
+ str r0, [r1]
+_037FFEA0:
+ mov r0, r9
+ mov r1, r8
+ mov r2, r4
+ bl OS_ReceiveMessage
+ cmp r0, #0
+ bne _037FFA80
+ add sp, sp, #52 ; 0x34
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037FFEC4: .word SNDi_SharedWork
+_037FFEC8: .word _038090EC
+_037FFECC: .word 0x0000FFFF
+_037FFED0: .word 0x003FFFFF
+
+ arm_func_start SND_CommandInit
+SND_CommandInit: ; 0x037FFED4
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _037FFF08 ; =_038090EC
+ ldr r1, _037FFF0C ; =_0380910C
+ mov r2, #8
+ bl OS_InitMessageQueue
+ bl InitPXI
+ mov r1, #0
+ ldr r0, _037FFF10 ; =SNDi_SharedWork
+ str r1, [r0]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FFF08: .word _038090EC
+_037FFF0C: .word _0380910C
+_037FFF10: .word SNDi_SharedWork