summaryrefslogtreecommitdiff
path: root/arm7/asm/SND.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm7/asm/SND.s')
-rw-r--r--arm7/asm/SND.s484
1 files changed, 484 insertions, 0 deletions
diff --git a/arm7/asm/SND.s b/arm7/asm/SND.s
new file mode 100644
index 00000000..75c5b32f
--- /dev/null
+++ b/arm7/asm/SND.s
@@ -0,0 +1,484 @@
+#todo split further
+
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start SND_SetOutputSelector
+SND_SetOutputSelector: ; 0x037FBA0C
+ ldr ip, _037FBA40 ; =0x04000501
+ ldrb ip, [ip]
+ ands ip, ip, #128 ; 0x80
+ movne ip, #1
+ moveq ip, #0
+ mov ip, ip, lsl #7
+ orr r3, ip, r3, lsl #5
+ orr r2, r3, r2, lsl #4
+ orr r1, r2, r1, lsl #2
+ orr r1, r0, r1
+ ldr r0, _037FBA40 ; =0x04000501
+ strb r1, [r0]
+ bx lr
+_037FBA40: .word 0x04000501
+
+ arm_func_start SND_SetMasterVolume
+SND_SetMasterVolume: ; 0x037FBA44
+ ldr r1, _037FBA50 ; =0x04000500
+ strb r0, [r1]
+ bx lr
+_037FBA50: .word 0x04000500
+
+ arm_func_start SND_EndSleep
+SND_EndSleep: ; 0x037FBA54
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _037FBA94 ; =0x04000304
+ ldrh r0, [r1]
+ orr r0, r0, #1
+ strh r0, [r1]
+ mov r0, #1
+ bl PMi_SetControl
+ mov r0, #256 ; 0x100
+ bl FUN_037FBA9C
+ ldr r0, _037FBA98 ; =0x0007AB80
+ bl OS_SpinWait
+ bl SND_Enable
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FBA94: .word 0x04000304
+_037FBA98: .word 0x0007AB80
+
+ arm_func_start FUN_037FBA9C
+FUN_037FBA9C: ; 0x037FBA9C
+ ldr ip, _037FBAA4 ; =SVC_SoundBiasSet
+ bx ip
+_037FBAA4: .word SVC_SoundBiasSet
+
+ arm_func_start SND_BeginSleep
+SND_BeginSleep: ; 0x037FBAA8
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ bl SND_Disable
+ mov r0, #128 ; 0x80
+ bl FUN_037FBAEC
+ mov r0, #262144 ; 0x40000
+ bl OS_SpinWait
+ mov r0, #1
+ bl PMi_ResetControl
+ ldr r1, _037FBAE8 ; =0x04000304
+ ldrh r0, [r1]
+ bic r0, r0, #1
+ strh r0, [r1]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FBAE8: .word 0x04000304
+
+ arm_func_start FUN_037FBAEC
+FUN_037FBAEC: ; 0x037FBAEC
+ ldr ip, _037FBAF4 ; =SVC_SoundBiasReset
+ bx ip
+_037FBAF4: .word SVC_SoundBiasReset
+
+ arm_func_start SND_Shutdown
+SND_Shutdown: ; 0x037FBAF8
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ bl SND_Disable
+ mov r5, #0
+ mov r4, #1
+_037FBB0C:
+ mov r0, r5
+ mov r1, r4
+ bl SND_StopChannel
+ add r5, r5, #1
+ cmp r5, #16
+ blt _037FBB0C
+ mov r1, #0
+ ldr r0, _037FBB44 ; =0x04000508
+ strb r1, [r0]
+ ldr r0, _037FBB48 ; =0x04000509
+ strb r1, [r0]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FBB44: .word 0x04000508
+_037FBB48: .word 0x04000509
+
+ arm_func_start SND_Disable
+SND_Disable: ; 0x037FBB4C
+ ldr r1, _037FBB60 ; =0x04000501
+ ldrb r0, [r1]
+ bic r0, r0, #128 ; 0x80
+ strb r0, [r1]
+ bx lr
+_037FBB60: .word 0x04000501
+
+ arm_func_start SND_Enable
+SND_Enable: ; 0x037FBB64
+ ldr r1, _037FBB78 ; =0x04000501
+ ldrb r0, [r1]
+ orr r0, r0, #128 ; 0x80
+ strb r0, [r1]
+ bx lr
+_037FBB78: .word 0x04000501
+
+ arm_func_start CalcSurroundDecay
+CalcSurroundDecay: ; 0x037FBB7C
+ cmp r1, #24
+ bge _037FBBAC
+ ldr r2, _037FBBE0 ; =sSurroundDecay
+ ldr r3, [r2]
+ ldr r2, _037FBBE4 ; =0x00007FFF
+ sub r2, r2, r3
+ add r1, r1, #40 ; 0x28
+ mul r1, r3, r1
+ add r1, r1, r2, lsl #6
+ mul r1, r0, r1
+ mov r0, r1, asr #21
+ bx lr
+_037FBBAC:
+ cmp r1, #104 ; 0x68
+ bxle lr
+ ldr r2, _037FBBE0 ; =sSurroundDecay
+ ldr ip, [r2]
+ ldr r2, _037FBBE4 ; =0x00007FFF
+ add r3, ip, r2
+ rsb r2, ip, #0
+ sub r1, r1, #40 ; 0x28
+ mul r1, r2, r1
+ add r1, r1, r3, lsl #6
+ mul r1, r0, r1
+ mov r0, r1, asr #21
+ bx lr
+_037FBBE0: .word sSurroundDecay
+_037FBBE4: .word 0x00007FFF
+
+ arm_func_start SNDi_SetSurroundDecay
+SNDi_SetSurroundDecay: ; 0x037FBBE8
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ ldr r1, _037FBC40 ; =sSurroundDecay
+ str r0, [r1]
+ mov r4, #0
+ ldr r6, _037FBC44 ; =sOrgVolume
+ mov r7, #1
+ ldr r5, _037FBC48 ; =0x0000FFF5
+_037FBC04:
+ mov r0, r7, lsl r4
+ ands r0, r0, r5
+ beq _037FBC2C
+ mov r8, r4, lsl #4
+ add r0, r8, #67108864 ; 0x4000000
+ ldrb r1, [r0, #1026] ; 0x402
+ ldrb r0, [r6, r4]
+ bl CalcSurroundDecay
+ add r1, r8, #67108864 ; 0x4000000
+ strb r0, [r1, #1024] ; 0x400
+_037FBC2C:
+ add r4, r4, #1
+ cmp r4, #16
+ blt _037FBC04
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037FBC40: .word sSurroundDecay
+_037FBC44: .word sOrgVolume
+_037FBC48: .word 0x0000FFF5
+
+ arm_func_start SND_GetChannelControl
+SND_GetChannelControl: ; 0x037FBC4C
+ mov r0, r0, lsl #4
+ add r0, r0, #67108864 ; 0x4000000
+ ldr r0, [r0, #1024] ; 0x400
+ bx lr
+
+ arm_func_start SND_SetMasterPan
+SND_SetMasterPan: ; 0x037FBC5C
+ ldr r1, _037FBCB8 ; =sMasterPan
+ str r0, [r1]
+ cmp r0, #0
+ blt _037FBC90
+ mov r2, #0
+ and r1, r0, #255 ; 0xff
+_037FBC74:
+ mov r0, r2, lsl #4
+ add r0, r0, #67108864 ; 0x4000000
+ strb r1, [r0, #1026] ; 0x402
+ add r2, r2, #1
+ cmp r2, #16
+ blt _037FBC74
+ bx lr
+_037FBC90:
+ mov r3, #0
+ ldr r2, _037FBCBC ; =sOrgPan
+_037FBC98:
+ ldrb r1, [r2, r3]
+ mov r0, r3, lsl #4
+ add r0, r0, #67108864 ; 0x4000000
+ strb r1, [r0, #1026] ; 0x402
+ add r3, r3, #1
+ cmp r3, #16
+ blt _037FBC98
+ bx lr
+_037FBCB8: .word sMasterPan
+_037FBCBC: .word sOrgPan
+
+ arm_func_start SND_IsChannelActive
+SND_IsChannelActive: ; 0x037FBCC0
+ mov r0, r0, lsl #4
+ add r0, r0, #67108864 ; 0x4000000
+ ldrb r0, [r0, #1027] ; 0x403
+ ands r0, r0, #128 ; 0x80
+ movne r0, #1
+ moveq r0, #0
+ bx lr
+
+ arm_func_start SND_SetChannelPan
+SND_SetChannelPan: ; 0x037FBCDC
+ stmdb sp!, {r4, lr}
+ ldr r2, _037FBD44 ; =sOrgPan
+ strb r1, [r2, r0]
+ ldr r2, _037FBD48 ; =sMasterPan
+ ldr r2, [r2]
+ cmp r2, #0
+ movge r1, r2
+ mov r4, r0, lsl #4
+ add r2, r4, #67108864 ; 0x4000000
+ strb r1, [r2, #1026] ; 0x402
+ ldr r2, _037FBD4C ; =sSurroundDecay
+ ldr r2, [r2]
+ cmp r2, #0
+ ble _037FBD3C
+ mov r2, #1
+ mov r3, r2, lsl r0
+ ldr r2, _037FBD50 ; =0x0000FFF5
+ ands r2, r3, r2
+ beq _037FBD3C
+ ldr r2, _037FBD54 ; =sOrgVolume
+ ldrb r0, [r2, r0]
+ bl CalcSurroundDecay
+ add r1, r4, #67108864 ; 0x4000000
+ strb r0, [r1, #1024] ; 0x400
+_037FBD3C:
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FBD44: .word sOrgPan
+_037FBD48: .word sMasterPan
+_037FBD4C: .word sSurroundDecay
+_037FBD50: .word 0x0000FFF5
+_037FBD54: .word sOrgVolume
+
+ arm_func_start SND_SetChannelTimer
+SND_SetChannelTimer: ; 0x037FBD58
+ rsb r1, r1, #65536 ; 0x10000
+ mov r0, r0, lsl #4
+ add r0, r0, #67108864 ; 0x4000000
+ add r0, r0, #1024 ; 0x400
+ strh r1, [r0, #8]
+ bx lr
+
+ arm_func_start SND_SetChannelVolume
+SND_SetChannelVolume: ; 0x037FBD70
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ mov r4, r2
+ ldr r0, _037FBDE8 ; =sOrgVolume
+ strb r1, [r0, r5]
+ ldr r0, _037FBDEC ; =sSurroundDecay
+ ldr r0, [r0]
+ cmp r0, #0
+ ble _037FBDC8
+ mov r0, #1
+ mov r2, r0, lsl r5
+ ldr r0, _037FBDF0 ; =0x0000FFF5
+ ands r0, r2, r0
+ beq _037FBDC8
+ mov r0, r5, lsl #4
+ add r0, r0, #67108864 ; 0x4000000
+ ldrb r2, [r0, #1026] ; 0x402
+ mov r0, r1
+ mov r1, r2
+ bl CalcSurroundDecay
+ mov r1, r0
+_037FBDC8:
+ orr r1, r1, r4, lsl #8
+ mov r0, r5, lsl #4
+ add r0, r0, #67108864 ; 0x4000000
+ add r0, r0, #1024 ; 0x400
+ strh r1, [r0]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FBDE8: .word sOrgVolume
+_037FBDEC: .word sSurroundDecay
+_037FBDF0: .word 0x0000FFF5
+
+ arm_func_start SND_StopChannel
+SND_StopChannel: ; 0x037FBDF4
+ mov r3, r0, lsl #4
+ ldr r2, _037FBE1C ; =0x04000400
+ add ip, r2, r0, lsl #4
+ add r0, r3, #67108864 ; 0x4000000
+ ldr r0, [r0, #1024] ; 0x400
+ bic r2, r0, #-2147483648 ; 0x80000000
+ ands r0, r1, #1
+ orrne r2, r2, #32768 ; 0x8000
+ str r2, [ip]
+ bx lr
+_037FBE1C: .word 0x04000400
+
+ arm_func_start SND_SetupChannelNoise
+SND_SetupChannelNoise: ; 0x037FBE20
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r2
+ mov r6, r3
+ ldr r5, [sp, #24]
+ mov r4, r0, lsl #4
+ ldr r2, _037FBEBC ; =sOrgPan
+ strb r5, [r2, r0]
+ ldr r2, _037FBEC0 ; =sMasterPan
+ ldr r2, [r2]
+ cmp r2, #0
+ movge r5, r2
+ ldr r2, _037FBEC4 ; =sOrgVolume
+ strb r1, [r2, r0]
+ ldr r2, _037FBEC8 ; =sSurroundDecay
+ ldr r2, [r2]
+ cmp r2, #0
+ ble _037FBE8C
+ mov r2, #1
+ mov r2, r2, lsl r0
+ ldr r0, _037FBECC ; =0x0000FFF5
+ ands r0, r2, r0
+ beq _037FBE8C
+ mov r0, r1
+ mov r1, r5
+ bl CalcSurroundDecay
+ mov r1, r0
+_037FBE8C:
+ mov r0, r5, lsl #16
+ orr r0, r0, #1610612736 ; 0x60000000
+ orr r0, r0, r7, lsl #8
+ orr r1, r1, r0
+ add r0, r4, #67108864 ; 0x4000000
+ str r1, [r0, #1024] ; 0x400
+ rsb r1, r6, #65536 ; 0x10000
+ add r0, r0, #1024 ; 0x400
+ strh r1, [r0, #8]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FBEBC: .word sOrgPan
+_037FBEC0: .word sMasterPan
+_037FBEC4: .word sOrgVolume
+_037FBEC8: .word sSurroundDecay
+_037FBECC: .word 0x0000FFF5
+
+ arm_func_start SND_SetupChannelPsg
+SND_SetupChannelPsg: ; 0x037FBED0
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r1
+ mov r6, r3
+ ldr r5, [sp, #28]
+ mov r4, r0, lsl #4
+ ldr r1, _037FBF74 ; =sOrgPan
+ strb r5, [r1, r0]
+ ldr r1, _037FBF78 ; =sMasterPan
+ ldr r1, [r1]
+ cmp r1, #0
+ movge r5, r1
+ ldr r1, _037FBF7C ; =sOrgVolume
+ strb r2, [r1, r0]
+ ldr r1, _037FBF80 ; =sSurroundDecay
+ ldr r1, [r1]
+ cmp r1, #0
+ ble _037FBF3C
+ mov r1, #1
+ mov r1, r1, lsl r0
+ ldr r0, _037FBF84 ; =0x0000FFF5
+ ands r0, r1, r0
+ beq _037FBF3C
+ mov r0, r2
+ mov r1, r5
+ bl CalcSurroundDecay
+ mov r2, r0
+_037FBF3C:
+ mov r0, r7, lsl #24
+ orr r0, r0, #1610612736 ; 0x60000000
+ orr r0, r0, r5, lsl #16
+ orr r0, r0, r6, lsl #8
+ orr r1, r2, r0
+ add r0, r4, #67108864 ; 0x4000000
+ str r1, [r0, #1024] ; 0x400
+ ldr r1, [sp, #24]
+ rsb r1, r1, #65536 ; 0x10000
+ add r0, r0, #1024 ; 0x400
+ strh r1, [r0, #8]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FBF74: .word sOrgPan
+_037FBF78: .word sMasterPan
+_037FBF7C: .word sOrgVolume
+_037FBF80: .word sSurroundDecay
+_037FBF84: .word 0x0000FFF5
+
+ arm_func_start SND_SetupChannelPcm
+SND_SetupChannelPcm: ; 0x037FBF88
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ ldr r1, [sp, #32]
+ ldr r5, [sp, #44] ; 0x2c
+ mov r4, r0, lsl #4
+ ldr r2, _037FC044 ; =sOrgPan
+ strb r5, [r2, r0]
+ ldr r2, _037FC048 ; =sMasterPan
+ ldr r2, [r2]
+ cmp r2, #0
+ movge r5, r2
+ ldr r2, _037FC04C ; =sOrgVolume
+ strb r1, [r2, r0]
+ ldr r2, _037FC050 ; =sSurroundDecay
+ ldr r2, [r2]
+ cmp r2, #0
+ ble _037FBFF8
+ mov r2, #1
+ mov r2, r2, lsl r0
+ ldr r0, _037FC054 ; =0x0000FFF5
+ ands r0, r2, r0
+ beq _037FBFF8
+ mov r0, r1
+ mov r1, r5
+ bl CalcSurroundDecay
+ mov r1, r0
+_037FBFF8:
+ ldr r2, [sp, #36] ; 0x24
+ mov r0, r7, lsl #29
+ orr r0, r0, r6, lsl #27
+ orr r0, r0, r5, lsl #16
+ orr r0, r0, r2, lsl #8
+ orr r0, r1, r0
+ add r1, r4, #67108864 ; 0x4000000
+ str r0, [r1, #1024] ; 0x400
+ ldr r0, [sp, #40] ; 0x28
+ rsb r2, r0, #65536 ; 0x10000
+ add r0, r1, #1024 ; 0x400
+ strh r2, [r0, #8]
+ ldr r2, [sp, #24]
+ strh r2, [r0, #10]
+ ldr r0, [sp, #28]
+ str r0, [r1, #1036] ; 0x40c
+ str r8, [r1, #1028] ; 0x404
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037FC044: .word sOrgPan
+_037FC048: .word sMasterPan
+_037FC04C: .word sOrgVolume
+_037FC050: .word sSurroundDecay
+_037FC054: .word 0x0000FFF5