mirror of
https://github.com/pret/pokediamond.git
synced 2026-09-10 10:06:32 -05:00
arm7: decompile SND_command
This commit is contained in:
@@ -1,639 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.section .bss
|
||||
|
||||
.global _038090EC
|
||||
_038090EC: ;0x038090EC
|
||||
.space 0x0380910C - 0x038090EC
|
||||
|
||||
.global _0380910C
|
||||
_0380910C: ;0x0380910C
|
||||
.space 0x0380912C - 0x0380910C
|
||||
|
||||
.section .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
|
||||
@@ -4,8 +4,6 @@
|
||||
#include "nitro/types.h"
|
||||
|
||||
void SND_Enable(void);
|
||||
void SND_SetOutputSelector(u8 leftOutputFrom, u8 rightOutputFrom, u8 outputCh1ToMixer, u8 outputCh3ToMixer);
|
||||
void SND_SetMasterVolume(u8 vol);
|
||||
void SND_StopChannel(s32 idx, BOOL hold);
|
||||
void SND_SetOutputSelector(int leftOutputFrom, int rightOutputFrom, int outputCh1ToMixer, int outputCh3ToMixer);
|
||||
|
||||
#endif //GUARD_SND_H
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
|
||||
#include "SND_exChannel.h"
|
||||
|
||||
void SNDi_SetSurroundDecay(int decay);
|
||||
|
||||
void SND_SetupChannelPcm(
|
||||
s32 chnIdx,
|
||||
const void *data,
|
||||
@@ -41,6 +43,8 @@ void SND_SetChannelVolume(s32 chnIdx, s32 volume, s32 volumeDiv);
|
||||
void SND_SetChannelPan(s32 chnIdx, s32 pan);
|
||||
void SND_SetChannelTimer(s32 chnIdx, s32 timer);
|
||||
|
||||
u32 SND_GetChannelControl(int idx);
|
||||
|
||||
// TODO move this function to SND_exChannel.c
|
||||
u16 CalcDecayCoeff(int value);
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef GUARD_SND_COMMAND_H
|
||||
#define GUARD_SND_COMMAND_H
|
||||
|
||||
#include "nitro/SND_command_shared.h"
|
||||
|
||||
void SND_CommandInit(void);
|
||||
void SND_CommandProc(void);
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ BOOL SND_IsExChannelActive(struct SNDExChannel *chn);
|
||||
struct SNDExChannel *SND_AllocExChannel(u32 channelMask, int priority, u32 flags, SNDExChannelCallback callback, void *callbackUserData);
|
||||
void SND_FreeExChannel(struct SNDExChannel *chn);
|
||||
BOOL SND_IsChannelActive(s32 idx);
|
||||
void SND_InvalidateWave(const void *start, const void *end);
|
||||
|
||||
// TODO internal functions, move these so exChannel
|
||||
int ExChannelSweepUpdate(struct SNDExChannel *chn, BOOL step);
|
||||
|
||||
@@ -12,5 +12,7 @@ u32 SND_WaitForIntervalTimer(void);
|
||||
void SND_SendWakeupMessage(void);
|
||||
void SNDi_LockMutex(void);
|
||||
void SNDi_UnlockMutex(void);
|
||||
void SND_SetMasterVolume(int vol);
|
||||
void SND_SetMasterPan(int pan);
|
||||
|
||||
#endif //GUARD_SND_MAIN_H
|
||||
|
||||
@@ -1,7 +1,24 @@
|
||||
#ifndef GUARD_SND_SEQ_H
|
||||
#define GUARD_SND_SEQ_H
|
||||
|
||||
#include "nitro/types.h"
|
||||
|
||||
#include "nitro/SND_bank_shared.h"
|
||||
|
||||
void SND_SeqInit(void);
|
||||
void SND_SeqMain(BOOL update);
|
||||
|
||||
void SND_StartSeq(int player, const void *seq, u32 offset, struct SNDBankData *bank);
|
||||
void SND_StopSeq(int player);
|
||||
void SND_PrepareSeq(int player, const void *seq, u32 offset, struct SNDBankData *bank);
|
||||
void SND_StartPreparedSeq(int player);
|
||||
void SND_PauseSeq(int player, BOOL pause);
|
||||
void SND_SkipSeq(int player, u32 tick);
|
||||
void SNDi_SetPlayerParam(int player, u32 offset, u32 data, int size);
|
||||
void SNDi_SetTrackParam(int player, u32 trackMask, u32 offset, u32 data, int size);
|
||||
void SND_SetTrackMute(int player, u32 trackMask, BOOL mute);
|
||||
void SND_SetTrackAllocatableChannel(int player, u32 trackMask, u32 channelMask);
|
||||
void SND_InvalidateSeq(const void *start, const void *end);
|
||||
void SND_InvalidateBank(const void *start, const void *end);
|
||||
|
||||
#endif //GUARD_SND_SEQ_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#ifndef GUARD_SND_WAVE_H
|
||||
#define GUARD_SND_WAVE_H
|
||||
|
||||
void SND_InvalidateWave(void *begin, void *end);
|
||||
void SND_InvalidateWave(const void *begin, const void *end);
|
||||
|
||||
#endif //GUARD_SND_WAVE_H
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
extern struct SNDWork SNDi_Work;
|
||||
extern struct SNDSharedWork *SNDi_SharedWork;
|
||||
|
||||
void SND_SetPlayerLocalVariable(u32 player, u32 var, s16 value);
|
||||
void SND_SetPlayerGlobalVariable(u32 var, s16 value);
|
||||
void SND_SetPlayerLocalVariable(int player, int var, s16 value);
|
||||
void SND_SetPlayerGlobalVariable(int var, s16 value);
|
||||
void SND_UpdateSharedWork(void);
|
||||
|
||||
#endif //GUARD_SND_WORK_H
|
||||
|
||||
302
arm7/lib/src/SND_command.c
Normal file
302
arm7/lib/src/SND_command.c
Normal file
@@ -0,0 +1,302 @@
|
||||
#include "SND_command.h"
|
||||
|
||||
#include "registers.h"
|
||||
#include "mmap.h"
|
||||
|
||||
#include "MI_memory.h"
|
||||
#include "PXI_fifo.h"
|
||||
#include "OS_message.h"
|
||||
#include "OS_system.h"
|
||||
#include "SND.h"
|
||||
#include "SND_alarm.h"
|
||||
#include "SND_capture.h"
|
||||
#include "SND_channel.h"
|
||||
#include "SND_exChannel.h"
|
||||
#include "SND_lockChannel.h"
|
||||
#include "SND_main.h"
|
||||
#include "SND_seq.h"
|
||||
#include "SND_work.h"
|
||||
|
||||
#define SND_MSG_ARRAY_SIZE 8
|
||||
|
||||
static OSMessage sMsgArray[SND_MSG_ARRAY_SIZE];
|
||||
static struct OSMessageQueue sMsgQueue;
|
||||
|
||||
static void InitPXI(void);
|
||||
static void StartTimer(u32 channelMask, u32 captureMask, u32 alarmMask, s32 unused);
|
||||
static void StopTimer(u32 channelMask, u32 captureMask, u32 alarmMask, s32 hold);
|
||||
static void SetChannelTimer(u32 channelMask, int timer);
|
||||
static void SetChannelVolume(u32 channelMask, int vol, int shift);
|
||||
static void SetChannelPan(u32 channelMask, int pan);
|
||||
static void ReadDriverInfo(struct SNDDriverInfo *driverInfo);
|
||||
|
||||
void SND_CommandInit(void) {
|
||||
OS_InitMessageQueue(&sMsgQueue, sMsgArray, SND_MSG_ARRAY_SIZE);
|
||||
InitPXI();
|
||||
SNDi_SharedWork = NULL;
|
||||
}
|
||||
|
||||
void SND_CommandProc(void) {
|
||||
struct SNDCommand cmd;
|
||||
struct SNDCommand *cmd_ptr;
|
||||
OSMessage msg;
|
||||
|
||||
while (OS_ReceiveMessage(&sMsgQueue, &msg, 0)) {
|
||||
// casting it directly below doesn't appear to match
|
||||
cmd_ptr = (struct SNDCommand *)msg;
|
||||
|
||||
while (cmd_ptr) {
|
||||
cmd = *cmd_ptr;
|
||||
|
||||
switch (cmd.id) {
|
||||
case SND_CMD_START_SEQ:
|
||||
SND_StartSeq((int)cmd.arg[0], (const void *)cmd.arg[1], cmd.arg[2], (struct SNDBankData *)cmd.arg[3]);
|
||||
break;
|
||||
case SND_CMD_STOP_SEQ:
|
||||
SND_StopSeq((int)cmd.arg[0]);
|
||||
break;
|
||||
case SND_CMD_PREPARE_SEQ:
|
||||
SND_PrepareSeq((int)cmd.arg[0], (const void *)cmd.arg[1], cmd.arg[2], (struct SNDBankData *)cmd.arg[3]);
|
||||
break;
|
||||
case SND_CMD_START_PREPARED_SEQ:
|
||||
SND_StartPreparedSeq((int)cmd.arg[0]);
|
||||
break;
|
||||
case SND_CMD_PAUSE_SEQ:
|
||||
SND_PauseSeq((int)cmd.arg[0], (BOOL)cmd.arg[1]);
|
||||
break;
|
||||
case SND_CMD_SKIP_SEQ:
|
||||
SND_SkipSeq((int)cmd.arg[0], cmd.arg[1]);
|
||||
break;
|
||||
case SND_CMD_PLAYER_PARAM:
|
||||
SNDi_SetPlayerParam((int)cmd.arg[0], cmd.arg[1], cmd.arg[2], (int)cmd.arg[3]);
|
||||
break;
|
||||
case SND_CMD_TRACK_PARAM:
|
||||
SNDi_SetTrackParam((int)cmd.arg[0] & 0xFFFFFF, cmd.arg[1], cmd.arg[2], cmd.arg[3], (u8)(cmd.arg[0] >> 24));
|
||||
break;
|
||||
case SND_CMD_MUTE_TRACK:
|
||||
SND_SetTrackMute((int)cmd.arg[0], cmd.arg[1], (BOOL)cmd.arg[2]);
|
||||
break;
|
||||
case SND_CMD_ALLOCATABLE_CHANNEL:
|
||||
SND_SetTrackAllocatableChannel((int)cmd.arg[0], cmd.arg[1], cmd.arg[2]);
|
||||
break;
|
||||
case SND_CMD_PLAYER_LOCAL_VAR:
|
||||
SND_SetPlayerLocalVariable((int)cmd.arg[0], (int)cmd.arg[1], (s16)cmd.arg[2]);
|
||||
break;
|
||||
case SND_CMD_PLAYER_GLOBAL_VAR:
|
||||
SND_SetPlayerGlobalVariable((int)cmd.arg[0], (s16)cmd.arg[1]);
|
||||
break;
|
||||
case SND_CMD_START_TIMER:
|
||||
StartTimer(cmd.arg[0], cmd.arg[1], cmd.arg[2], (int)cmd.arg[3]);
|
||||
break;
|
||||
case SND_CMD_STOP_TIMER:
|
||||
StopTimer(cmd.arg[0], cmd.arg[1], cmd.arg[2], (int)cmd.arg[3]);
|
||||
break;
|
||||
case SND_CMD_SETUP_CAPTURE:
|
||||
SND_SetupCapture(
|
||||
(int)(cmd.arg[2] >> 31u) & 1,
|
||||
(int)(cmd.arg[2] >> 30u) & 1,
|
||||
(void *)cmd.arg[0],
|
||||
(int)cmd.arg[1],
|
||||
(BOOL)(cmd.arg[2] >> 29u) & 1,
|
||||
(int)(cmd.arg[2] >> 28u) & 1,
|
||||
(int)(cmd.arg[2] >> 27u) & 1
|
||||
);
|
||||
break;
|
||||
case SND_CMD_SETUP_ALARM:
|
||||
SND_SetupAlarm(
|
||||
(int)cmd.arg[0],
|
||||
cmd.arg[1],
|
||||
cmd.arg[2],
|
||||
cmd.arg[3]
|
||||
);
|
||||
break;
|
||||
case SND_CMD_CHANNEL_TIMER:
|
||||
SetChannelTimer(cmd.arg[0], (int)cmd.arg[1]);
|
||||
break;
|
||||
case SND_CMD_CHANNEL_VOLUME:
|
||||
SetChannelVolume(cmd.arg[0], (int)cmd.arg[1], (int)cmd.arg[2]);
|
||||
break;
|
||||
case SND_CMD_CHANNEL_PAN:
|
||||
SetChannelPan(cmd.arg[0], (int)cmd.arg[1]);
|
||||
break;
|
||||
case SND_CMD_SETUP_CHANNEL_PCM:
|
||||
SND_SetupChannelPcm(
|
||||
(int)cmd.arg[0] & 0xFFFF,
|
||||
(void *)(cmd.arg[1] & 0x7FFFFFFu),
|
||||
(int)(cmd.arg[3] >> 24u) & 0x3,
|
||||
(int)(cmd.arg[3] >> 26u) & 0x3,
|
||||
(int)cmd.arg[3] & 0xFFFF,
|
||||
(int)cmd.arg[2] & 0x3FFFFF,
|
||||
(int)(cmd.arg[2] >> 24u) & 0x7F,
|
||||
(int)(cmd.arg[2] >> 22u) & 0x3,
|
||||
(int)(cmd.arg[0] >> 16u) & 0xFFFF,
|
||||
(int)(cmd.arg[3] >> 16u) & 0x7F
|
||||
);
|
||||
break;
|
||||
case SND_CMD_SETUP_CHANNEL_PSG:
|
||||
SND_SetupChannelPsg(
|
||||
(int)cmd.arg[0],
|
||||
(int)cmd.arg[3],
|
||||
(int)cmd.arg[1] & 0x7F,
|
||||
(int)(cmd.arg[1] >> 8u) & 0x3,
|
||||
(int)(cmd.arg[2] >> 8u) & 0xFFFF,
|
||||
(int)cmd.arg[2] & 0x7F
|
||||
);
|
||||
break;
|
||||
case SND_CMD_SETUP_CHANNEL_NOISE:
|
||||
SND_SetupChannelNoise(
|
||||
(int)cmd.arg[0],
|
||||
(int)cmd.arg[1] & 0x7F,
|
||||
(int)(cmd.arg[1] >> 8u) & 0x3,
|
||||
(int)(cmd.arg[2] >> 8u) & 0xFFFF,
|
||||
(int)cmd.arg[2] & 0x7F
|
||||
);
|
||||
break;
|
||||
case SND_CMD_SURROUND_DECAY:
|
||||
SNDi_SetSurroundDecay((int)cmd.arg[0]);
|
||||
break;
|
||||
case SND_CMD_MASTER_VOLUME:
|
||||
SND_SetMasterVolume((int)cmd.arg[0]);
|
||||
break;
|
||||
case SND_CMD_MASTER_PAN:
|
||||
SND_SetMasterPan((int)cmd.arg[0]);
|
||||
break;
|
||||
case SND_CMD_OUTPUT_SELECTOR:
|
||||
SND_SetOutputSelector((int)cmd.arg[0], (int)cmd.arg[1], (int)cmd.arg[2], (int)cmd.arg[3]);
|
||||
break;
|
||||
case SND_CMD_LOCK_CHANNEL:
|
||||
SND_LockChannel(cmd.arg[0], cmd.arg[1]);
|
||||
break;
|
||||
case SND_CMD_UNLOCK_CHANNEL:
|
||||
SND_UnlockChannel(cmd.arg[0], cmd.arg[1]);
|
||||
break;
|
||||
case SND_CMD_STOP_UNLOCKED_CHANNEL:
|
||||
SND_StopUnlockedChannel(cmd.arg[0], cmd.arg[1]);
|
||||
break;
|
||||
case SND_CMD_INVALIDATE_SEQ:
|
||||
SND_InvalidateSeq((void *)cmd.arg[0], (void *)cmd.arg[1]);
|
||||
break;
|
||||
case SND_CMD_INVALIDATE_BANK:
|
||||
SND_InvalidateBank((void *)cmd.arg[0], (void *)cmd.arg[1]);
|
||||
break;
|
||||
case SND_CMD_INVALIDATE_WAVE:
|
||||
SND_InvalidateWave((void *)cmd.arg[0], (void *)cmd.arg[1]);
|
||||
break;
|
||||
case SND_CMD_SET_SHARED_WORK:
|
||||
SNDi_SharedWork = (struct SNDSharedWork *)cmd.arg[0];
|
||||
break;
|
||||
case SND_CMD_READ_DRIVER_INFO:
|
||||
ReadDriverInfo((struct SNDDriverInfo *)cmd.arg[0]);
|
||||
break;
|
||||
} // end switch
|
||||
|
||||
cmd_ptr = cmd.llNext;
|
||||
} // end loop over command linked list
|
||||
|
||||
SNDi_SharedWork->finishedCommandTag++;
|
||||
} // end loop over receive message
|
||||
}
|
||||
|
||||
static void PxiFifoCallback(PXIFifoTag tag, u32 data, BOOL error) {
|
||||
(void)tag;
|
||||
(void)error;
|
||||
|
||||
OSIntrMode intrMode = OS_DisableInterrupts();
|
||||
|
||||
if (data >= HW_MAIN_MEM) {
|
||||
(void)OS_SendMessage(&sMsgQueue, (OSMessage)data, 0);
|
||||
} else {
|
||||
if (data == 0)
|
||||
SND_SendWakeupMessage();
|
||||
}
|
||||
|
||||
(void)OS_RestoreInterrupts(intrMode);
|
||||
}
|
||||
|
||||
static void InitPXI(void) {
|
||||
PXI_SetFifoRecvCallback(PXI_FIFO_TAG_SOUND, PxiFifoCallback);
|
||||
}
|
||||
|
||||
static void SetChannelTimer(u32 channelMask, int timer) {
|
||||
for (int i = 0; i < SND_CHANNEL_COUNT && channelMask != 0; i++, channelMask >>= 1) {
|
||||
if (channelMask & 1)
|
||||
SND_SetChannelTimer(i, timer);
|
||||
}
|
||||
}
|
||||
|
||||
static void SetChannelVolume(u32 channelMask, int vol, int shift) {
|
||||
for (int i = 0; i < SND_CHANNEL_COUNT && channelMask != 0; i++, channelMask >>= 1) {
|
||||
if (channelMask & 1)
|
||||
SND_SetChannelVolume(i, vol, shift);
|
||||
}
|
||||
}
|
||||
|
||||
static void SetChannelPan(u32 channelMask, int pan) {
|
||||
for (int i = 0; i < SND_CHANNEL_COUNT && channelMask != 0; i++, channelMask >>= 1) {
|
||||
if (channelMask & 1)
|
||||
SND_SetChannelPan(i, pan);
|
||||
}
|
||||
}
|
||||
|
||||
static void StartTimer(u32 channelMask, u32 captureMask, u32 alarmMask, s32 unused) {
|
||||
(void)unused;
|
||||
|
||||
OSIntrMode intrMode = OS_DisableInterrupts();
|
||||
|
||||
for (int i = 0; i < SND_CHANNEL_COUNT && channelMask != 0; i++, channelMask >>= 1) {
|
||||
if (channelMask & 1)
|
||||
reg_SOUNDxCNT_STAT(i) |= 0x80;
|
||||
}
|
||||
|
||||
if (captureMask & 1) {
|
||||
if (captureMask & 2) {
|
||||
*(vu16 *)®_SNDCAPxCNT(0) |= 0x8080;
|
||||
} else {
|
||||
reg_SNDCAPxCNT(0) |= 0x80;
|
||||
}
|
||||
} else if (captureMask & 2) {
|
||||
reg_SNDCAPxCNT(1) |= 0x80;
|
||||
}
|
||||
|
||||
for (int i = 0; i < SND_ALARM_COUNT && alarmMask != 0; i++, alarmMask >>= 1) {
|
||||
if (alarmMask & 1)
|
||||
SND_StartAlarm(i);
|
||||
}
|
||||
|
||||
(void)OS_RestoreInterrupts(intrMode);
|
||||
SND_UpdateSharedWork();
|
||||
}
|
||||
|
||||
static void StopTimer(u32 channelMask, u32 captureMask, u32 alarmMask, s32 hold) {
|
||||
OSIntrMode intrMode = OS_DisableInterrupts();
|
||||
|
||||
for (int i = 0; i < SND_ALARM_COUNT && alarmMask != 0; i++, alarmMask >>= 1) {
|
||||
if (alarmMask & 1)
|
||||
SND_StopAlarm(i);
|
||||
}
|
||||
|
||||
for (int i = 0; i < SND_CHANNEL_COUNT && channelMask != 0; i++, channelMask >>= 1) {
|
||||
if (channelMask & 1)
|
||||
SND_StopChannel(i, hold);
|
||||
}
|
||||
|
||||
if (captureMask & 1)
|
||||
reg_SNDCAPxCNT(0) = 0;
|
||||
if (captureMask & 2)
|
||||
reg_SNDCAPxCNT(1) = 0;
|
||||
|
||||
(void)OS_RestoreInterrupts(intrMode);
|
||||
SND_UpdateSharedWork();
|
||||
}
|
||||
|
||||
static void ReadDriverInfo(struct SNDDriverInfo *driverInfo) {
|
||||
MI_CpuCopy32(&SNDi_Work, driverInfo, sizeof(SNDi_Work));
|
||||
|
||||
driverInfo->workPtr = &SNDi_Work;
|
||||
|
||||
for (int i = 0; i < SND_CHANNEL_COUNT; i++) {
|
||||
driverInfo->channelControls[i] = SND_GetChannelControl(i);
|
||||
}
|
||||
|
||||
driverInfo->lockedChannels = SND_GetLockedChannel(0);
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#include "SND_work.h"
|
||||
#include "SND_exChannel.h"
|
||||
#include "SND.h"
|
||||
#include "SND_channel.h"
|
||||
|
||||
// TODO make these vars static after merging this file with exChannel
|
||||
u32 sLockedChannelMask;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#include "SND_wave.h"
|
||||
|
||||
#include "SND.h"
|
||||
#include "SND_channel.h"
|
||||
#include "SND_work.h"
|
||||
|
||||
void SND_InvalidateWave(void *start, void *end) {
|
||||
void SND_InvalidateWave(const void *start, const void *end) {
|
||||
for (u8 i = 0; i < SND_CHANNEL_COUNT; i++) {
|
||||
struct SNDExChannel *chn = &SNDi_Work.channels[i];
|
||||
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
struct SNDWork SNDi_Work;
|
||||
struct SNDSharedWork *SNDi_SharedWork;
|
||||
|
||||
void SND_SetPlayerLocalVariable(u32 player, u32 var, s16 value) {
|
||||
void SND_SetPlayerLocalVariable(int player, int var, s16 value) {
|
||||
SNDi_SharedWork->players[player].localVars[var] = value;
|
||||
}
|
||||
|
||||
void SND_SetPlayerGlobalVariable(u32 var, s16 value) {
|
||||
void SND_SetPlayerGlobalVariable(int var, s16 value) {
|
||||
SNDi_SharedWork->globalVars[var] = value;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,51 +6,6 @@
|
||||
#include "SND_main.h"
|
||||
#include "nitro/SND_work_shared.h"
|
||||
|
||||
struct SNDDriverInfo {
|
||||
struct SNDWork work; // 0x0000
|
||||
u32 channelControls[SND_CHANNEL_COUNT]; // 0x1180
|
||||
struct SNDWork *workPtr; // 0x11C0
|
||||
u32 lockedChannels; // 0x11C4
|
||||
u8 unk_XXX[24]; // 0x11C8
|
||||
}; // size = 0x11E0
|
||||
|
||||
struct SNDChannelInfo {
|
||||
struct {
|
||||
BOOL active : 1;
|
||||
BOOL locked: 1;
|
||||
} flags; // 0x0
|
||||
u16 volume; // 0x4
|
||||
u8 pan; // 0x6
|
||||
u8 unk_7; // 0x7
|
||||
s32 envStatus; // 0x8
|
||||
}; // size = 0xC
|
||||
|
||||
struct SNDPlayerInfo {
|
||||
struct {
|
||||
BOOL active : 1;
|
||||
BOOL paused : 1;
|
||||
} flags; // 0x0
|
||||
u16 trackBitMask; // 0x4
|
||||
u16 tempo; // 0x6
|
||||
u8 volume; // 0x8
|
||||
u8 unk_9[3]; // 0x9
|
||||
}; // size = 0xC
|
||||
|
||||
struct SNDTrackInfo {
|
||||
u16 program; // 0x0
|
||||
u8 volume; // 0x2
|
||||
u8 expression; // 0x3
|
||||
|
||||
s8 pitchBend; // 0x4
|
||||
u8 bendRange; // 0x5
|
||||
u8 pan; // 0x6
|
||||
s8 transpose; // 0x7
|
||||
|
||||
u8 unk_8; // 0x8
|
||||
u8 chnCount; // 0x9
|
||||
u8 channel[SND_CHANNEL_COUNT]; // 0xA
|
||||
}; // size = 0x1A
|
||||
|
||||
u32 SND_GetPlayerStatus(void);
|
||||
u16 SND_GetChannelStatus(void);
|
||||
//u16 SND_GetCaptureStatus(void);
|
||||
|
||||
@@ -42,6 +42,51 @@ struct SNDSharedWork {
|
||||
s16 globalVars[16]; // 0x260
|
||||
}; // size = 0x280
|
||||
|
||||
struct SNDDriverInfo {
|
||||
struct SNDWork work; // 0x0000
|
||||
u32 channelControls[SND_CHANNEL_COUNT]; // 0x1180
|
||||
struct SNDWork *workPtr; // 0x11C0
|
||||
u32 lockedChannels; // 0x11C4
|
||||
u8 unk_XXX[24]; // 0x11C8
|
||||
}; // size = 0x11E0
|
||||
|
||||
struct SNDChannelInfo {
|
||||
struct {
|
||||
BOOL active : 1;
|
||||
BOOL locked: 1;
|
||||
} flags; // 0x0
|
||||
u16 volume; // 0x4
|
||||
u8 pan; // 0x6
|
||||
u8 unk_7; // 0x7
|
||||
s32 envStatus; // 0x8
|
||||
}; // size = 0xC
|
||||
|
||||
struct SNDPlayerInfo {
|
||||
struct {
|
||||
BOOL active : 1;
|
||||
BOOL paused : 1;
|
||||
} flags; // 0x0
|
||||
u16 trackBitMask; // 0x4
|
||||
u16 tempo; // 0x6
|
||||
u8 volume; // 0x8
|
||||
u8 unk_9[3]; // 0x9
|
||||
}; // size = 0xC
|
||||
|
||||
struct SNDTrackInfo {
|
||||
u16 program; // 0x0
|
||||
u8 volume; // 0x2
|
||||
u8 expression; // 0x3
|
||||
|
||||
s8 pitchBend; // 0x4
|
||||
u8 bendRange; // 0x5
|
||||
u8 pan; // 0x6
|
||||
s8 transpose; // 0x7
|
||||
|
||||
u8 unk_8; // 0x8
|
||||
u8 chnCount; // 0x9
|
||||
u8 channel[SND_CHANNEL_COUNT]; // 0xA
|
||||
}; // size = 0x1A
|
||||
|
||||
extern struct SNDWork SNDi_Work;
|
||||
extern struct SNDSharedWork *SNDi_SharedWork;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user