mirror of
https://github.com/pret/pmd-sky.git
synced 2026-08-05 10:46:00 -05:00
2559 lines
46 KiB
ArmAsm
2559 lines
46 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "include/nitro.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start Snd_StopSeq
|
|
Snd_StopSeq: ; 0x0207C7DC
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #0
|
|
mov r1, r0
|
|
mov r3, r2
|
|
mov r0, #1
|
|
str r2, [sp]
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_StopSeq
|
|
|
|
arm_func_start Snd_PrepareSeq
|
|
Snd_PrepareSeq: ; 0x0207C7FC
|
|
stmdb sp!, {r3, lr}
|
|
mov lr, r1
|
|
mov ip, r2
|
|
str r3, [sp]
|
|
mov r1, r0
|
|
mov r2, lr
|
|
mov r3, ip
|
|
mov r0, #2
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_PrepareSeq
|
|
|
|
arm_func_start Snd_StartPreparedSeq
|
|
Snd_StartPreparedSeq: ; 0x0207C824
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #0
|
|
mov r1, r0
|
|
mov r3, r2
|
|
mov r0, #3
|
|
str r2, [sp]
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_StartPreparedSeq
|
|
|
|
arm_func_start Snd_SetPlayerTempoRatio
|
|
Snd_SetPlayerTempoRatio: ; 0x0207C844
|
|
ldr ip, _0207C858 ; =Sndi_SetPlayerParam
|
|
mov r2, r1
|
|
mov r1, #6
|
|
mov r3, #2
|
|
bx ip
|
|
.align 2, 0
|
|
_0207C858: .word Sndi_SetPlayerParam
|
|
arm_func_end Snd_SetPlayerTempoRatio
|
|
|
|
arm_func_start Snd_SetPlayerVolume
|
|
Snd_SetPlayerVolume: ; 0x0207C85C
|
|
ldr ip, _0207C870 ; =Sndi_SetPlayerParam
|
|
mov r2, r1
|
|
mov r1, #4
|
|
mov r3, #1
|
|
bx ip
|
|
.align 2, 0
|
|
_0207C870: .word Sndi_SetPlayerParam
|
|
arm_func_end Snd_SetPlayerVolume
|
|
|
|
arm_func_start Snd_SetTrackPan
|
|
Snd_SetTrackPan: ; 0x0207C874
|
|
stmdb sp!, {r3, lr}
|
|
mov r3, r2
|
|
mov ip, #2
|
|
mov r2, #0xc
|
|
str ip, [sp]
|
|
bl Sndi_SetTrackParam
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_SetTrackPan
|
|
|
|
arm_func_start Snd_SetTrackAllocatableChannel
|
|
Snd_SetTrackAllocatableChannel: ; 0x0207C890
|
|
stmdb sp!, {r3, lr}
|
|
mov lr, r1
|
|
mov r3, r2
|
|
mov ip, #0
|
|
mov r1, r0
|
|
mov r2, lr
|
|
mov r0, #9
|
|
str ip, [sp]
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_SetTrackAllocatableChannel
|
|
|
|
arm_func_start Snd_StartTimer
|
|
Snd_StartTimer: ; 0x0207C8B8
|
|
stmdb sp!, {r3, lr}
|
|
mov lr, r1
|
|
mov ip, r2
|
|
str r3, [sp]
|
|
mov r1, r0
|
|
mov r2, lr
|
|
mov r3, ip
|
|
mov r0, #0xc
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_StartTimer
|
|
|
|
arm_func_start Snd_StopTimer
|
|
Snd_StopTimer: ; 0x0207C8E0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r7, r2
|
|
mov sb, r0
|
|
mov r8, r1
|
|
mov r6, r3
|
|
mov r5, r7
|
|
mov r4, #0
|
|
b _0207C918
|
|
_0207C900:
|
|
tst r5, #1
|
|
beq _0207C910
|
|
mov r0, r4
|
|
bl Sndi_IncAlarmId
|
|
_0207C910:
|
|
add r4, r4, #1
|
|
mov r5, r5, lsr #1
|
|
_0207C918:
|
|
cmp r4, #8
|
|
bge _0207C928
|
|
cmp r5, #0
|
|
bne _0207C900
|
|
_0207C928:
|
|
mov r1, sb
|
|
mov r2, r8
|
|
mov r3, r7
|
|
mov r0, #0xd
|
|
str r6, [sp]
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
arm_func_end Snd_StopTimer
|
|
|
|
arm_func_start Snd_SetupCapture
|
|
Snd_SetupCapture: ; 0x0207C944
|
|
stmdb sp!, {r3, lr}
|
|
mov r1, r1, lsl #0x1e
|
|
orr r0, r1, r0, lsl #31
|
|
ldr ip, [sp, #8]
|
|
mov r1, r2
|
|
orr r0, r0, ip, lsl #29
|
|
ldr r2, [sp, #0xc]
|
|
mov lr, #0
|
|
orr r0, r0, r2, lsl #28
|
|
ldr ip, [sp, #0x10]
|
|
mov r2, r3
|
|
orr r3, r0, ip, lsl #27
|
|
mov r0, #0x11
|
|
str lr, [sp]
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_SetupCapture
|
|
|
|
arm_func_start Snd_SetupAlarm
|
|
Snd_SetupAlarm: ; 0x0207C984
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
mov r4, r2
|
|
mov r5, r1
|
|
ldr r2, [sp, #0x18]
|
|
mov r6, r0
|
|
mov r1, r3
|
|
bl Sndi_SetAlarmHandler
|
|
str r0, [sp]
|
|
mov r1, r6
|
|
mov r2, r5
|
|
mov r3, r4
|
|
mov r0, #0x12
|
|
bl PushCommand_impl
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
arm_func_end Snd_SetupAlarm
|
|
|
|
arm_func_start Snd_LockChannel
|
|
Snd_LockChannel: ; 0x0207C9C4
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, r1
|
|
mov r3, #0
|
|
mov r1, r0
|
|
mov r0, #0x1a
|
|
str r3, [sp]
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_LockChannel
|
|
|
|
arm_func_start Snd_UnlockChannel
|
|
Snd_UnlockChannel: ; 0x0207C9E4
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, r1
|
|
mov r3, #0
|
|
mov r1, r0
|
|
mov r0, #0x1b
|
|
str r3, [sp]
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_UnlockChannel
|
|
|
|
arm_func_start Snd_SetChannelTimer
|
|
Snd_SetChannelTimer: ; 0x0207CA04
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, r1
|
|
mov r3, #0
|
|
mov r1, r0
|
|
mov r0, #0x13
|
|
str r3, [sp]
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_SetChannelTimer
|
|
|
|
arm_func_start Snd_SetChannelVolume
|
|
Snd_SetChannelVolume: ; 0x0207CA24
|
|
stmdb sp!, {r3, lr}
|
|
mov lr, r1
|
|
mov r3, r2
|
|
mov ip, #0
|
|
mov r1, r0
|
|
mov r2, lr
|
|
mov r0, #0x14
|
|
str ip, [sp]
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_SetChannelVolume
|
|
|
|
arm_func_start Snd_SetChannelPan
|
|
Snd_SetChannelPan: ; 0x0207CA4C
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, r1
|
|
mov r3, #0
|
|
mov r1, r0
|
|
mov r0, #0x15
|
|
str r3, [sp]
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_SetChannelPan
|
|
|
|
arm_func_start Snd_SetupChannelPcm
|
|
Snd_SetupChannelPcm: ; 0x0207CA6C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr ip, [sp, #0x1c]
|
|
mov r1, r1, lsl #0x18
|
|
orr r4, r1, r3, lsl #26
|
|
ldr r5, [sp, #0x24]
|
|
mov r1, ip, lsl #0x16
|
|
ldr r3, [sp, #0x18]
|
|
ldr ip, [sp, #0x10]
|
|
orr r4, r4, r5, lsl #16
|
|
orr r4, ip, r4
|
|
ldr lr, [sp, #0x20]
|
|
orr r3, r1, r3, lsl #24
|
|
ldr ip, [sp, #0x14]
|
|
orr r1, r0, lr, lsl #16
|
|
orr r3, ip, r3
|
|
mov r0, #0xe
|
|
str r4, [sp]
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end Snd_SetupChannelPcm
|
|
|
|
arm_func_start Snd_SetupChannelPsg
|
|
Snd_SetupChannelPsg: ; 0x0207CAB8
|
|
stmdb sp!, {r3, lr}
|
|
ldr lr, [sp, #8]
|
|
ldr ip, [sp, #0xc]
|
|
str r1, [sp]
|
|
orr r2, r2, r3, lsl #8
|
|
mov r1, r0
|
|
orr r3, ip, lr, lsl #8
|
|
mov r0, #0xf
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_SetupChannelPsg
|
|
|
|
arm_func_start Snd_SetupChannelNoise
|
|
Snd_SetupChannelNoise: ; 0x0207CAE0
|
|
stmdb sp!, {r3, r4, lr}
|
|
sub sp, sp, #4
|
|
ldr ip, [sp, #0x10]
|
|
mov r4, r1
|
|
mov lr, #0
|
|
mov r1, r0
|
|
orr r2, r4, r2, lsl #8
|
|
orr r3, ip, r3, lsl #8
|
|
mov r0, #0x10
|
|
str lr, [sp]
|
|
bl PushCommand_impl
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, pc}
|
|
arm_func_end Snd_SetupChannelNoise
|
|
|
|
arm_func_start Snd_InvalidateSeqData
|
|
Snd_InvalidateSeqData: ; 0x0207CB14
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, r1
|
|
mov r3, #0
|
|
mov r1, r0
|
|
mov r0, #0x1f
|
|
str r3, [sp]
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_InvalidateSeqData
|
|
|
|
arm_func_start Snd_InvalidateBankData
|
|
Snd_InvalidateBankData: ; 0x0207CB34
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, r1
|
|
mov r3, #0
|
|
mov r1, r0
|
|
mov r0, #0x20
|
|
str r3, [sp]
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_InvalidateBankData
|
|
|
|
arm_func_start Snd_SetOutputSelector
|
|
Snd_SetOutputSelector: ; 0x0207CB54
|
|
stmdb sp!, {r3, lr}
|
|
mov lr, r1
|
|
mov ip, r2
|
|
str r3, [sp]
|
|
mov r1, r0
|
|
mov r2, lr
|
|
mov r3, ip
|
|
mov r0, #0x19
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Snd_SetOutputSelector
|
|
|
|
arm_func_start Sndi_SetPlayerParam
|
|
Sndi_SetPlayerParam: ; 0x0207CB7C
|
|
stmdb sp!, {r3, lr}
|
|
mov lr, r1
|
|
mov ip, r2
|
|
str r3, [sp]
|
|
mov r1, r0
|
|
mov r2, lr
|
|
mov r3, ip
|
|
mov r0, #6
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Sndi_SetPlayerParam
|
|
|
|
arm_func_start Sndi_SetTrackParam
|
|
Sndi_SetTrackParam: ; 0x0207CBA4
|
|
stmdb sp!, {r3, lr}
|
|
ldr ip, [sp, #8]
|
|
mov lr, r2
|
|
str r3, [sp]
|
|
mov r2, r1
|
|
orr r1, r0, ip, lsl #24
|
|
mov r3, lr
|
|
mov r0, #7
|
|
bl PushCommand_impl
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end Sndi_SetTrackParam
|
|
|
|
arm_func_start PushCommand_impl
|
|
PushCommand_impl: ; 0x0207CBCC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r0, #1
|
|
mov r6, r1
|
|
mov r5, r2
|
|
mov r4, r3
|
|
bl Snd_AllocCommand
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
str r7, [r0, #4]
|
|
str r6, [r0, #8]
|
|
str r5, [r0, #0xc]
|
|
ldr r1, [sp, #0x18]
|
|
str r4, [r0, #0x10]
|
|
str r1, [r0, #0x14]
|
|
bl Snd_PushCommand
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end PushCommand_impl
|
|
|
|
arm_func_start SND_Init
|
|
SND_Init: ; 0x0207CC10
|
|
stmdb sp!, {r3, lr}
|
|
ldr r1, _0207CC40 ; =_022B99EC
|
|
ldr r0, [r1]
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, pc}
|
|
ldr r0, _0207CC44 ; =_022B99F0
|
|
mov r2, #1
|
|
str r2, [r1]
|
|
bl OS_InitMutex
|
|
bl SND_CommandInit
|
|
bl Snd_AlarmInit
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0207CC40: .word _022B99EC
|
|
_0207CC44: .word _022B99F0
|
|
arm_func_end SND_Init
|
|
|
|
arm_func_start Sndi_LockMutex
|
|
Sndi_LockMutex: ; 0x0207CC48
|
|
ldr ip, _0207CC54 ; =OS_LockMutex
|
|
ldr r0, _0207CC58 ; =_022B99F0
|
|
bx ip
|
|
.align 2, 0
|
|
_0207CC54: .word OS_LockMutex
|
|
_0207CC58: .word _022B99F0
|
|
arm_func_end Sndi_LockMutex
|
|
|
|
arm_func_start Sndi_UnlockMutex
|
|
Sndi_UnlockMutex: ; 0x0207CC5C
|
|
ldr ip, _0207CC68 ; =OS_UnlockMutex
|
|
ldr r0, _0207CC6C ; =_022B99F0
|
|
bx ip
|
|
.align 2, 0
|
|
_0207CC68: .word OS_UnlockMutex
|
|
_0207CC6C: .word _022B99F0
|
|
arm_func_end Sndi_UnlockMutex
|
|
|
|
arm_func_start SND_CommandInit
|
|
SND_CommandInit: ; 0x0207CC70
|
|
stmdb sp!, {r4, lr}
|
|
bl InitPxi
|
|
ldr lr, _0207CD2C ; =_022B9D00
|
|
ldr r0, _0207CD30 ; =_022B9A20
|
|
mov r4, #0
|
|
str lr, [r0]
|
|
mov r0, #0x18
|
|
mov r1, r0
|
|
b _0207CCA8
|
|
_0207CC94:
|
|
add r3, r4, #1
|
|
mul r2, r4, r1
|
|
mla ip, r3, r0, lr
|
|
mov r4, r3
|
|
str ip, [lr, r2]
|
|
_0207CCA8:
|
|
cmp r4, #0xff
|
|
blt _0207CC94
|
|
ldr r0, _0207CD34 ; =_022BAA20
|
|
mov r3, #0
|
|
str r3, [r0, #0xac8]
|
|
ldr r1, _0207CD38 ; =_022BB4E8
|
|
ldr r2, _0207CD30 ; =_022B9A20
|
|
mov r0, #1
|
|
str r1, [r2, #0x10]
|
|
str r3, [r2, #8]
|
|
str r3, [r2, #0xc]
|
|
str r3, [r2, #0x1c]
|
|
str r3, [r2, #0x14]
|
|
str r3, [r2, #0x18]
|
|
str r0, [r2, #0x20]
|
|
ldr r0, _0207CD3C ; =_022B9A80
|
|
ldr r1, _0207CD40 ; =_022BB560
|
|
str r3, [r2, #4]
|
|
str r0, [r1]
|
|
bl Sndi_InitSharedWork
|
|
mov r0, #1
|
|
bl Snd_AllocCommand
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
mov r2, #0x1d
|
|
ldr r1, _0207CD40 ; =_022BB560
|
|
str r2, [r0, #4]
|
|
ldr r1, [r1]
|
|
str r1, [r0, #8]
|
|
bl Snd_PushCommand
|
|
mov r0, #1
|
|
bl Snd_FlushCommand
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0207CD2C: .word _022B9D00
|
|
_0207CD30: .word _022B9A20
|
|
_0207CD34: .word _022BAA20
|
|
_0207CD38: .word _022BB4E8
|
|
_0207CD3C: .word _022B9A80
|
|
_0207CD40: .word _022BB560
|
|
arm_func_end SND_CommandInit
|
|
|
|
arm_func_start Snd_RecvCommandReply
|
|
Snd_RecvCommandReply: ; 0x0207CD44
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r0
|
|
bl EnableIrqFlag
|
|
mov r4, r0
|
|
tst r5, #1
|
|
beq _0207CDA0
|
|
bl Sndi_GetFinishedCommandTag
|
|
ldr r5, _0207CE4C ; =_022B9A20
|
|
ldr r1, [r5, #4]
|
|
cmp r1, r0
|
|
bne _0207CDC4
|
|
mov r6, #0x64
|
|
_0207CD74:
|
|
mov r0, r4
|
|
bl SetIrqFlag
|
|
mov r0, r6
|
|
bl OS_SpinWait
|
|
bl EnableIrqFlag
|
|
mov r4, r0
|
|
bl Sndi_GetFinishedCommandTag
|
|
ldr r1, [r5, #4]
|
|
cmp r1, r0
|
|
beq _0207CD74
|
|
b _0207CDC4
|
|
_0207CDA0:
|
|
bl Sndi_GetFinishedCommandTag
|
|
ldr r1, _0207CE4C ; =_022B9A20
|
|
ldr r1, [r1, #4]
|
|
cmp r1, r0
|
|
bne _0207CDC4
|
|
mov r0, r4
|
|
bl SetIrqFlag
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_0207CDC4:
|
|
ldr r0, _0207CE4C ; =_022B9A20
|
|
ldr r2, _0207CE50 ; =_022B9A44
|
|
ldr r3, [r0, #0x14]
|
|
add r1, r3, #1
|
|
ldr r5, [r2, r3, lsl #2]
|
|
str r1, [r0, #0x14]
|
|
cmp r1, #8
|
|
movgt r1, #0
|
|
strgt r1, [r0, #0x14]
|
|
ldr r0, [r5]
|
|
mov r2, r5
|
|
cmp r0, #0
|
|
beq _0207CE08
|
|
_0207CDF8:
|
|
ldr r2, [r2]
|
|
ldr r0, [r2]
|
|
cmp r0, #0
|
|
bne _0207CDF8
|
|
_0207CE08:
|
|
ldr r0, _0207CE4C ; =_022B9A20
|
|
ldr r1, [r0, #0x10]
|
|
cmp r1, #0
|
|
strne r5, [r1]
|
|
streq r5, [r0]
|
|
ldr r1, _0207CE4C ; =_022B9A20
|
|
mov r0, r4
|
|
str r2, [r1, #0x10]
|
|
ldr r2, [r1, #0x1c]
|
|
sub r2, r2, #1
|
|
str r2, [r1, #0x1c]
|
|
ldr r2, [r1, #4]
|
|
add r2, r2, #1
|
|
str r2, [r1, #4]
|
|
bl SetIrqFlag
|
|
mov r0, r5
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0207CE4C: .word _022B9A20
|
|
_0207CE50: .word _022B9A44
|
|
arm_func_end Snd_RecvCommandReply
|
|
|
|
arm_func_start Snd_AllocCommand
|
|
Snd_AllocCommand: ; 0x0207CE54
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl IsCommandAvailable
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
bl AllocCommand
|
|
cmp r0, #0
|
|
ldmneia sp!, {r4, pc}
|
|
tst r4, #1
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
bl Snd_CountWaitingCommand
|
|
cmp r0, #0
|
|
ble _0207CEB4
|
|
mov r4, #0
|
|
_0207CE94:
|
|
mov r0, r4
|
|
bl Snd_RecvCommandReply
|
|
cmp r0, #0
|
|
bne _0207CE94
|
|
bl AllocCommand
|
|
cmp r0, #0
|
|
beq _0207CEBC
|
|
ldmia sp!, {r4, pc}
|
|
_0207CEB4:
|
|
mov r0, #1
|
|
bl Snd_FlushCommand
|
|
_0207CEBC:
|
|
bl RequestCommandProc
|
|
mov r4, #1
|
|
_0207CEC4:
|
|
mov r0, r4
|
|
bl Snd_RecvCommandReply
|
|
bl AllocCommand
|
|
cmp r0, #0
|
|
beq _0207CEC4
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end Snd_AllocCommand
|
|
|
|
arm_func_start Snd_PushCommand
|
|
Snd_PushCommand: ; 0x0207CEDC
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl EnableIrqFlag
|
|
ldr r1, _0207CF10 ; =_022B9A20
|
|
ldr r2, [r1, #0xc]
|
|
cmp r2, #0
|
|
streq r4, [r1, #8]
|
|
strne r4, [r2]
|
|
str r4, [r1, #0xc]
|
|
mov r1, #0
|
|
str r1, [r4]
|
|
bl SetIrqFlag
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0207CF10: .word _022B9A20
|
|
arm_func_end Snd_PushCommand
|
|
|
|
arm_func_start Snd_FlushCommand
|
|
Snd_FlushCommand: ; 0x0207CF14
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sl, r0
|
|
bl EnableIrqFlag
|
|
ldr r4, _0207D0C4 ; =_022B9A20
|
|
mov sb, r0
|
|
ldr r1, [r4, #8]
|
|
cmp r1, #0
|
|
bne _0207CF40
|
|
bl SetIrqFlag
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0207CF40:
|
|
ldr r1, [r4, #0x1c]
|
|
cmp r1, #8
|
|
blt _0207CF98
|
|
tst sl, #1
|
|
bne _0207CF60
|
|
bl SetIrqFlag
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0207CF60:
|
|
mov r5, #1
|
|
_0207CF64:
|
|
mov r0, r5
|
|
bl Snd_RecvCommandReply
|
|
ldr r0, [r4, #0x1c]
|
|
cmp r0, #8
|
|
bge _0207CF64
|
|
ldr r0, _0207D0C4 ; =_022B9A20
|
|
ldr r0, [r0, #8]
|
|
cmp r0, #0
|
|
bne _0207CF98
|
|
mov r0, sb
|
|
bl SetIrqFlag
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0207CF98:
|
|
ldr r0, _0207D0C8 ; =_022B9D00
|
|
mov r1, #0x1800
|
|
bl DC_FlushRange
|
|
ldr r1, _0207D0C4 ; =_022B9A20
|
|
mov r0, #7
|
|
ldr r1, [r1, #8]
|
|
mov r2, #0
|
|
bl PXI_SendWordByFifo
|
|
cmp r0, #0
|
|
bge _0207D058
|
|
tst sl, #1
|
|
bne _0207CFD8
|
|
mov r0, sb
|
|
bl SetIrqFlag
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0207CFD8:
|
|
mov fp, #0
|
|
mov r5, #7
|
|
mov r8, fp
|
|
ldr r7, _0207D0C8 ; =_022B9D00
|
|
mov r6, #0x1800
|
|
ldr r4, _0207D0C4 ; =_022B9A20
|
|
b _0207D034
|
|
_0207CFF4:
|
|
mov r0, sb
|
|
bl SetIrqFlag
|
|
mov r0, r8
|
|
bl Snd_RecvCommandReply
|
|
bl EnableIrqFlag
|
|
mov sb, r0
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl DC_FlushRange
|
|
ldr r0, [r4, #8]
|
|
cmp r0, #0
|
|
bne _0207D034
|
|
mov r0, sb
|
|
bl SetIrqFlag
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0207D034:
|
|
ldr r0, [r4, #0x1c]
|
|
cmp r0, #8
|
|
bge _0207CFF4
|
|
ldr r1, [r4, #8]
|
|
mov r0, r5
|
|
mov r2, fp
|
|
bl PXI_SendWordByFifo
|
|
cmp r0, #0
|
|
blt _0207CFF4
|
|
_0207D058:
|
|
ldr r0, _0207D0C4 ; =_022B9A20
|
|
ldr r2, _0207D0CC ; =_022B9A44
|
|
ldr r3, [r0, #0x18]
|
|
ldr r4, [r0, #8]
|
|
add r1, r3, #1
|
|
str r4, [r2, r3, lsl #2]
|
|
str r1, [r0, #0x18]
|
|
cmp r1, #8
|
|
movgt r1, #0
|
|
strgt r1, [r0, #0x18]
|
|
ldr r1, _0207D0C4 ; =_022B9A20
|
|
mov r0, #0
|
|
str r0, [r1, #8]
|
|
str r0, [r1, #0xc]
|
|
ldr r2, [r1, #0x1c]
|
|
mov r0, sb
|
|
add r2, r2, #1
|
|
str r2, [r1, #0x1c]
|
|
ldr r2, [r1, #0x20]
|
|
add r2, r2, #1
|
|
str r2, [r1, #0x20]
|
|
bl SetIrqFlag
|
|
tst sl, #2
|
|
beq _0207D0BC
|
|
bl RequestCommandProc
|
|
_0207D0BC:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0207D0C4: .word _022B9A20
|
|
_0207D0C8: .word _022B9D00
|
|
_0207D0CC: .word _022B9A44
|
|
arm_func_end Snd_FlushCommand
|
|
|
|
arm_func_start Snd_WaitForCommandProc
|
|
Snd_WaitForCommandProc: ; 0x0207D0D0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
bl Snd_IsFinishedCommandTag
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
mov r4, #0
|
|
_0207D0E8:
|
|
mov r0, r4
|
|
bl Snd_RecvCommandReply
|
|
cmp r0, #0
|
|
bne _0207D0E8
|
|
mov r0, r5
|
|
bl Snd_IsFinishedCommandTag
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
bl RequestCommandProc
|
|
mov r0, r5
|
|
bl Snd_IsFinishedCommandTag
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
mov r4, #1
|
|
_0207D120:
|
|
mov r0, r4
|
|
bl Snd_RecvCommandReply
|
|
mov r0, r5
|
|
bl Snd_IsFinishedCommandTag
|
|
cmp r0, #0
|
|
beq _0207D120
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end Snd_WaitForCommandProc
|
|
|
|
arm_func_start Snd_GetCurrentCommandTag
|
|
Snd_GetCurrentCommandTag: ; 0x0207D13C
|
|
stmdb sp!, {r4, lr}
|
|
bl EnableIrqFlag
|
|
ldr r1, _0207D164 ; =_022B9A20
|
|
ldr r2, [r1, #8]
|
|
cmp r2, #0
|
|
ldreq r4, [r1, #4]
|
|
ldrne r4, [r1, #0x20]
|
|
bl SetIrqFlag
|
|
mov r0, r4
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0207D164: .word _022B9A20
|
|
arm_func_end Snd_GetCurrentCommandTag
|
|
|
|
arm_func_start Snd_IsFinishedCommandTag
|
|
Snd_IsFinishedCommandTag: ; 0x0207D168
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl EnableIrqFlag
|
|
ldr r1, _0207D1B4 ; =_022B9A20
|
|
ldr r1, [r1, #4]
|
|
cmp r4, r1
|
|
bls _0207D198
|
|
sub r1, r4, r1
|
|
cmp r1, #0x80000000
|
|
movlo r4, #0
|
|
movhs r4, #1
|
|
b _0207D1A8
|
|
_0207D198:
|
|
sub r1, r1, r4
|
|
cmp r1, #0x80000000
|
|
movlo r4, #1
|
|
movhs r4, #0
|
|
_0207D1A8:
|
|
bl SetIrqFlag
|
|
mov r0, r4
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0207D1B4: .word _022B9A20
|
|
arm_func_end Snd_IsFinishedCommandTag
|
|
|
|
arm_func_start Snd_CountFreeCommand
|
|
Snd_CountFreeCommand: ; 0x0207D1B8
|
|
stmdb sp!, {r4, lr}
|
|
bl EnableIrqFlag
|
|
ldr r1, _0207D1F0 ; =_022B9A20
|
|
mov r4, #0
|
|
ldr r1, [r1]
|
|
cmp r1, #0
|
|
beq _0207D1E4
|
|
_0207D1D4:
|
|
ldr r1, [r1]
|
|
add r4, r4, #1
|
|
cmp r1, #0
|
|
bne _0207D1D4
|
|
_0207D1E4:
|
|
bl SetIrqFlag
|
|
mov r0, r4
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0207D1F0: .word _022B9A20
|
|
arm_func_end Snd_CountFreeCommand
|
|
|
|
arm_func_start Snd_CountReservedCommand
|
|
Snd_CountReservedCommand: ; 0x0207D1F4
|
|
stmdb sp!, {r4, lr}
|
|
bl EnableIrqFlag
|
|
ldr r1, _0207D22C ; =_022B9A20
|
|
mov r4, #0
|
|
ldr r1, [r1, #8]
|
|
cmp r1, #0
|
|
beq _0207D220
|
|
_0207D210:
|
|
ldr r1, [r1]
|
|
add r4, r4, #1
|
|
cmp r1, #0
|
|
bne _0207D210
|
|
_0207D220:
|
|
bl SetIrqFlag
|
|
mov r0, r4
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0207D22C: .word _022B9A20
|
|
arm_func_end Snd_CountReservedCommand
|
|
|
|
arm_func_start Snd_CountWaitingCommand
|
|
Snd_CountWaitingCommand: ; 0x0207D230
|
|
stmdb sp!, {r4, lr}
|
|
bl Snd_CountFreeCommand
|
|
mov r4, r0
|
|
bl Snd_CountReservedCommand
|
|
rsb r1, r4, #0x100
|
|
sub r0, r1, r0
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end Snd_CountWaitingCommand
|
|
|
|
arm_func_start PxiFifoCallback
|
|
PxiFifoCallback: ; 0x0207D24C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r1
|
|
bl EnableIrqFlag
|
|
mov r4, r0
|
|
mov r0, r5
|
|
bl Sndi_CallAlarmHandler
|
|
mov r0, r4
|
|
bl SetIrqFlag
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end PxiFifoCallback
|
|
|
|
arm_func_start InitPxi
|
|
InitPxi: ; 0x0207D270
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
ldr r1, _0207D2CC ; =PxiFifoCallback
|
|
mov r0, #7
|
|
bl PXI_SetFifoRecvCallback
|
|
bl IsCommandAvailable
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
mov r0, #7
|
|
mov r1, #1
|
|
bl PXI_IsCallbackReady
|
|
cmp r0, #0
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov r6, #0x64
|
|
mov r5, #7
|
|
mov r4, #1
|
|
_0207D2AC:
|
|
mov r0, r6
|
|
bl OS_SpinWait
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl PXI_IsCallbackReady
|
|
cmp r0, #0
|
|
beq _0207D2AC
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0207D2CC: .word PxiFifoCallback
|
|
arm_func_end InitPxi
|
|
|
|
arm_func_start RequestCommandProc
|
|
RequestCommandProc: ; 0x0207D2D0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, #7
|
|
mov r4, #0
|
|
_0207D2DC:
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, r4
|
|
bl PXI_SendWordByFifo
|
|
cmp r0, #0
|
|
blt _0207D2DC
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end RequestCommandProc
|
|
|
|
arm_func_start AllocCommand
|
|
AllocCommand: ; 0x0207D2F8
|
|
stmdb sp!, {r4, lr}
|
|
bl EnableIrqFlag
|
|
ldr r1, _0207D33C ; =_022B9A20
|
|
ldr r4, [r1]
|
|
cmp r4, #0
|
|
bne _0207D31C
|
|
bl SetIrqFlag
|
|
mov r0, #0
|
|
ldmia sp!, {r4, pc}
|
|
_0207D31C:
|
|
ldr r2, [r4]
|
|
str r2, [r1]
|
|
cmp r2, #0
|
|
moveq r2, #0
|
|
streq r2, [r1, #0x10]
|
|
bl SetIrqFlag
|
|
mov r0, r4
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0207D33C: .word _022B9A20
|
|
arm_func_end AllocCommand
|
|
|
|
arm_func_start IsCommandAvailable
|
|
IsCommandAvailable: ; 0x0207D340
|
|
stmdb sp!, {r4, lr}
|
|
bl OS_IsRunOnEmulator
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r4, pc}
|
|
bl EnableIrqFlag
|
|
ldr r1, _0207D37C ; =0x04FFF200
|
|
mov r2, #0x10
|
|
str r2, [r1]
|
|
ldr r4, [r1]
|
|
bl SetIrqFlag
|
|
cmp r4, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0207D37C: .word 0x04FFF200
|
|
arm_func_end IsCommandAvailable
|
|
|
|
arm_func_start Snd_AlarmInit
|
|
Snd_AlarmInit: ; 0x0207D380
|
|
mov r1, #0
|
|
ldr r2, _0207D3AC ; =_022BB500
|
|
mov r0, r1
|
|
_0207D38C:
|
|
str r0, [r2]
|
|
str r0, [r2, #4]
|
|
add r1, r1, #1
|
|
strb r0, [r2, #8]
|
|
cmp r1, #8
|
|
add r2, r2, #0xc
|
|
blt _0207D38C
|
|
bx lr
|
|
.align 2, 0
|
|
_0207D3AC: .word _022BB500
|
|
arm_func_end Snd_AlarmInit
|
|
|
|
arm_func_start Sndi_IncAlarmId
|
|
Sndi_IncAlarmId: ; 0x0207D3B0
|
|
ldr r2, _0207D3CC ; =_022BB500
|
|
mov r1, #0xc
|
|
mla r1, r0, r1, r2
|
|
ldrb r0, [r1, #8]
|
|
add r0, r0, #1
|
|
strb r0, [r1, #8]
|
|
bx lr
|
|
.align 2, 0
|
|
_0207D3CC: .word _022BB500
|
|
arm_func_end Sndi_IncAlarmId
|
|
|
|
arm_func_start Sndi_SetAlarmHandler
|
|
Sndi_SetAlarmHandler: ; 0x0207D3D0
|
|
mov r3, #0xc
|
|
mul r3, r0, r3
|
|
ldr r0, _0207D3FC ; =_022BB500
|
|
str r1, [r0, r3]
|
|
add r1, r0, r3
|
|
str r2, [r1, #4]
|
|
ldrb r0, [r1, #8]
|
|
add r0, r0, #1
|
|
strb r0, [r1, #8]
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
.align 2, 0
|
|
_0207D3FC: .word _022BB500
|
|
arm_func_end Sndi_SetAlarmHandler
|
|
|
|
arm_func_start Sndi_CallAlarmHandler
|
|
Sndi_CallAlarmHandler: ; 0x0207D400
|
|
stmdb sp!, {r3, lr}
|
|
ldr r3, _0207D440 ; =_022BB500
|
|
and r2, r0, #0xff
|
|
mov r1, #0xc
|
|
mla r3, r2, r1, r3
|
|
mov r1, r0, asr #8
|
|
ldrb r0, [r3, #8]
|
|
and r1, r1, #0xff
|
|
cmp r1, r0
|
|
ldmneia sp!, {r3, pc}
|
|
ldr r1, [r3]
|
|
cmp r1, #0
|
|
ldmeqia sp!, {r3, pc}
|
|
ldr r0, [r3, #4]
|
|
blx r1
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0207D440: .word _022BB500
|
|
arm_func_end Sndi_CallAlarmHandler
|
|
|
|
arm_func_start Snd_GetPlayerStatus
|
|
Snd_GetPlayerStatus: ; 0x0207D444
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _0207D46C ; =_022BB560
|
|
mov r1, #4
|
|
ldr r0, [r0]
|
|
add r0, r0, #4
|
|
bl DC_InvalidateRange
|
|
ldr r0, _0207D46C ; =_022BB560
|
|
ldr r0, [r0]
|
|
ldr r0, [r0, #4]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0207D46C: .word _022BB560
|
|
arm_func_end Snd_GetPlayerStatus
|
|
|
|
arm_func_start Snd_GetChannelStatus
|
|
Snd_GetChannelStatus: ; 0x0207D470
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _0207D498 ; =_022BB560
|
|
mov r1, #2
|
|
ldr r0, [r0]
|
|
add r0, r0, #8
|
|
bl DC_InvalidateRange
|
|
ldr r0, _0207D498 ; =_022BB560
|
|
ldr r0, [r0]
|
|
ldrh r0, [r0, #8]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0207D498: .word _022BB560
|
|
arm_func_end Snd_GetChannelStatus
|
|
|
|
arm_func_start Sndi_GetFinishedCommandTag
|
|
Sndi_GetFinishedCommandTag: ; 0x0207D49C
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _0207D4C0 ; =_022BB560
|
|
mov r1, #4
|
|
ldr r0, [r0]
|
|
bl DC_InvalidateRange
|
|
ldr r0, _0207D4C0 ; =_022BB560
|
|
ldr r0, [r0]
|
|
ldr r0, [r0]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0207D4C0: .word _022BB560
|
|
arm_func_end Sndi_GetFinishedCommandTag
|
|
|
|
arm_func_start Sndi_InitSharedWork
|
|
Sndi_InitSharedWork: ; 0x0207D4C4
|
|
stmdb sp!, {r4, lr}
|
|
mov ip, #0
|
|
str ip, [r0, #4]
|
|
strh ip, [r0, #8]
|
|
strh ip, [r0, #0xa]
|
|
mov r4, r0
|
|
str ip, [r0]
|
|
mvn r2, #0
|
|
mov r3, ip
|
|
_0207D4E8:
|
|
mov lr, r3
|
|
str r3, [r4, #0x40]
|
|
_0207D4F0:
|
|
add r1, r4, lr, lsl #1
|
|
add lr, lr, #1
|
|
strh r2, [r1, #0x20]
|
|
cmp lr, #0x10
|
|
blt _0207D4F0
|
|
add ip, ip, #1
|
|
cmp ip, #0x10
|
|
add r4, r4, #0x24
|
|
blt _0207D4E8
|
|
mov r3, #0
|
|
mvn r2, #0
|
|
_0207D51C:
|
|
add r1, r0, r3, lsl #1
|
|
add r1, r1, #0x200
|
|
add r3, r3, #1
|
|
strh r2, [r1, #0x60]
|
|
cmp r3, #0x10
|
|
blt _0207D51C
|
|
mov r1, #0x280
|
|
bl DC_FlushRange
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end Sndi_InitSharedWork
|
|
|
|
arm_func_start Snd_CalcChannelVolume
|
|
Snd_CalcChannelVolume: ; 0x0207D540
|
|
ldr r1, _0207D5A8 ; =0xFFFFFD2D
|
|
cmp r0, r1
|
|
movlt r0, r1
|
|
blt _0207D558
|
|
cmp r0, #0
|
|
movgt r0, #0
|
|
_0207D558:
|
|
add r1, r0, #0xd3
|
|
mvn r2, #0xef
|
|
cmp r0, r2
|
|
ldr r3, _0207D5AC ; =ARM9_UNKNOWN_TABLE__NA_20AE924
|
|
add r1, r1, #0x200
|
|
ldrb r3, [r3, r1]
|
|
movlt r0, #3
|
|
blt _0207D598
|
|
add r1, r2, #0x78
|
|
cmp r0, r1
|
|
movlt r0, #2
|
|
blt _0207D598
|
|
add r1, r2, #0xb4
|
|
cmp r0, r1
|
|
movlt r0, #1
|
|
movge r0, #0
|
|
_0207D598:
|
|
orr r0, r3, r0, lsl #8
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
bx lr
|
|
.align 2, 0
|
|
_0207D5A8: .word 0xFFFFFD2D
|
|
_0207D5AC: .word ARM9_UNKNOWN_TABLE__NA_20AE924
|
|
arm_func_end Snd_CalcChannelVolume
|
|
|
|
arm_func_start Snd_AssignWaveArc
|
|
Snd_AssignWaveArc: ; 0x0207D5B0
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, r2
|
|
bl Sndi_LockMutex
|
|
add r3, r6, r5, lsl #3
|
|
ldr r2, [r3, #0x18]
|
|
cmp r2, #0
|
|
beq _0207D640
|
|
cmp r4, r2
|
|
bne _0207D5E4
|
|
bl Sndi_UnlockMutex
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_0207D5E4:
|
|
add r1, r6, #0x18
|
|
ldr r0, [r2, #0x18]
|
|
add ip, r1, r5, lsl #3
|
|
cmp ip, r0
|
|
bne _0207D610
|
|
ldr r0, [r3, #0x1c]
|
|
mov r1, #0x3c
|
|
str r0, [r2, #0x18]
|
|
ldr r0, [r3, #0x18]
|
|
bl DC_StoreRange
|
|
b _0207D640
|
|
_0207D610:
|
|
cmp r0, #0
|
|
beq _0207D62C
|
|
_0207D618:
|
|
ldr r1, [r0, #4]
|
|
cmp ip, r1
|
|
movne r0, r1
|
|
cmpne r1, #0
|
|
bne _0207D618
|
|
_0207D62C:
|
|
add r1, r6, r5, lsl #3
|
|
ldr r2, [r1, #0x1c]
|
|
mov r1, #8
|
|
str r2, [r0, #4]
|
|
bl DC_StoreRange
|
|
_0207D640:
|
|
add r0, r6, #0x18
|
|
ldr r1, [r4, #0x18]
|
|
add r0, r0, r5, lsl #3
|
|
str r0, [r4, #0x18]
|
|
add r0, r6, r5, lsl #3
|
|
str r1, [r0, #0x1c]
|
|
str r4, [r0, #0x18]
|
|
bl Sndi_UnlockMutex
|
|
mov r0, r6
|
|
mov r1, #0x3c
|
|
bl DC_StoreRange
|
|
mov r0, r4
|
|
mov r1, #0x3c
|
|
bl DC_StoreRange
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end Snd_AssignWaveArc
|
|
|
|
arm_func_start Snd_DestroyBank
|
|
Snd_DestroyBank: ; 0x0207D67C
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r7, r0
|
|
bl Sndi_LockMutex
|
|
add r5, r7, #0x18
|
|
mov r6, #0
|
|
mov r8, #8
|
|
mov r4, #0x3c
|
|
_0207D698:
|
|
add r1, r7, r6, lsl #3
|
|
ldr r0, [r1, #0x18]
|
|
cmp r0, #0
|
|
beq _0207D6FC
|
|
ldr r3, [r0, #0x18]
|
|
cmp r5, r3
|
|
bne _0207D6C8
|
|
ldr r2, [r1, #0x1c]
|
|
mov r1, r4
|
|
str r2, [r0, #0x18]
|
|
bl DC_StoreRange
|
|
b _0207D6FC
|
|
_0207D6C8:
|
|
cmp r3, #0
|
|
beq _0207D6E4
|
|
_0207D6D0:
|
|
ldr r0, [r3, #4]
|
|
cmp r5, r0
|
|
movne r3, r0
|
|
cmpne r0, #0
|
|
bne _0207D6D0
|
|
_0207D6E4:
|
|
add r0, r7, r6, lsl #3
|
|
ldr r2, [r0, #0x1c]
|
|
mov r0, r3
|
|
mov r1, r8
|
|
str r2, [r3, #4]
|
|
bl DC_StoreRange
|
|
_0207D6FC:
|
|
add r6, r6, #1
|
|
cmp r6, #4
|
|
add r5, r5, #8
|
|
blt _0207D698
|
|
bl Sndi_UnlockMutex
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
arm_func_end Snd_DestroyBank
|
|
|
|
arm_func_start Snd_DestroyWaveArc
|
|
Snd_DestroyWaveArc: ; 0x0207D714
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r4, r0
|
|
bl Sndi_LockMutex
|
|
ldr r0, [r4, #0x18]
|
|
cmp r0, #0
|
|
beq _0207D754
|
|
mov r5, #0
|
|
mov r4, #8
|
|
_0207D734:
|
|
ldr r6, [r0, #4]
|
|
mov r1, r4
|
|
str r5, [r0]
|
|
str r5, [r0, #4]
|
|
bl DC_StoreRange
|
|
mov r0, r6
|
|
cmp r6, #0
|
|
bne _0207D734
|
|
_0207D754:
|
|
bl Sndi_UnlockMutex
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end Snd_DestroyWaveArc
|
|
|
|
arm_func_start Snd_GetFirstInstDataPos
|
|
Snd_GetFirstInstDataPos: ; 0x0207D75C
|
|
sub sp, sp, #8
|
|
mov r1, #0
|
|
str r1, [r0]
|
|
str r1, [sp]
|
|
str r1, [sp, #4]
|
|
str r1, [r0, #4]
|
|
add sp, sp, #8
|
|
bx lr
|
|
arm_func_end Snd_GetFirstInstDataPos
|
|
|
|
arm_func_start Snd_GetNextInstData
|
|
Snd_GetNextInstData: ; 0x0207D77C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r4, [r2]
|
|
ldr r3, [r0, #0x38]
|
|
cmp r4, r3
|
|
bhs _0207D924
|
|
mov ip, #0
|
|
_0207D794:
|
|
add r3, r0, r4, lsl #2
|
|
ldr r4, [r3, #0x3c]
|
|
and r3, r4, #0xff
|
|
strb r4, [r1]
|
|
cmp r3, #0x10
|
|
mov r4, r4, lsr #8
|
|
bgt _0207D7DC
|
|
cmp r3, #0x10
|
|
bge _0207D828
|
|
cmp r3, #5
|
|
addls pc, pc, r3, lsl #2
|
|
b _0207D908
|
|
_0207D7C4: ; jump table
|
|
b _0207D908 ; case 0
|
|
b _0207D7E8 ; case 1
|
|
b _0207D7E8 ; case 2
|
|
b _0207D7E8 ; case 3
|
|
b _0207D7E8 ; case 4
|
|
b _0207D7E8 ; case 5
|
|
_0207D7DC:
|
|
cmp r3, #0x11
|
|
beq _0207D89C
|
|
b _0207D908
|
|
_0207D7E8:
|
|
add r5, r0, r4
|
|
ldrh r4, [r0, r4]
|
|
ldrh r3, [r5, #2]
|
|
mov r0, #1
|
|
strh r4, [r1, #2]
|
|
strh r3, [r1, #4]
|
|
ldrh r4, [r5, #4]
|
|
ldrh r3, [r5, #6]
|
|
strh r4, [r1, #6]
|
|
strh r3, [r1, #8]
|
|
ldrh r3, [r5, #8]
|
|
strh r3, [r1, #0xa]
|
|
ldr r1, [r2]
|
|
add r1, r1, #1
|
|
str r1, [r2]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_0207D828:
|
|
add r5, r0, r4
|
|
b _0207D87C
|
|
_0207D830:
|
|
mov r0, #0xc
|
|
mla ip, lr, r0, r5
|
|
ldrh r4, [ip, #2]
|
|
ldrh r3, [ip, #4]
|
|
mov r0, #1
|
|
strh r4, [r1]
|
|
strh r3, [r1, #2]
|
|
ldrh r4, [ip, #6]
|
|
ldrh r3, [ip, #8]
|
|
strh r4, [r1, #4]
|
|
strh r3, [r1, #6]
|
|
ldrh r4, [ip, #0xa]
|
|
ldrh r3, [ip, #0xc]
|
|
strh r4, [r1, #8]
|
|
strh r3, [r1, #0xa]
|
|
ldr r1, [r2, #4]
|
|
add r1, r1, #1
|
|
str r1, [r2, #4]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_0207D87C:
|
|
ldrb r4, [r5, #1]
|
|
ldrb r3, [r5]
|
|
ldr lr, [r2, #4]
|
|
sub r3, r4, r3
|
|
add r3, r3, #1
|
|
cmp lr, r3
|
|
blo _0207D830
|
|
b _0207D908
|
|
_0207D89C:
|
|
add r4, r0, r4
|
|
b _0207D8FC
|
|
_0207D8A4:
|
|
ldrb lr, [r4, r3]
|
|
cmp lr, #0
|
|
beq _0207D908
|
|
mov r0, #0xc
|
|
mla lr, r3, r0, r4
|
|
ldrh ip, [lr, #8]
|
|
ldrh r3, [lr, #0xa]
|
|
mov r0, #1
|
|
strh ip, [r1]
|
|
strh r3, [r1, #2]
|
|
ldrh ip, [lr, #0xc]
|
|
ldrh r3, [lr, #0xe]
|
|
strh ip, [r1, #4]
|
|
strh r3, [r1, #6]
|
|
ldrh ip, [lr, #0x10]
|
|
ldrh r3, [lr, #0x12]
|
|
strh ip, [r1, #8]
|
|
strh r3, [r1, #0xa]
|
|
ldr r1, [r2, #4]
|
|
add r1, r1, #1
|
|
str r1, [r2, #4]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_0207D8FC:
|
|
ldr r3, [r2, #4]
|
|
cmp r3, #8
|
|
blo _0207D8A4
|
|
_0207D908:
|
|
ldr r3, [r2]
|
|
add r3, r3, #1
|
|
stmia r2, {r3, ip}
|
|
ldr r4, [r2]
|
|
ldr r3, [r0, #0x38]
|
|
cmp r4, r3
|
|
blo _0207D794
|
|
_0207D924:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end Snd_GetNextInstData
|
|
|
|
arm_func_start Snd_GetWaveDataCount
|
|
Snd_GetWaveDataCount: ; 0x0207D92C
|
|
ldr r0, [r0, #0x38]
|
|
bx lr
|
|
arm_func_end Snd_GetWaveDataCount
|
|
|
|
arm_func_start Snd_SetWaveDataAddress
|
|
Snd_SetWaveDataAddress: ; 0x0207D934
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, r2
|
|
bl Sndi_LockMutex
|
|
add r0, r6, #0x3c
|
|
add r2, r6, r5, lsl #2
|
|
add r0, r0, r5, lsl #2
|
|
mov r1, #4
|
|
str r4, [r2, #0x3c]
|
|
bl DC_StoreRange
|
|
bl Sndi_UnlockMutex
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end Snd_SetWaveDataAddress
|
|
|
|
arm_func_start Snd_GetWaveDataAddress
|
|
Snd_GetWaveDataAddress: ; 0x0207D968
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl Sndi_LockMutex
|
|
add r0, r5, r4, lsl #2
|
|
ldr r4, [r0, #0x3c]
|
|
cmp r4, #0
|
|
beq _0207D994
|
|
cmp r4, #0x2000000
|
|
addlo r4, r5, r4
|
|
b _0207D998
|
|
_0207D994:
|
|
mov r4, #0
|
|
_0207D998:
|
|
bl Sndi_UnlockMutex
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end Snd_GetWaveDataAddress
|
|
|
|
arm_func_start PXI_Init
|
|
PXI_Init: ; 0x0207D9A4
|
|
ldr ip, _0207D9AC ; =PXI_InitFifo
|
|
bx ip
|
|
.align 2, 0
|
|
_0207D9AC: .word PXI_InitFifo
|
|
arm_func_end PXI_Init
|
|
|
|
arm_func_start PXI_InitFifo
|
|
PXI_InitFifo: ; 0x0207D9B0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
bl EnableIrqFlag
|
|
ldr r1, _0207DA94 ; =_022BB564
|
|
mov r4, r0
|
|
ldrh r0, [r1]
|
|
cmp r0, #0
|
|
bne _0207DA88
|
|
mov r2, #1
|
|
strh r2, [r1]
|
|
mov r2, #0
|
|
ldr r0, _0207DA98 ; =0x027FFC00
|
|
mov r1, r2
|
|
str r2, [r0, #0x388]
|
|
ldr r0, _0207DA9C ; =_022BB568
|
|
_0207D9E8:
|
|
str r1, [r0, r2, lsl #2]
|
|
add r2, r2, #1
|
|
cmp r2, #0x20
|
|
blt _0207D9E8
|
|
ldr r2, _0207DAA0 ; =0x0000C408
|
|
ldr r1, _0207DAA4 ; =0x04000184
|
|
mov r0, #0x40000
|
|
strh r2, [r1]
|
|
bl OS_ResetRequestIrqMask
|
|
ldr r1, _0207DAA8 ; =PXIi_HandlerRecvFifoNotEmpty
|
|
mov r0, #0x40000
|
|
bl OS_SetIrqFunction
|
|
mov r0, #0x40000
|
|
bl OS_EnableIrqMask
|
|
mov r5, #0
|
|
ldr r3, _0207DAAC ; =0x04000180
|
|
mov r1, r5
|
|
mov r2, #0x3e8
|
|
_0207DA30:
|
|
ldrh r0, [r3]
|
|
ands lr, r0, #0xf
|
|
mov r0, lr, lsl #8
|
|
strh r0, [r3]
|
|
bne _0207DA4C
|
|
cmp r5, #4
|
|
bgt _0207DA88
|
|
_0207DA4C:
|
|
ldrh r0, [r3]
|
|
mov ip, r2
|
|
and r0, r0, #0xf
|
|
cmp r0, lr
|
|
bne _0207DA80
|
|
_0207DA60:
|
|
cmp ip, #0
|
|
movle r5, r1
|
|
ble _0207DA80
|
|
ldrh r0, [r3]
|
|
sub ip, ip, #1
|
|
and r0, r0, #0xf
|
|
cmp r0, lr
|
|
beq _0207DA60
|
|
_0207DA80:
|
|
add r5, r5, #1
|
|
b _0207DA30
|
|
_0207DA88:
|
|
mov r0, r4
|
|
bl SetIrqFlag
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0207DA94: .word _022BB564
|
|
_0207DA98: .word 0x027FFC00
|
|
_0207DA9C: .word _022BB568
|
|
_0207DAA0: .word 0x0000C408
|
|
_0207DAA4: .word 0x04000184
|
|
_0207DAA8: .word PXIi_HandlerRecvFifoNotEmpty
|
|
_0207DAAC: .word 0x04000180
|
|
arm_func_end PXI_InitFifo
|
|
|
|
arm_func_start PXI_SetFifoRecvCallback
|
|
PXI_SetFifoRecvCallback: ; 0x0207DAB0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r0
|
|
mov r5, r1
|
|
bl EnableIrqFlag
|
|
ldr r1, _0207DAF4 ; =_022BB568
|
|
ldr r3, _0207DAF8 ; =0x027FFC00
|
|
str r5, [r1, r4, lsl #2]
|
|
cmp r5, #0
|
|
ldrne r2, [r3, #0x388]
|
|
mov r1, #1
|
|
orrne r1, r2, r1, lsl r4
|
|
mvneq r1, r1, lsl r4
|
|
ldreq r2, [r3, #0x388]
|
|
andeq r1, r2, r1
|
|
str r1, [r3, #0x388]
|
|
bl SetIrqFlag
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0207DAF4: .word _022BB568
|
|
_0207DAF8: .word 0x027FFC00
|
|
arm_func_end PXI_SetFifoRecvCallback
|
|
|
|
arm_func_start PXI_IsCallbackReady
|
|
PXI_IsCallbackReady: ; 0x0207DAFC
|
|
ldr r2, _0207DB1C ; =0x027FFC00
|
|
mov r3, #1
|
|
add r1, r2, r1, lsl #2
|
|
ldr r1, [r1, #0x388]
|
|
tst r1, r3, lsl r0
|
|
moveq r3, #0
|
|
mov r0, r3
|
|
bx lr
|
|
.align 2, 0
|
|
_0207DB1C: .word 0x027FFC00
|
|
arm_func_end PXI_IsCallbackReady
|
|
|
|
arm_func_start PXI_SendWordByFifo
|
|
PXI_SendWordByFifo: ; 0x0207DB20
|
|
stmdb sp!, {r3, lr}
|
|
ldr ip, [sp]
|
|
ldr r3, _0207DBA4 ; =0x04000184
|
|
bic ip, ip, #0x1f
|
|
and r0, r0, #0x1f
|
|
orr ip, ip, r0
|
|
ldrh r0, [r3]
|
|
bic ip, ip, #0x20
|
|
mov r2, r2, lsl #0x1f
|
|
orr r2, ip, r2, lsr #26
|
|
and r2, r2, #0x3f
|
|
orr r1, r2, r1, lsl #6
|
|
str r1, [sp]
|
|
tst r0, #0x4000
|
|
beq _0207DB70
|
|
ldrh r1, [r3]
|
|
mvn r0, #0
|
|
orr r1, r1, #0xc000
|
|
strh r1, [r3]
|
|
ldmia sp!, {r3, pc}
|
|
_0207DB70:
|
|
bl EnableIrqFlag
|
|
ldr r2, _0207DBA4 ; =0x04000184
|
|
ldrh r1, [r2]
|
|
tst r1, #2
|
|
beq _0207DB90
|
|
bl SetIrqFlag
|
|
mvn r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
_0207DB90:
|
|
ldr r1, [sp]
|
|
str r1, [r2, #4]
|
|
bl SetIrqFlag
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0207DBA4: .word 0x04000184
|
|
arm_func_end PXI_SendWordByFifo
|
|
|
|
arm_func_start PXIi_HandlerRecvFifoNotEmpty
|
|
PXIi_HandlerRecvFifoNotEmpty: ; 0x0207DBA8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
|
|
sub sp, sp, #4
|
|
mvn r8, #3
|
|
ldr r6, [sp]
|
|
ldr sb, _0207DCB8 ; =0x04000184
|
|
ldr r4, _0207DCBC ; =_022BB568
|
|
add sl, r8, #1
|
|
mov r7, #0x4100000
|
|
mov r5, #0
|
|
_0207DBCC:
|
|
ldrh r0, [sb]
|
|
tst r0, #0x4000
|
|
beq _0207DBEC
|
|
ldrh r0, [sb]
|
|
add r1, r8, #1
|
|
orr r0, r0, #0xc000
|
|
strh r0, [sb]
|
|
b _0207DC18
|
|
_0207DBEC:
|
|
bl EnableIrqFlag
|
|
ldrh r1, [sb]
|
|
tst r1, #0x100
|
|
beq _0207DC08
|
|
bl SetIrqFlag
|
|
mov r1, r8
|
|
b _0207DC18
|
|
_0207DC08:
|
|
ldr r6, [r7]
|
|
str r6, [sp]
|
|
bl SetIrqFlag
|
|
mov r1, r5
|
|
_0207DC18:
|
|
cmp r1, r8
|
|
addeq sp, sp, #4
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
cmp r1, sl
|
|
beq _0207DBCC
|
|
mov r0, r6, lsl #0x1b
|
|
movs r0, r0, lsr #0x1b
|
|
beq _0207DBCC
|
|
ldr r3, [r4, r0, lsl #2]
|
|
cmp r3, #0
|
|
beq _0207DC58
|
|
mov r2, r6, lsl #0x1a
|
|
mov r1, r6, lsr #6
|
|
mov r2, r2, lsr #0x1f
|
|
blx r3
|
|
b _0207DBCC
|
|
_0207DC58:
|
|
mov r0, r6, lsl #0x1a
|
|
movs r0, r0, lsr #0x1f
|
|
bne _0207DBCC
|
|
ldrh r0, [sb]
|
|
orr r6, r6, #0x20
|
|
str r6, [sp]
|
|
tst r0, #0x4000
|
|
beq _0207DC88
|
|
ldrh r0, [sb]
|
|
orr r0, r0, #0xc000
|
|
strh r0, [sb]
|
|
b _0207DBCC
|
|
_0207DC88:
|
|
bl EnableIrqFlag
|
|
ldrh r1, [sb]
|
|
tst r1, #2
|
|
beq _0207DCA0
|
|
bl SetIrqFlag
|
|
b _0207DBCC
|
|
_0207DCA0:
|
|
mov r1, r6
|
|
str r1, [sb, #4]
|
|
bl SetIrqFlag
|
|
b _0207DBCC
|
|
_0207DCB0:
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_0207DCB8: .word 0x04000184
|
|
_0207DCBC: .word _022BB568
|
|
arm_func_end PXIi_HandlerRecvFifoNotEmpty
|
|
|
|
arm_func_start FSi_ReleaseCommand
|
|
FSi_ReleaseCommand: ; 0x0207DCC0
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl EnableIrqFlag
|
|
ldr r1, [r5]
|
|
mov r6, r0
|
|
ldr r0, [r5, #4]
|
|
cmp r1, #0
|
|
strne r0, [r1, #4]
|
|
cmp r0, #0
|
|
strne r1, [r0]
|
|
mov r0, #0
|
|
str r0, [r5]
|
|
str r0, [r5, #4]
|
|
ldr r1, [r5, #0xc]
|
|
add r0, r5, #0x18
|
|
bic r1, r1, #0x4f
|
|
str r1, [r5, #0xc]
|
|
str r4, [r5, #0x14]
|
|
bl OS_WakeupThread
|
|
mov r0, r6
|
|
bl SetIrqFlag
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end FSi_ReleaseCommand
|
|
|
|
arm_func_start FSi_TranslateCommand
|
|
FSi_TranslateCommand: ; 0x0207DD1C
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r8, r0
|
|
ldr r0, [r8, #0xc]
|
|
ldr r5, [r8, #8]
|
|
mov r7, r1
|
|
mov r1, #1
|
|
tst r0, #4
|
|
mov r6, r1, lsl r7
|
|
moveq r1, #0
|
|
ldr r0, [r5, #0x1c]
|
|
cmp r1, #0
|
|
orrne r0, r0, #0x200
|
|
orreq r0, r0, #0x100
|
|
str r0, [r5, #0x1c]
|
|
ldr r0, [r5, #0x58]
|
|
tst r0, r6
|
|
beq _0207DDC4
|
|
ldr r2, [r5, #0x54]
|
|
mov r0, r8
|
|
mov r1, r7
|
|
blx r2
|
|
mov r4, r0
|
|
cmp r4, #8
|
|
addls pc, pc, r4, lsl #2
|
|
b _0207DDC8
|
|
_0207DD80: ; jump table
|
|
b _0207DDA4 ; case 0
|
|
b _0207DDA4 ; case 1
|
|
b _0207DDC8 ; case 2
|
|
b _0207DDC8 ; case 3
|
|
b _0207DDA4 ; case 4
|
|
b _0207DDC8 ; case 5
|
|
b _0207DDC8 ; case 6
|
|
b _0207DDC8 ; case 7
|
|
b _0207DDAC ; case 8
|
|
_0207DDA4:
|
|
str r4, [r8, #0x14]
|
|
b _0207DDC8
|
|
_0207DDAC:
|
|
ldr r1, [r5, #0x58]
|
|
mvn r0, r6
|
|
and r0, r1, r0
|
|
str r0, [r5, #0x58]
|
|
mov r4, #7
|
|
b _0207DDC8
|
|
_0207DDC4:
|
|
mov r4, #7
|
|
_0207DDC8:
|
|
cmp r4, #7
|
|
bne _0207DDE4
|
|
ldr r1, _0207DEA8 ; =_020AEBF8
|
|
mov r0, r8
|
|
ldr r1, [r1, r7, lsl #2]
|
|
blx r1
|
|
mov r4, r0
|
|
_0207DDE4:
|
|
cmp r4, #6
|
|
bne _0207DE5C
|
|
ldr r0, [r8, #0xc]
|
|
tst r0, #4
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
cmp r0, #0
|
|
beq _0207DEA0
|
|
bl EnableIrqFlag
|
|
ldr r1, [r5, #0x1c]
|
|
mov r7, r0
|
|
tst r1, #0x200
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
cmp r0, #0
|
|
beq _0207DE4C
|
|
mov r4, #0
|
|
mov r6, #1
|
|
_0207DE2C:
|
|
add r0, r5, #0xc
|
|
bl OS_SleepThread
|
|
ldr r0, [r5, #0x1c]
|
|
tst r0, #0x200
|
|
movne r0, r6
|
|
moveq r0, r4
|
|
cmp r0, #0
|
|
bne _0207DE2C
|
|
_0207DE4C:
|
|
mov r0, r7
|
|
ldr r4, [r8, #0x14]
|
|
bl SetIrqFlag
|
|
b _0207DEA0
|
|
_0207DE5C:
|
|
ldr r0, [r8, #0xc]
|
|
tst r0, #4
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
cmp r0, #0
|
|
bne _0207DE90
|
|
ldr r1, [r5, #0x1c]
|
|
mov r0, r8
|
|
bic r2, r1, #0x100
|
|
mov r1, r4
|
|
str r2, [r5, #0x1c]
|
|
bl FSi_ReleaseCommand
|
|
b _0207DEA0
|
|
_0207DE90:
|
|
ldr r0, [r5, #0x1c]
|
|
bic r0, r0, #0x200
|
|
str r0, [r5, #0x1c]
|
|
str r4, [r8, #0x14]
|
|
_0207DEA0:
|
|
mov r0, r4
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_0207DEA8: .word _020AEBF8
|
|
arm_func_end FSi_TranslateCommand
|
|
|
|
arm_func_start FSi_StrNiCmp
|
|
FSi_StrNiCmp: ; 0x0207DEAC
|
|
stmdb sp!, {r3, lr}
|
|
cmp r2, #0
|
|
mov lr, #0
|
|
bls _0207DEF4
|
|
_0207DEBC:
|
|
ldrb ip, [r0, lr]
|
|
ldrb r3, [r1, lr]
|
|
sub ip, ip, #0x41
|
|
cmp ip, #0x19
|
|
sub r3, r3, #0x41
|
|
addls ip, ip, #0x20
|
|
cmp r3, #0x19
|
|
addls r3, r3, #0x20
|
|
cmp ip, r3
|
|
subne r0, ip, r3
|
|
ldmneia sp!, {r3, pc}
|
|
add lr, lr, #1
|
|
cmp lr, r2
|
|
blo _0207DEBC
|
|
_0207DEF4:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end FSi_StrNiCmp
|
|
|
|
arm_func_start FSi_ReadTable
|
|
FSi_ReadTable: ; 0x0207DEFC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r7, r0
|
|
ldr r4, [r7]
|
|
mov r6, r2
|
|
ldr r2, [r4, #0x1c]
|
|
mov r0, r4
|
|
orr r2, r2, #0x200
|
|
str r2, [r4, #0x1c]
|
|
ldr r2, [r7, #4]
|
|
ldr r5, [r4, #0x50]
|
|
mov r3, r6
|
|
blx r5
|
|
cmp r0, #0
|
|
cmpne r0, #1
|
|
beq _0207DF44
|
|
cmp r0, #6
|
|
beq _0207DF54
|
|
b _0207DFAC
|
|
_0207DF44:
|
|
ldr r1, [r4, #0x1c]
|
|
bic r1, r1, #0x200
|
|
str r1, [r4, #0x1c]
|
|
b _0207DFAC
|
|
_0207DF54:
|
|
bl EnableIrqFlag
|
|
ldr r1, [r4, #0x1c]
|
|
mov r5, r0
|
|
tst r1, #0x200
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
cmp r0, #0
|
|
beq _0207DF9C
|
|
mov r8, #0
|
|
mov sb, #1
|
|
_0207DF7C:
|
|
add r0, r4, #0xc
|
|
bl OS_SleepThread
|
|
ldr r0, [r4, #0x1c]
|
|
tst r0, #0x200
|
|
movne r0, sb
|
|
moveq r0, r8
|
|
cmp r0, #0
|
|
bne _0207DF7C
|
|
_0207DF9C:
|
|
mov r0, r5
|
|
bl SetIrqFlag
|
|
ldr r0, [r4, #0x24]
|
|
ldr r0, [r0, #0x14]
|
|
_0207DFAC:
|
|
ldr r1, [r7, #4]
|
|
add r1, r1, r6
|
|
str r1, [r7, #4]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
arm_func_end FSi_ReadTable
|
|
|
|
arm_func_start FSi_SeekDirDirect
|
|
FSi_SeekDirDirect: ; 0x0207DFBC
|
|
ldr r3, [r0, #0xc]
|
|
mov r2, #0
|
|
orr r3, r3, #4
|
|
str r3, [r0, #0xc]
|
|
ldr r3, [r0, #8]
|
|
ldr ip, _0207DFEC ; =FSi_TranslateCommand
|
|
str r3, [r0, #0x30]
|
|
str r2, [r0, #0x38]
|
|
strh r2, [r0, #0x36]
|
|
strh r1, [r0, #0x34]
|
|
mov r1, #2
|
|
bx ip
|
|
.align 2, 0
|
|
_0207DFEC: .word FSi_TranslateCommand
|
|
arm_func_end FSi_SeekDirDirect
|
|
|
|
arm_func_start FSi_ReadFileCommand
|
|
FSi_ReadFileCommand: ; 0x0207DFF0
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, [r0, #0x2c]
|
|
ldr r3, [r0, #0x38]
|
|
ldr lr, [r0, #8]
|
|
ldr r1, [r0, #0x30]
|
|
add ip, r2, r3
|
|
str ip, [r0, #0x2c]
|
|
ldr ip, [lr, #0x48]
|
|
mov r0, lr
|
|
blx ip
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end FSi_ReadFileCommand
|
|
|
|
arm_func_start FSi_WriteFileCommand
|
|
FSi_WriteFileCommand: ; 0x0207E01C
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, [r0, #0x2c]
|
|
ldr r3, [r0, #0x38]
|
|
ldr lr, [r0, #8]
|
|
ldr r1, [r0, #0x30]
|
|
add ip, r2, r3
|
|
str ip, [r0, #0x2c]
|
|
ldr ip, [lr, #0x4c]
|
|
mov r0, lr
|
|
blx ip
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end FSi_WriteFileCommand
|
|
|
|
arm_func_start FSi_SeekDirCommand
|
|
FSi_SeekDirCommand: ; 0x0207E048
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
sub sp, sp, #0x10
|
|
mov r6, r0
|
|
ldr r4, [r6, #8]
|
|
add r5, r6, #0x30
|
|
str r4, [sp]
|
|
ldrh r1, [r5, #4]
|
|
ldr r2, [r4, #0x34]
|
|
add r0, sp, #0
|
|
add r3, r2, r1, lsl #3
|
|
add r1, sp, #8
|
|
mov r2, #8
|
|
str r3, [sp, #4]
|
|
bl FSi_ReadTable
|
|
movs r3, r0
|
|
bne _0207E0D0
|
|
add ip, r6, #0x20
|
|
ldmia r5, {r0, r1, r2}
|
|
stmia ip, {r0, r1, r2}
|
|
ldrh r0, [r5, #6]
|
|
cmp r0, #0
|
|
ldreq r0, [r5, #8]
|
|
cmpeq r0, #0
|
|
bne _0207E0C0
|
|
ldrh r0, [sp, #0xc]
|
|
strh r0, [r6, #0x26]
|
|
ldr r1, [r4, #0x34]
|
|
ldr r0, [sp, #8]
|
|
add r0, r1, r0
|
|
str r0, [r6, #0x28]
|
|
_0207E0C0:
|
|
ldrh r1, [sp, #0xe]
|
|
ldr r0, _0207E0DC ; =0x00000FFF
|
|
and r0, r1, r0
|
|
str r0, [r6, #0x2c]
|
|
_0207E0D0:
|
|
mov r0, r3
|
|
add sp, sp, #0x10
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0207E0DC: .word 0x00000FFF
|
|
arm_func_end FSi_SeekDirCommand
|
|
|
|
arm_func_start FSi_ReadDirCommand
|
|
FSi_ReadDirCommand: ; 0x0207E0E0
|
|
stmdb sp!, {r4, r5, lr}
|
|
sub sp, sp, #0xc
|
|
mov r5, r0
|
|
ldr r4, [r5, #0x30]
|
|
ldr r1, [r5, #8]
|
|
add r0, sp, #4
|
|
str r1, [sp, #4]
|
|
ldr r3, [r5, #0x28]
|
|
add r1, sp, #0
|
|
mov r2, #1
|
|
str r3, [sp, #8]
|
|
bl FSi_ReadTable
|
|
cmp r0, #0
|
|
addne sp, sp, #0xc
|
|
ldmneia sp!, {r4, r5, pc}
|
|
ldrb r1, [sp]
|
|
and r2, r1, #0x7f
|
|
mov r1, r1, asr #7
|
|
str r2, [r4, #0x10]
|
|
and r1, r1, #1
|
|
str r1, [r4, #0xc]
|
|
ldr r2, [r4, #0x10]
|
|
cmp r2, #0
|
|
addeq sp, sp, #0xc
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r4, r5, pc}
|
|
ldr r1, [r5, #0x34]
|
|
cmp r1, #0
|
|
bne _0207E180
|
|
add r0, sp, #4
|
|
add r1, r4, #0x14
|
|
bl FSi_ReadTable
|
|
cmp r0, #0
|
|
addne sp, sp, #0xc
|
|
ldmneia sp!, {r4, r5, pc}
|
|
ldr r1, [r4, #0x10]
|
|
mov r2, #0
|
|
add r1, r4, r1
|
|
strb r2, [r1, #0x14]
|
|
b _0207E18C
|
|
_0207E180:
|
|
ldr r1, [sp, #8]
|
|
add r1, r1, r2
|
|
str r1, [sp, #8]
|
|
_0207E18C:
|
|
ldr r1, [r4, #0xc]
|
|
cmp r1, #0
|
|
beq _0207E1DC
|
|
add r0, sp, #4
|
|
add r1, sp, #2
|
|
mov r2, #2
|
|
bl FSi_ReadTable
|
|
cmp r0, #0
|
|
addne sp, sp, #0xc
|
|
ldmneia sp!, {r4, r5, pc}
|
|
ldr r2, [r5, #8]
|
|
ldr r1, _0207E208 ; =0x00000FFF
|
|
str r2, [r4]
|
|
ldrh r3, [sp, #2]
|
|
mov r2, #0
|
|
and r1, r3, r1
|
|
strh r1, [r4, #4]
|
|
strh r2, [r4, #6]
|
|
str r2, [r4, #8]
|
|
b _0207E1F8
|
|
_0207E1DC:
|
|
ldr r1, [r5, #8]
|
|
str r1, [r4]
|
|
ldrh r1, [r5, #0x26]
|
|
str r1, [r4, #4]
|
|
ldrh r1, [r5, #0x26]
|
|
add r1, r1, #1
|
|
strh r1, [r5, #0x26]
|
|
_0207E1F8:
|
|
ldr r1, [sp, #8]
|
|
str r1, [r5, #0x28]
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, pc}
|
|
.align 2, 0
|
|
_0207E208: .word 0x00000FFF
|
|
arm_func_end FSi_ReadDirCommand
|
|
|
|
arm_func_start FSi_FindPathCommand
|
|
FSi_FindPathCommand: ; 0x0207E20C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
|
|
sub sp, sp, #0x94
|
|
mov sb, r0
|
|
ldr r5, [sb, #0x3c]
|
|
mov r1, #2
|
|
ldr r6, [sb, #0x40]
|
|
bl FSi_TranslateCommand
|
|
ldrb r3, [r5]
|
|
cmp r3, #0
|
|
beq _0207E3C4
|
|
_0207E234:
|
|
mov r8, #0
|
|
mov r0, #1
|
|
mov r1, r8
|
|
b _0207E248
|
|
_0207E244:
|
|
add r8, r8, #1
|
|
_0207E248:
|
|
ldrb r7, [r5, r8]
|
|
mov r2, r1
|
|
cmp r7, #0
|
|
cmpne r7, #0x2f
|
|
cmpne r7, #0x5c
|
|
movne r2, r0
|
|
cmp r2, #0
|
|
bne _0207E244
|
|
cmp r7, #0
|
|
cmpeq r6, #0
|
|
movne r7, #1
|
|
cmp r8, #0
|
|
addeq sp, sp, #0x94
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
cmp r3, #0x2e
|
|
bne _0207E2DC
|
|
cmp r8, #1
|
|
addeq r5, r5, #1
|
|
beq _0207E3A8
|
|
ldrb r0, [r5, #1]
|
|
cmp r8, #2
|
|
moveq r1, #1
|
|
movne r1, #0
|
|
cmp r0, #0x2e
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
tst r1, r0
|
|
beq _0207E2DC
|
|
ldrh r0, [sb, #0x24]
|
|
cmp r0, #0
|
|
beq _0207E2D4
|
|
ldr r1, [sb, #0x2c]
|
|
mov r0, sb
|
|
bl FSi_SeekDirDirect
|
|
_0207E2D4:
|
|
add r5, r5, #2
|
|
b _0207E3A8
|
|
_0207E2DC:
|
|
cmp r8, #0x7f
|
|
addgt sp, sp, #0x94
|
|
movgt r0, #1
|
|
ldmgtia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
add r1, sp, #0
|
|
mov r0, #0
|
|
str r1, [sb, #0x30]
|
|
str r0, [sb, #0x34]
|
|
add sl, sp, #0x14
|
|
mov r4, #3
|
|
_0207E304:
|
|
mov r0, sb
|
|
mov r1, r4
|
|
bl FSi_TranslateCommand
|
|
cmp r0, #0
|
|
addne sp, sp, #0x94
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
ldr r0, [sp, #0xc]
|
|
cmp r7, r0
|
|
ldreq r0, [sp, #0x10]
|
|
cmpeq r8, r0
|
|
bne _0207E304
|
|
mov r0, r5
|
|
mov r1, sl
|
|
mov r2, r8
|
|
bl FSi_StrNiCmp
|
|
cmp r0, #0
|
|
bne _0207E304
|
|
cmp r7, #0
|
|
beq _0207E378
|
|
add r0, sp, #0
|
|
add r3, sb, #0x30
|
|
ldmia r0, {r0, r1, r2}
|
|
stmia r3, {r0, r1, r2}
|
|
mov r0, sb
|
|
mov r1, #2
|
|
add r5, r5, r8
|
|
bl FSi_TranslateCommand
|
|
b _0207E3A8
|
|
_0207E378:
|
|
cmp r6, #0
|
|
addne sp, sp, #0x94
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
ldr r3, [sb, #0x44]
|
|
ldr r2, [sp]
|
|
ldr r1, [sp, #4]
|
|
add sp, sp, #0x94
|
|
str r2, [r3]
|
|
mov r0, #0
|
|
str r1, [r3, #4]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
_0207E3A8:
|
|
ldrb r0, [r5]
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
ldrb r3, [r5, r0]!
|
|
cmp r3, #0
|
|
bne _0207E234
|
|
_0207E3C4:
|
|
cmp r6, #0
|
|
addeq sp, sp, #0x94
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
ldr r3, [sb, #0x44]
|
|
add r0, sb, #0x20
|
|
ldmia r0, {r0, r1, r2}
|
|
stmia r3, {r0, r1, r2}
|
|
mov r0, #0
|
|
add sp, sp, #0x94
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
arm_func_end FSi_FindPathCommand
|
|
|
|
arm_func_start FSi_GetPathCommand
|
|
FSi_GetPathCommand: ; 0x0207E3F0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0xe0
|
|
mov sl, r0
|
|
ldr r1, [sl, #8]
|
|
add r0, sp, #4
|
|
str r1, [sp]
|
|
bl FileInit
|
|
ldr r0, [sl, #8]
|
|
str r0, [sp, #0xc]
|
|
ldr r0, [sl, #0xc]
|
|
tst r0, #0x20
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
cmp r0, #0
|
|
ldrneh sb, [sl, #0x24]
|
|
movne r6, #0x10000
|
|
bne _0207E4D4
|
|
ldrh r0, [sl, #0x38]
|
|
ldr r6, [sl, #0x20]
|
|
cmp r0, #0
|
|
ldrneh sb, [sl, #0x3a]
|
|
bne _0207E4D4
|
|
mov r7, #0
|
|
mov r8, r7
|
|
mov sb, #0x10000
|
|
add r5, sp, #4
|
|
mov r4, #3
|
|
add fp, sp, #0x4c
|
|
_0207E460:
|
|
mov r0, r5
|
|
mov r1, r7
|
|
bl FSi_SeekDirDirect
|
|
mov r2, #1
|
|
cmp r7, #0
|
|
mov r0, r5
|
|
mov r1, #3
|
|
ldreq r8, [sp, #0x30]
|
|
str fp, [sp, #0x34]
|
|
str r2, [sp, #0x38]
|
|
bl FSi_TranslateCommand
|
|
cmp r0, #0
|
|
bne _0207E4C0
|
|
_0207E494:
|
|
ldr r0, [sp, #0x58]
|
|
cmp r0, #0
|
|
ldreq r0, [sp, #0x50]
|
|
cmpeq r0, r6
|
|
ldreqh sb, [sp, #0x28]
|
|
beq _0207E4C0
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl FSi_TranslateCommand
|
|
cmp r0, #0
|
|
beq _0207E494
|
|
_0207E4C0:
|
|
cmp sb, #0x10000
|
|
bne _0207E4D4
|
|
add r7, r7, #1
|
|
cmp r7, r8
|
|
blo _0207E460
|
|
_0207E4D4:
|
|
cmp sb, #0x10000
|
|
bne _0207E4F0
|
|
mov r0, #0
|
|
strh r0, [sl, #0x38]
|
|
add sp, sp, #0xe0
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0207E4F0:
|
|
ldrh r0, [sl, #0x38]
|
|
cmp r0, #0
|
|
bne _0207E5D4
|
|
ldr r0, [sp]
|
|
mov r1, #0
|
|
ldr r0, [r0]
|
|
cmp r0, #0xff
|
|
addls r8, r1, #1
|
|
bls _0207E520
|
|
cmp r0, #0xff00
|
|
addls r8, r1, #2
|
|
addhi r8, r1, #3
|
|
_0207E520:
|
|
cmp r6, #0x10000
|
|
ldrne r0, [sp, #0x5c]
|
|
add r8, r8, #2
|
|
addne r8, r8, r0
|
|
mov r7, sb
|
|
cmp sb, #0
|
|
beq _0207E5C8
|
|
add r0, sp, #4
|
|
mov r1, sb
|
|
bl FSi_SeekDirDirect
|
|
add r5, sp, #4
|
|
mov r4, #3
|
|
add fp, sp, #0x4c
|
|
_0207E554:
|
|
ldr r1, [sp, #0x30]
|
|
mov r0, r5
|
|
bl FSi_SeekDirDirect
|
|
mov r1, #1
|
|
str r1, [sp, #0x38]
|
|
mov r0, r5
|
|
mov r1, #3
|
|
str fp, [sp, #0x34]
|
|
bl FSi_TranslateCommand
|
|
cmp r0, #0
|
|
bne _0207E5BC
|
|
_0207E580:
|
|
ldr r0, [sp, #0x58]
|
|
cmp r0, #0
|
|
beq _0207E5A8
|
|
ldrh r0, [sp, #0x50]
|
|
cmp r0, r7
|
|
bne _0207E5A8
|
|
ldr r0, [sp, #0x5c]
|
|
add r0, r0, #1
|
|
add r8, r8, r0
|
|
b _0207E5BC
|
|
_0207E5A8:
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl FSi_TranslateCommand
|
|
cmp r0, #0
|
|
beq _0207E580
|
|
_0207E5BC:
|
|
ldrh r7, [sp, #0x28]
|
|
cmp r7, #0
|
|
bne _0207E554
|
|
_0207E5C8:
|
|
add r0, r8, #1
|
|
strh r0, [sl, #0x38]
|
|
strh sb, [sl, #0x3a]
|
|
_0207E5D4:
|
|
ldr r5, [sl, #0x30]
|
|
cmp r5, #0
|
|
addeq sp, sp, #0xe0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldrh r4, [sl, #0x38]
|
|
ldr r0, [sl, #0x34]
|
|
cmp r0, r4
|
|
addlo sp, sp, #0xe0
|
|
movlo r0, #1
|
|
ldmloia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldr r0, [sp]
|
|
mov r7, #0
|
|
ldr r0, [r0]
|
|
cmp r0, #0xff
|
|
movls r8, #1
|
|
bls _0207E624
|
|
cmp r0, #0xff00
|
|
movls r8, #2
|
|
movhi r8, #3
|
|
_0207E624:
|
|
ldr r0, [sp]
|
|
mov r1, r5
|
|
mov r2, r8
|
|
bl MI_CpuCopy8
|
|
add r1, r7, r8
|
|
ldr r0, _0207E798 ; =_020B2BB0
|
|
add r1, r5, r1
|
|
mov r2, #2
|
|
bl MI_CpuCopy8
|
|
add r0, sp, #4
|
|
mov r1, sb
|
|
bl FSi_SeekDirDirect
|
|
cmp r6, #0x10000
|
|
beq _0207E6D4
|
|
add r3, sp, #0x4c
|
|
mov r2, #0
|
|
add r0, sp, #4
|
|
mov r1, #3
|
|
str r3, [sp, #0x34]
|
|
str r2, [sp, #0x38]
|
|
bl FSi_TranslateCommand
|
|
cmp r0, #0
|
|
bne _0207E6B0
|
|
add r8, sp, #4
|
|
mov r7, #3
|
|
_0207E688:
|
|
ldr r0, [sp, #0x58]
|
|
cmp r0, #0
|
|
ldreq r0, [sp, #0x50]
|
|
cmpeq r0, r6
|
|
beq _0207E6B0
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl FSi_TranslateCommand
|
|
cmp r0, #0
|
|
beq _0207E688
|
|
_0207E6B0:
|
|
ldr r0, [sp, #0x5c]
|
|
add r1, r5, r4
|
|
add r6, r0, #1
|
|
add r0, sp, #0x60
|
|
mov r2, r6
|
|
sub r1, r1, r6
|
|
bl MI_CpuCopy8
|
|
sub r4, r4, r6
|
|
b _0207E6E4
|
|
_0207E6D4:
|
|
add r0, r5, r4
|
|
mov r1, #0
|
|
strb r1, [r0, #-1]
|
|
sub r4, r4, #1
|
|
_0207E6E4:
|
|
cmp sb, #0
|
|
beq _0207E78C
|
|
add sl, sp, #4
|
|
mov r6, #3
|
|
add r8, sp, #0x4c
|
|
mov r7, #0
|
|
mov fp, #0x2f
|
|
_0207E700:
|
|
ldr r1, [sp, #0x30]
|
|
mov r0, sl
|
|
bl FSi_SeekDirDirect
|
|
add r1, r5, r4
|
|
str r8, [sp, #0x34]
|
|
str r7, [sp, #0x38]
|
|
strb fp, [r1, #-1]
|
|
mov r0, sl
|
|
mov r1, #3
|
|
sub r4, r4, #1
|
|
bl FSi_TranslateCommand
|
|
cmp r0, #0
|
|
bne _0207E780
|
|
_0207E734:
|
|
ldr r0, [sp, #0x58]
|
|
cmp r0, #0
|
|
beq _0207E76C
|
|
ldrh r0, [sp, #0x50]
|
|
cmp r0, sb
|
|
bne _0207E76C
|
|
ldr sb, [sp, #0x5c]
|
|
add r1, r5, r4
|
|
add r0, sp, #0x60
|
|
mov r2, sb
|
|
sub r1, r1, sb
|
|
bl MI_CpuCopy8
|
|
sub r4, r4, sb
|
|
b _0207E780
|
|
_0207E76C:
|
|
mov r0, sl
|
|
mov r1, r6
|
|
bl FSi_TranslateCommand
|
|
cmp r0, #0
|
|
beq _0207E734
|
|
_0207E780:
|
|
ldrh sb, [sp, #0x28]
|
|
cmp sb, #0
|
|
bne _0207E700
|
|
_0207E78C:
|
|
mov r0, #0
|
|
add sp, sp, #0xe0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0207E798: .word _020B2BB0
|
|
arm_func_end FSi_GetPathCommand
|
|
|
|
arm_func_start FSi_OpenFileFastCommand
|
|
FSi_OpenFileFastCommand: ; 0x0207E79C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
sub sp, sp, #0x10
|
|
mov r5, r0
|
|
ldr r1, [r5, #8]
|
|
ldr r4, [r5, #0x34]
|
|
ldr r0, [r1, #0x30]
|
|
mov r2, r4, lsl #3
|
|
cmp r0, r4, lsl #3
|
|
addls sp, sp, #0x10
|
|
movls r0, #1
|
|
ldmlsia sp!, {r3, r4, r5, pc}
|
|
str r1, [sp]
|
|
ldr r1, [r1, #0x2c]
|
|
add r0, sp, #0
|
|
add r3, r1, r2
|
|
add r1, sp, #8
|
|
mov r2, #8
|
|
str r3, [sp, #4]
|
|
bl FSi_ReadTable
|
|
cmp r0, #0
|
|
addne sp, sp, #0x10
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldr r1, [sp, #8]
|
|
mov r0, r5
|
|
str r1, [r5, #0x30]
|
|
ldr r2, [sp, #0xc]
|
|
mov r1, #7
|
|
str r2, [r5, #0x34]
|
|
str r4, [r5, #0x38]
|
|
bl FSi_TranslateCommand
|
|
add sp, sp, #0x10
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end FSi_OpenFileFastCommand
|
|
|