mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-25 07:24:42 -05:00
10127 lines
192 KiB
ArmAsm
10127 lines
192 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "main_0206C9BC.inc"
|
|
|
|
.text
|
|
|
|
; https://decomp.me/scratch/TZIsN
|
|
arm_func_start DseMem_Allocate
|
|
DseMem_Allocate: ; 0x0206C9BC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
ldr r3, _0206CAC4 ; =DRIVER_WORK
|
|
mov lr, r0
|
|
ldr r0, [r3, #0x6f4]
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r4, _0206CAC8 ; =0x04000208
|
|
cmp r1, #0
|
|
ldrh ip, [r4]
|
|
moveq r1, #0x10
|
|
mov r0, #0
|
|
sub r5, r1, #1
|
|
strh r0, [r4]
|
|
ldr r3, _0206CAC4 ; =DRIVER_WORK
|
|
mvn r0, r5
|
|
add r4, lr, r5
|
|
and r4, r0, r4
|
|
ldr r3, [r3, #0x6f4]
|
|
add r6, r4, #0x10
|
|
_0206CA0C:
|
|
ldr r4, [r3, #0xc]
|
|
cmp r4, #0
|
|
bne _0206CA2C
|
|
ldr r4, _0206CAC4 ; =DRIVER_WORK
|
|
ldr r7, [r3, #8]
|
|
ldr r4, [r4, #0x6f8]
|
|
sub r5, r4, r7
|
|
b _0206CA40
|
|
_0206CA2C:
|
|
ldr r7, [r3, #8]
|
|
sub r5, r4, r7
|
|
cmp r5, r6
|
|
movlt r3, r4
|
|
blt _0206CA0C
|
|
_0206CA40:
|
|
cmp r5, r6
|
|
bge _0206CA5C
|
|
ldr r2, _0206CAC8 ; =0x04000208
|
|
mov r0, #0
|
|
ldrh r1, [r2]
|
|
strh ip, [r2]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0206CA5C:
|
|
add r4, r7, #0x10
|
|
sub r1, r1, #1
|
|
add r1, r4, r1
|
|
and r1, r0, r1
|
|
sub r6, r1, #0x10
|
|
add r4, r6, #0x10
|
|
add r0, r4, lr
|
|
str r0, [r6, #8]
|
|
str r2, [r1, #-0x10]
|
|
mov r0, #2
|
|
strb r0, [r6, #4]
|
|
mov r0, #0
|
|
strb r0, [r6, #5]
|
|
ldr r1, [r3, #0xc]
|
|
ldr r5, _0206CAC8 ; =0x04000208
|
|
str r1, [r6, #0xc]
|
|
str r6, [r3, #0xc]
|
|
strb r0, [r6, #6]
|
|
strb r0, [r3, #6]
|
|
ldrh r1, [r5]
|
|
mov r1, r4
|
|
mov r2, lr
|
|
strh ip, [r5]
|
|
bl ArrayFill32Fast
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0206CAC4: .word DRIVER_WORK
|
|
_0206CAC8: .word 0x04000208
|
|
arm_func_end DseMem_Allocate
|
|
|
|
arm_func_start DseMem_AllocateThreadStack
|
|
DseMem_AllocateThreadStack: ; 0x0206CACC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
ldr r3, _0206CC0C ; =DRIVER_WORK
|
|
mov r6, r0
|
|
ldr r0, [r3, #0x6f4]
|
|
mov r5, r1
|
|
cmp r0, #0
|
|
bne _0206CB00
|
|
mov r1, r6
|
|
mov r2, r5
|
|
mvn r0, #0xc1
|
|
bl Dse_SetError
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
_0206CB00:
|
|
ldr r3, _0206CC10 ; =0x04000208
|
|
cmp r5, #0
|
|
ldrh ip, [r3]
|
|
moveq r5, #0x10
|
|
sub r4, r5, #1
|
|
mov r1, #0
|
|
strh r1, [r3]
|
|
ldr r0, _0206CC0C ; =DRIVER_WORK
|
|
mvn lr, r4
|
|
add r3, r6, r4
|
|
and r3, lr, r3
|
|
ldr r0, [r0, #0x6f4]
|
|
mov r4, r1
|
|
add r3, r3, #0x10
|
|
_0206CB38:
|
|
ldr r8, [r0, #0xc]
|
|
cmp r8, #0
|
|
bne _0206CB64
|
|
ldr r7, _0206CC0C ; =DRIVER_WORK
|
|
ldr r8, [r0, #8]
|
|
ldr sb, [r7, #0x6f8]
|
|
sub r7, sb, r8
|
|
cmp r7, r3
|
|
movge r1, r0
|
|
movge r4, sb
|
|
b _0206CB80
|
|
_0206CB64:
|
|
ldr r7, [r0, #8]
|
|
sub r7, r8, r7
|
|
cmp r7, r3
|
|
movge r1, r0
|
|
movge r4, r8
|
|
mov r0, r8
|
|
b _0206CB38
|
|
_0206CB80:
|
|
cmp r1, #0
|
|
bne _0206CB9C
|
|
ldr r2, _0206CC10 ; =0x04000208
|
|
mov r0, #0
|
|
ldrh r1, [r2]
|
|
strh ip, [r2]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
_0206CB9C:
|
|
sub r0, r4, r3
|
|
add r3, r0, #0x10
|
|
sub r0, r5, #1
|
|
add r0, r3, r0
|
|
and r0, lr, r0
|
|
str r2, [r0, #-0x10]
|
|
sub r7, r0, #0x10
|
|
add r4, r7, #0x10
|
|
mov r0, #0x22
|
|
strb r0, [r7, #4]
|
|
mov r0, #0
|
|
strb r0, [r7, #5]
|
|
strb r5, [r7, #7]
|
|
add r2, r4, r6
|
|
str r2, [r7, #8]
|
|
ldr r2, [r1, #0xc]
|
|
ldr r3, _0206CC10 ; =0x04000208
|
|
str r2, [r7, #0xc]
|
|
str r7, [r1, #0xc]
|
|
strb r0, [r7, #6]
|
|
strb r0, [r1, #6]
|
|
ldrh r1, [r3]
|
|
mov r1, r4
|
|
mov r2, r6
|
|
strh ip, [r3]
|
|
bl ArrayFill32Fast
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_0206CC0C: .word DRIVER_WORK
|
|
_0206CC10: .word 0x04000208
|
|
arm_func_end DseMem_AllocateThreadStack
|
|
|
|
arm_func_start DseMem_Free
|
|
DseMem_Free: ; 0x0206CC14
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _0206CCB4 ; =DRIVER_WORK
|
|
mov r1, r0
|
|
ldr r0, [r2, #0x6f4]
|
|
cmp r0, #0
|
|
bne _0206CC40
|
|
mvn r0, #0xc1
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0xc1
|
|
ldmia sp!, {r3, pc}
|
|
_0206CC40:
|
|
ldr r0, _0206CCB8 ; =0x04000208
|
|
mov ip, #0
|
|
ldrh r3, [r0]
|
|
sub lr, r1, #0x10
|
|
strh ip, [r0]
|
|
ldr r0, [r2, #0x6f4]
|
|
cmp r0, lr
|
|
beq _0206CC70
|
|
_0206CC60:
|
|
mov ip, r0
|
|
ldr r0, [r0, #0xc]
|
|
cmp r0, lr
|
|
bne _0206CC60
|
|
_0206CC70:
|
|
cmp ip, #0
|
|
beq _0206CC94
|
|
ldr r0, [lr, #0xc]
|
|
ldr r1, _0206CCB8 ; =0x04000208
|
|
str r0, [ip, #0xc]
|
|
ldrh r0, [r1]
|
|
mov r0, #0
|
|
strh r3, [r1]
|
|
ldmia sp!, {r3, pc}
|
|
_0206CC94:
|
|
ldr ip, _0206CCB8 ; =0x04000208
|
|
mvn r0, #0x8b
|
|
ldrh r2, [ip]
|
|
mov r2, #0
|
|
strh r3, [ip]
|
|
bl Dse_SetError
|
|
mvn r0, #0x8b
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0206CCB4: .word DRIVER_WORK
|
|
_0206CCB8: .word 0x04000208
|
|
arm_func_end DseMem_Free
|
|
|
|
arm_func_start DseMem_Clear
|
|
DseMem_Clear: ; 0x0206CCBC
|
|
cmp r1, #0x10
|
|
blt _0206CCE4
|
|
mov r2, #0
|
|
_0206CCC8:
|
|
str r2, [r0, #0xc]
|
|
str r2, [r0, #8]
|
|
sub r1, r1, #0x10
|
|
str r2, [r0, #4]
|
|
cmp r1, #0x10
|
|
str r2, [r0], #0x10
|
|
bge _0206CCC8
|
|
_0206CCE4:
|
|
cmp r1, #4
|
|
blt _0206CD00
|
|
mov r2, #0
|
|
_0206CCF0:
|
|
sub r1, r1, #4
|
|
cmp r1, #4
|
|
str r2, [r0], #4
|
|
bge _0206CCF0
|
|
_0206CD00:
|
|
cmp r1, #0
|
|
bxle lr
|
|
mov r2, #0
|
|
_0206CD0C:
|
|
strb r2, [r0], #1
|
|
subs r1, r1, #1
|
|
bne _0206CD0C
|
|
bx lr
|
|
arm_func_end DseMem_Clear
|
|
|
|
arm_func_start DseFile_CheckHeader
|
|
DseFile_CheckHeader: ; 0x0206CD1C
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
ldr r3, _0206CD98 ; =DRIVER_WORK
|
|
mov r6, r0
|
|
ldrsb r0, [r3]
|
|
mov r4, r2
|
|
mov r5, r1
|
|
cmp r0, #0
|
|
mvneq r4, #0xc0
|
|
beq _0206CD80
|
|
cmp r6, #0
|
|
mvneq r4, #0x17
|
|
beq _0206CD80
|
|
beq _0206CD80
|
|
ldr r0, [r6]
|
|
bl DseUtil_ByteSwap32
|
|
cmp r5, r0
|
|
mvnne r4, #0x10
|
|
bne _0206CD80
|
|
cmp r4, #0
|
|
ldrneh r0, [r6, #0xc]
|
|
cmpne r0, r4
|
|
mvnne r4, #0x12
|
|
bne _0206CD80
|
|
ldrh r0, [r6, #0xe]
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_0206CD80:
|
|
mov r0, r4
|
|
mov r1, r6
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mov r0, r4
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0206CD98: .word DRIVER_WORK
|
|
arm_func_end DseFile_CheckHeader
|
|
|
|
arm_func_start DseSwd_SysInit
|
|
DseSwd_SysInit: ; 0x0206CD9C
|
|
stmdb sp!, {r4, lr}
|
|
sub sp, sp, #8
|
|
ldr r3, _0206CE18 ; =_022B8330
|
|
mov r1, #0x4000
|
|
str r1, [r3, #0xde0]
|
|
mov ip, #0
|
|
str ip, [r3, #0xde4]
|
|
mov r4, r0
|
|
str ip, [r3, #0xde8]
|
|
strb r4, [r3, #0xdec]
|
|
strb ip, [r3, #0xded]
|
|
strb ip, [r3, #0xdee]
|
|
ldr r2, _0206CE1C ; =0x72727473
|
|
mov r0, #0x800
|
|
mov r1, #0x10
|
|
strb ip, [r3, #0xdef]
|
|
bl DseMem_AllocateThreadStack
|
|
ldr r1, _0206CE18 ; =_022B8330
|
|
mov r2, #0x800
|
|
str r0, [r1, #0xeb0]
|
|
stmia sp, {r2, r4}
|
|
ldr r2, [r1, #0xeb0]
|
|
ldr r0, _0206CE20 ; =_022B9120
|
|
add r3, r2, #0x800
|
|
ldr r1, _0206CE24 ; =DseSwd_SampleLoaderMain
|
|
mov r2, #0
|
|
bl StartThread
|
|
ldr r0, _0206CE20 ; =_022B9120
|
|
bl sub_02079940
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0206CE18: .word _022B8330
|
|
_0206CE1C: .word 0x72727473
|
|
_0206CE20: .word _022B9120
|
|
_0206CE24: .word DseSwd_SampleLoaderMain
|
|
arm_func_end DseSwd_SysInit
|
|
|
|
arm_func_start DseSwd_SysQuit
|
|
DseSwd_SysQuit: ; 0xDseSwd_SysQuit
|
|
stmdb sp!, {r3, lr}
|
|
ldr r1, _0206CE60 ; =_022B8330
|
|
mov r2, #0
|
|
ldr r0, _0206CE64 ; =_022B9120
|
|
strb r2, [r1, #0xded]
|
|
mov r2, #1
|
|
strb r2, [r1, #0xdee]
|
|
bl sub_02079940
|
|
ldr r0, _0206CE64 ; =_022B9120
|
|
bl sub_02079800
|
|
ldr r0, _0206CE60 ; =_022B8330
|
|
ldr r0, [r0, #0xeb0]
|
|
bl DseMem_Free
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0206CE60: .word _022B8330
|
|
_0206CE64: .word _022B9120
|
|
arm_func_end DseSwd_SysQuit
|
|
|
|
arm_func_start DseSwd_SampleLoaderMain
|
|
DseSwd_SampleLoaderMain: ; 0x0206CE68
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
ldr r5, _0206CEC4 ; =_022B8330
|
|
mov r6, #0
|
|
add r4, r5, #0xd00
|
|
mov sb, #1
|
|
mov r8, r6
|
|
mov r7, r6
|
|
_0206CE84:
|
|
mov r0, r8
|
|
strb sb, [r5, #0xdef]
|
|
bl sub_02079888
|
|
strb r7, [r5, #0xdef]
|
|
ldrsb r0, [r4, #0xee]
|
|
cmp r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
ldr r0, [r5, #0xeb4]
|
|
cmp r0, #0
|
|
beq _0206CE84
|
|
ldr r1, [r5, #0xeb8]
|
|
bl DseSwd_LoadWavesInternal
|
|
str r6, [r5, #0xeb4]
|
|
str r6, [r5, #0xeb8]
|
|
b _0206CE84
|
|
_0206CEC0:
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_0206CEC4: .word _022B8330
|
|
arm_func_end DseSwd_SampleLoaderMain
|
|
|
|
arm_func_start DseSwd_MainBankDummyCallback
|
|
DseSwd_MainBankDummyCallback: ; 0x0206CEC8
|
|
mov r0, #0
|
|
bx lr
|
|
arm_func_end DseSwd_MainBankDummyCallback
|
|
|
|
arm_func_start DseSwd_LoadMainBank
|
|
DseSwd_LoadMainBank: ; 0x0206CED0
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #0xb4
|
|
movs r5, r0
|
|
bne _0206CEFC
|
|
mov r1, #0
|
|
mov r2, r1
|
|
mvn r0, #0x17
|
|
bl Dse_SetError
|
|
add sp, sp, #0xb4
|
|
mvn r0, #0x17
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
_0206CEFC:
|
|
ldr r4, _0206D0E8 ; =_022B8330
|
|
cmp r1, #0
|
|
moveq r1, #0x4000
|
|
cmp r2, #0
|
|
ldreq r2, _0206D0EC ; =DseSwd_MainBankDummyCallback
|
|
str r1, [r4, #0xde0]
|
|
str r2, [r4, #0xde4]
|
|
add r0, sp, #0x1c
|
|
str r3, [r4, #0xde8]
|
|
bl DseSwd_InitMainBankFileReader
|
|
add r0, sp, #0x1c
|
|
mov r1, r5
|
|
bl DseSwd_OpenMainBankFileReader
|
|
cmp r0, #0
|
|
addlt sp, sp, #0xb4
|
|
ldmltia sp!, {r3, r4, r5, r6, pc}
|
|
mov r2, #0x50
|
|
mov r3, #0
|
|
mov r6, #1
|
|
add r4, sp, #4
|
|
add r0, sp, #0x1c
|
|
add r1, sp, #0x64
|
|
str r2, [sp, #4]
|
|
str r2, [sp, #8]
|
|
str r3, [sp, #0xc]
|
|
str r3, [sp, #0x10]
|
|
str r6, [sp, #0x14]
|
|
str r6, [sp, #0x18]
|
|
str r4, [sp]
|
|
bl DseSwd_ReadMainBank
|
|
ldr r1, _0206D0F0 ; =0x7377646C
|
|
ldr r2, _0206D0F4 ; =0x00000415
|
|
add r0, sp, #0x64
|
|
mov r3, #4
|
|
bl DseFile_CheckHeader
|
|
movs r4, r0
|
|
bpl _0206CFA4
|
|
add r0, sp, #0x1c
|
|
bl DseSwd_CloseMainBankFileReader
|
|
add sp, sp, #0xb4
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
_0206CFA4:
|
|
ldrh r0, [sp, #0x72]
|
|
bl DseSwd_GetMainBankById
|
|
cmp r0, #0
|
|
beq _0206CFD8
|
|
add r0, sp, #0x1c
|
|
bl DseSwd_CloseMainBankFileReader
|
|
mov r1, r4
|
|
mvn r0, #0x47
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
add sp, sp, #0xb4
|
|
mvn r0, #0x47
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
_0206CFD8:
|
|
ldr r6, [sp, #0xb0]
|
|
ldr r2, _0206D0F8 ; =0x66767772
|
|
add r0, r6, #0x60
|
|
mov r1, #0x10
|
|
bl DseMem_Allocate
|
|
movs r4, r0
|
|
bne _0206D018
|
|
add r0, sp, #0x1c
|
|
bl DseSwd_CloseMainBankFileReader
|
|
mov r1, #0
|
|
mov r2, r1
|
|
mvn r0, #0x7f
|
|
bl Dse_SetError
|
|
add sp, sp, #0xb4
|
|
mvn r0, #0x7f
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
_0206D018:
|
|
ldrh r0, [sp, #0x72]
|
|
add r3, r6, #0x70
|
|
add r2, sp, #4
|
|
strh r0, [r4]
|
|
ldrsh ip, [sp, #0xaa]
|
|
add r0, sp, #0x1c
|
|
add r1, r4, #0x60
|
|
strh ip, [r4, #2]
|
|
str r3, [r4, #4]
|
|
ldr ip, [sp, #0xb0]
|
|
mov r3, #0x50
|
|
str ip, [sp, #4]
|
|
str ip, [sp, #8]
|
|
str r2, [sp]
|
|
add r2, ip, #0x10
|
|
bl DseSwd_ReadMainBank
|
|
ldr r0, [r4, #0x60]
|
|
bl DseUtil_ByteSwap32
|
|
ldr r1, _0206D0FC ; =0x77617669
|
|
cmp r0, r1
|
|
addne sp, sp, #0xb4
|
|
mvnne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, pc}
|
|
add r1, r4, #0x70
|
|
add r0, sp, #0x1c
|
|
str r1, [r4, #8]
|
|
bl DseSwd_CloseMainBankFileReader
|
|
mov r1, #0
|
|
ldr r0, _0206D100 ; =0x04000208
|
|
str r1, [r4, #0x5c]
|
|
ldrh r3, [r0]
|
|
ldr r2, _0206D104 ; =_022B910C
|
|
strh r1, [r0]
|
|
ldr r0, [r2]
|
|
cmp r0, #0
|
|
beq _0206D0B8
|
|
_0206D0A8:
|
|
add r2, r0, #0x5c
|
|
ldr r0, [r0, #0x5c]
|
|
cmp r0, #0
|
|
bne _0206D0A8
|
|
_0206D0B8:
|
|
ldr r1, _0206D100 ; =0x04000208
|
|
str r4, [r2]
|
|
ldrh r0, [r1]
|
|
add r0, r4, #0x14
|
|
strh r3, [r1]
|
|
bl DseSwd_InitMainBankFileReader
|
|
mov r1, r5
|
|
add r0, r4, #0x14
|
|
bl DseSwd_OpenMainBankFileReader
|
|
ldrh r0, [r4]
|
|
add sp, sp, #0xb4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0206D0E8: .word _022B8330
|
|
_0206D0EC: .word DseSwd_MainBankDummyCallback
|
|
_0206D0F0: .word 0x7377646C
|
|
_0206D0F4: .word 0x00000415
|
|
_0206D0F8: .word 0x66767772
|
|
_0206D0FC: .word 0x77617669
|
|
_0206D100: .word 0x04000208
|
|
_0206D104: .word _022B910C
|
|
arm_func_end DseSwd_LoadMainBank
|
|
|
|
arm_func_start DseSwd_LoadBank
|
|
DseSwd_LoadBank: ; 0x0206D108
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
str r2, [sp]
|
|
ldr r1, _0206D2E4 ; =0x7377646C
|
|
ldr r2, _0206D2E8 ; =0x00000415
|
|
mov r3, #4
|
|
mov sl, r0
|
|
bl DseFile_CheckHeader
|
|
movs r4, r0
|
|
ldmmiia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r0, r4, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
bl DseSwd_GetBankById
|
|
cmp r0, #0
|
|
beq _0206D158
|
|
mov r1, r4
|
|
mvn r0, #0x47
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x47
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0206D158:
|
|
ldr r2, _0206D2EC ; =0x69766177
|
|
mov r0, #0x28
|
|
mov r1, #0x10
|
|
bl DseMem_Allocate
|
|
movs sb, r0
|
|
mov r1, #0
|
|
bne _0206D188
|
|
mov r2, r1
|
|
mvn r0, #0x7f
|
|
bl Dse_SetError
|
|
mvn r0, #0x7f
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0206D188:
|
|
str sl, [sb]
|
|
strh r4, [sb, #4]
|
|
strh r1, [sb, #6]
|
|
ldrsh r0, [sl, #0x46]
|
|
add r8, sl, #0x50
|
|
strh r0, [sb, #8]
|
|
ldrsh r0, [sl, #0x48]
|
|
strh r0, [sb, #0xa]
|
|
ldrb r0, [sl, #0x4a]
|
|
strb r0, [sb, #0xc]
|
|
ldrb r0, [sl, #0x4b]
|
|
strb r0, [sb, #0xd]
|
|
str r1, [sb, #0x10]
|
|
str r1, [sb, #0x14]
|
|
str r1, [sb, #0x18]
|
|
str r1, [sb, #0x1c]
|
|
str r1, [sb, #0x20]
|
|
str r1, [sb, #0x24]
|
|
ldr r0, [sl, #0x50]
|
|
bl DseUtil_ByteSwap32
|
|
ldr r7, _0206D2F0 ; =0x656F6420
|
|
cmp r0, r7
|
|
beq _0206D270
|
|
ldr fp, _0206D2F4 ; =0x77617669
|
|
ldr r4, _0206D2F8 ; =0x70726769
|
|
ldr r6, _0206D2FC ; =0x70636D64
|
|
ldr r5, _0206D300 ; =0x6B677270
|
|
_0206D1F4:
|
|
ldr r0, [r8]
|
|
bl DseUtil_ByteSwap32
|
|
cmp r0, r6
|
|
bhi _0206D218
|
|
bhs _0206D23C
|
|
cmp r0, r5
|
|
addeq r0, r8, #0x10
|
|
streq r0, [sb, #0x18]
|
|
b _0206D244
|
|
_0206D218:
|
|
cmp r0, r4
|
|
bhi _0206D22C
|
|
addeq r0, r8, #0x10
|
|
streq r0, [sb, #0x14]
|
|
b _0206D244
|
|
_0206D22C:
|
|
cmp r0, fp
|
|
addeq r0, r8, #0x10
|
|
streq r0, [sb, #0x10]
|
|
b _0206D244
|
|
_0206D23C:
|
|
add r0, r8, #0x10
|
|
str r0, [sb, #0x1c]
|
|
_0206D244:
|
|
ldrb r1, [r8, #8]
|
|
ldr r0, [r8, #0xc]
|
|
sub r2, r1, #1
|
|
add r0, r0, #0x10
|
|
mvn r1, r2
|
|
add r0, r0, r2
|
|
and r0, r1, r0
|
|
ldr r0, [r8, r0]!
|
|
bl DseUtil_ByteSwap32
|
|
cmp r0, r7
|
|
bne _0206D1F4
|
|
_0206D270:
|
|
ldr r1, _0206D304 ; =0x04000208
|
|
mov r0, #0
|
|
ldrh r3, [r1]
|
|
ldr r2, _0206D308 ; =_022B7990
|
|
strh r0, [r1]
|
|
ldr r0, [r2]
|
|
cmp r0, #0
|
|
beq _0206D2A0
|
|
_0206D290:
|
|
add r2, r0, #0x24
|
|
ldr r0, [r0, #0x24]
|
|
cmp r0, #0
|
|
bne _0206D290
|
|
_0206D2A0:
|
|
ldr r1, _0206D304 ; =0x04000208
|
|
str sb, [r2]
|
|
ldrh r0, [r1]
|
|
strh r3, [r1]
|
|
ldrb r0, [sl, #0x4b]
|
|
cmp r0, #2
|
|
bne _0206D2DC
|
|
ldrh r1, [sl, #0x40]
|
|
ldr r0, [sp]
|
|
cmp r0, #0
|
|
strh r1, [sb, #6]
|
|
beq _0206D2DC
|
|
ldrh r0, [sb, #4]
|
|
ldr r1, [sp]
|
|
bl DseSwd_LoadWaves
|
|
_0206D2DC:
|
|
ldrh r0, [sb, #4]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0206D2E4: .word 0x7377646C
|
|
_0206D2E8: .word 0x00000415
|
|
_0206D2EC: .word 0x69766177
|
|
_0206D2F0: .word 0x656F6420
|
|
_0206D2F4: .word 0x77617669
|
|
_0206D2F8: .word 0x70726769
|
|
_0206D2FC: .word 0x70636D64
|
|
_0206D300: .word 0x6B677270
|
|
_0206D304: .word 0x04000208
|
|
_0206D308: .word _022B7990
|
|
arm_func_end DseSwd_LoadBank
|
|
|
|
arm_func_start DseSwd_IsBankLoading
|
|
DseSwd_IsBankLoading: ; 0x0206D30C
|
|
ldr r0, _0206D324 ; =_022B8330
|
|
ldr r0, [r0, #0xeb4]
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
bx lr
|
|
.align 2, 0
|
|
_0206D324: .word _022B8330
|
|
arm_func_end DseSwd_IsBankLoading
|
|
|
|
arm_func_start DseSwd_LoadWaves
|
|
DseSwd_LoadWaves: ; 0x0206D328
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r0
|
|
mov r6, r1
|
|
bl DseSwd_GetBankById
|
|
movs r4, r0
|
|
bne _0206D358
|
|
mov r1, r5
|
|
mvn r0, #0x40
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x40
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_0206D358:
|
|
ldrb r0, [r4, #0xd]
|
|
cmp r0, #2
|
|
mvnne r0, #0x4c
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
ldrh r0, [r4, #6]
|
|
bl DseSwd_GetMainBankById
|
|
cmp r0, #0
|
|
bne _0206D390
|
|
mov r1, #0
|
|
mov r2, r1
|
|
mvn r0, #0x4b
|
|
bl Dse_SetError
|
|
mvn r0, #0x4b
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_0206D390:
|
|
ldr r5, [r4, #0x20]
|
|
cmp r5, #0
|
|
bne _0206D3AC
|
|
mov r0, r4
|
|
mov r1, #0
|
|
bl DseSwd_LoadWavesInternal
|
|
mov r5, r0
|
|
_0206D3AC:
|
|
cmp r6, #0
|
|
beq _0206D3C8
|
|
ldr r1, _0206D3D0 ; =_022B8330
|
|
ldr r0, _0206D3D4 ; =_022B9120
|
|
str r4, [r1, #0xeb4]
|
|
str r6, [r1, #0xeb8]
|
|
bl sub_02079940
|
|
_0206D3C8:
|
|
mov r0, r5
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0206D3D0: .word _022B8330
|
|
_0206D3D4: .word _022B9120
|
|
arm_func_end DseSwd_LoadWaves
|
|
|
|
arm_func_start DseSwd_LoadWavesInternal
|
|
DseSwd_LoadWavesInternal: ; 0x0206D3D8
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x1c
|
|
mov sl, r0
|
|
ldrh r0, [sl, #6]
|
|
mov sb, r1
|
|
bl DseSwd_GetMainBankById
|
|
movs r4, r0
|
|
bne _0206D414
|
|
mov r1, #0
|
|
mov r2, r1
|
|
mvn r0, #0x4b
|
|
bl Dse_SetError
|
|
add sp, sp, #0x1c
|
|
mvn r0, #0x4b
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0206D414:
|
|
mov r6, #0
|
|
str r6, [sp, #8]
|
|
ldr r0, [sl, #0x20]
|
|
mov r5, sb
|
|
str r0, [sp, #4]
|
|
ldrsh r0, [sl, #8]
|
|
mov r7, r6
|
|
str r0, [sp, #0x14]
|
|
ldrsh r0, [sl, #8]
|
|
cmp r0, #0
|
|
ble _0206D4D4
|
|
add fp, sp, #4
|
|
_0206D444:
|
|
mov r1, r7, lsl #0x10
|
|
mov r0, sl
|
|
mov r1, r1, asr #0x10
|
|
bl ReadWaviEntry
|
|
cmp r0, #0
|
|
beq _0206D4C4
|
|
str r5, [r0, #0x24]
|
|
ldr r2, [r4, #8]
|
|
mov r1, r7, lsl #1
|
|
ldrh r1, [r2, r1]
|
|
cmp r1, #0
|
|
beq _0206D4C4
|
|
add r2, r7, #1
|
|
str r2, [sp, #0x18]
|
|
ldr r2, [r0, #0x2c]
|
|
ldr r0, [r0, #0x28]
|
|
cmp sb, #0
|
|
add r0, r2, r0
|
|
mov r8, r0, lsl #2
|
|
beq _0206D4BC
|
|
str fp, [sp]
|
|
ldr r0, [r4, #8]
|
|
ldr r3, [r4, #4]
|
|
add r0, r0, r1
|
|
ldr ip, [r0, #0x24]
|
|
mov r1, r5
|
|
mov r2, r8
|
|
add r0, r4, #0x14
|
|
add r3, ip, r3
|
|
bl DseSwd_ReadMainBank
|
|
_0206D4BC:
|
|
add r6, r6, r8
|
|
add r5, r5, r8
|
|
_0206D4C4:
|
|
ldrsh r0, [sl, #8]
|
|
add r7, r7, #1
|
|
cmp r7, r0
|
|
blt _0206D444
|
|
_0206D4D4:
|
|
mov r0, r6
|
|
str r6, [sl, #0x20]
|
|
add sp, sp, #0x1c
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
arm_func_end DseSwd_LoadWavesInternal
|
|
|
|
arm_func_start DseSwd_Unload
|
|
DseSwd_Unload: ; 0x0206D4E4
|
|
stmdb sp!, {r4, lr}
|
|
ldr r2, _0206D550 ; =0x04000208
|
|
mov r1, #0
|
|
ldrh ip, [r2]
|
|
mov r4, r0
|
|
ldr r3, _0206D554 ; =_022B7990
|
|
strh r1, [r2]
|
|
b _0206D508
|
|
_0206D504:
|
|
add r3, r0, #0x24
|
|
_0206D508:
|
|
ldr r0, [r3]
|
|
cmp r0, #0
|
|
ldrneh r1, [r0, #4]
|
|
cmpne r1, r4
|
|
bne _0206D504
|
|
ldr r2, _0206D550 ; =0x04000208
|
|
cmp r0, #0
|
|
ldreqh r1, [r2]
|
|
mvneq r0, #0x40
|
|
streqh ip, [r2]
|
|
ldmeqia sp!, {r4, pc}
|
|
ldr r1, [r0, #0x24]
|
|
str r1, [r3]
|
|
ldrh r1, [r2]
|
|
strh ip, [r2]
|
|
bl DseMem_Free
|
|
mov r0, r4
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0206D550: .word 0x04000208
|
|
_0206D554: .word _022B7990
|
|
arm_func_end DseSwd_Unload
|
|
|
|
arm_func_start ReadWaviEntry
|
|
ReadWaviEntry: ; 0x0206D558
|
|
ldr r2, [r0, #0x10]
|
|
cmp r2, #0
|
|
moveq r0, #0
|
|
bxeq lr
|
|
ldrsh r0, [r0, #8]
|
|
cmp r0, r1
|
|
movle r0, #0
|
|
bxle lr
|
|
mov r0, r1, lsl #1
|
|
ldrh r0, [r2, r0]
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
addne r0, r2, r0
|
|
bx lr
|
|
arm_func_end ReadWaviEntry
|
|
|
|
arm_func_start DseSwd_GetInstrument
|
|
DseSwd_GetInstrument: ; 0x0206D590
|
|
ldr r2, [r0, #0x14]
|
|
cmp r2, #0
|
|
moveq r0, #0
|
|
bxeq lr
|
|
ldrsh r0, [r0, #0xa]
|
|
cmp r0, r1
|
|
movle r0, #0
|
|
bxle lr
|
|
mov r0, r1, lsl #1
|
|
ldrh r0, [r2, r0]
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
addne r0, r2, r0
|
|
bx lr
|
|
arm_func_end DseSwd_GetInstrument
|
|
|
|
arm_func_start DseSwd_GetNextSplitInRange
|
|
DseSwd_GetNextSplitInRange: ; 0x0206D5C8
|
|
stmdb sp!, {r3, lr}
|
|
ldrb lr, [r0, #2]
|
|
cmp lr, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, pc}
|
|
cmp r1, #0
|
|
addeq r1, r0, #0x60
|
|
beq _0206D600
|
|
ldrb ip, [r1, #1]
|
|
sub r0, lr, #1
|
|
cmp ip, r0
|
|
movge r0, #0
|
|
ldmgeia sp!, {r3, pc}
|
|
add r1, r1, #0x30
|
|
_0206D600:
|
|
sub r0, lr, #1
|
|
_0206D604:
|
|
ldrb ip, [r1, #4]
|
|
cmp r2, ip
|
|
blo _0206D638
|
|
ldrb ip, [r1, #5]
|
|
cmp r2, ip
|
|
bhi _0206D638
|
|
ldrb ip, [r1, #8]
|
|
cmp r3, ip
|
|
blt _0206D638
|
|
ldrb ip, [r1, #9]
|
|
cmp r3, ip
|
|
movle r0, r1
|
|
ldmleia sp!, {r3, pc}
|
|
_0206D638:
|
|
ldrb ip, [r1, #1]
|
|
cmp ip, r0
|
|
addlt r1, r1, #0x30
|
|
blt _0206D604
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DseSwd_GetNextSplitInRange
|
|
|
|
arm_func_start DseSwd_GetMainBankById
|
|
DseSwd_GetMainBankById: ; 0x0206D650
|
|
ldr r3, _0206D698 ; =0x04000208
|
|
mov r2, #0
|
|
ldrh ip, [r3]
|
|
ldr r1, _0206D69C ; =_022B8330
|
|
strh r2, [r3]
|
|
ldr r3, [r1, #0xddc]
|
|
cmp r3, #0
|
|
beq _0206D684
|
|
_0206D670:
|
|
ldrh r1, [r3]
|
|
cmp r1, r0
|
|
ldrne r3, [r3, #0x5c]
|
|
cmpne r3, #0
|
|
bne _0206D670
|
|
_0206D684:
|
|
ldr r2, _0206D698 ; =0x04000208
|
|
mov r0, r3
|
|
ldrh r1, [r2]
|
|
strh ip, [r2]
|
|
bx lr
|
|
.align 2, 0
|
|
_0206D698: .word 0x04000208
|
|
_0206D69C: .word _022B8330
|
|
arm_func_end DseSwd_GetMainBankById
|
|
|
|
arm_func_start DseSwd_GetBankById
|
|
DseSwd_GetBankById: ; 0x0206D6A0
|
|
ldr r3, _0206D6E8 ; =0x04000208
|
|
mov r2, #0
|
|
ldrh ip, [r3]
|
|
ldr r1, _0206D6EC ; =DRIVER_WORK
|
|
strh r2, [r3]
|
|
ldr r3, [r1, #0x660]
|
|
cmp r3, #0
|
|
beq _0206D6D4
|
|
_0206D6C0:
|
|
ldrh r1, [r3, #4]
|
|
cmp r1, r0
|
|
ldrne r3, [r3, #0x24]
|
|
cmpne r3, #0
|
|
bne _0206D6C0
|
|
_0206D6D4:
|
|
ldr r2, _0206D6E8 ; =0x04000208
|
|
mov r0, r3
|
|
ldrh r1, [r2]
|
|
strh ip, [r2]
|
|
bx lr
|
|
.align 2, 0
|
|
_0206D6E8: .word 0x04000208
|
|
_0206D6EC: .word DRIVER_WORK
|
|
arm_func_end DseSwd_GetBankById
|
|
|
|
arm_func_start DseSwd_InitMainBankFileReader
|
|
DseSwd_InitMainBankFileReader: ; 0x0206D6F0
|
|
stmdb sp!, {r3, lr}
|
|
bl FileInit
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DseSwd_InitMainBankFileReader
|
|
|
|
arm_func_start DseSwd_OpenMainBankFileReader
|
|
DseSwd_OpenMainBankFileReader: ; 0x0206D700
|
|
stmdb sp!, {r3, lr}
|
|
bl sub_0207F6C4
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, pc}
|
|
mov r1, #0
|
|
mov r2, r1
|
|
mvn r0, #0x27
|
|
bl Dse_SetError
|
|
mvn r0, #0x27
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DseSwd_OpenMainBankFileReader
|
|
|
|
arm_func_start DseSwd_CloseMainBankFileReader
|
|
DseSwd_CloseMainBankFileReader: ; 0x0206D72C
|
|
stmdb sp!, {r3, lr}
|
|
bl sub_0207F70C
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DseSwd_CloseMainBankFileReader
|
|
|
|
arm_func_start DseSwd_ReadMainBank
|
|
DseSwd_ReadMainBank: ; 0x0206D73C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
ldr r7, [sp, #0x28]
|
|
mov sb, r1
|
|
mov r8, r2
|
|
mov r1, r3
|
|
mov r2, #0
|
|
mov sl, r0
|
|
bl sub_0207F828
|
|
str r8, [r7, #8]
|
|
mov r0, #0
|
|
str r0, [r7, #0xc]
|
|
cmp r8, #0
|
|
ble _0206D7F0
|
|
ldr r5, _0206D7F8 ; =0x04000006
|
|
ldr fp, _0206D7FC ; =_022B8330
|
|
mov r4, #2
|
|
_0206D77C:
|
|
ldr r6, [fp, #0xde0]
|
|
cmp r8, r6
|
|
movlt r6, r8
|
|
_0206D788:
|
|
ldrh r0, [r5]
|
|
cmp r0, #0xb4
|
|
blt _0206D7A0
|
|
mov r0, r4
|
|
bl sub_02079B14
|
|
b _0206D788
|
|
_0206D7A0:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r6
|
|
bl sub_0207F808
|
|
mov r0, sl
|
|
bl sub_0207F748
|
|
ldr r1, [r7, #0xc]
|
|
mov r0, r7
|
|
add r1, r1, r6
|
|
str r1, [r7, #0xc]
|
|
ldr r1, [r7, #4]
|
|
sub r8, r8, r6
|
|
add r1, r1, r6
|
|
str r1, [r7, #4]
|
|
add sb, sb, r6
|
|
ldr r1, [fp, #0xde8]
|
|
ldr r2, [fp, #0xde4]
|
|
blx r2
|
|
cmp r8, #0
|
|
bgt _0206D77C
|
|
_0206D7F0:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0206D7F8: .word 0x04000006
|
|
_0206D7FC: .word _022B8330
|
|
arm_func_end DseSwd_ReadMainBank
|
|
|
|
arm_func_start DseBgm_DefaultSignalCallback
|
|
DseBgm_DefaultSignalCallback: ; 0x0206D800
|
|
mov r0, #0
|
|
bx lr
|
|
arm_func_end DseBgm_DefaultSignalCallback
|
|
|
|
arm_func_start DseBgm_Load
|
|
DseBgm_Load: ; 0x0206D808
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
ldr r1, _0206D8F8 ; =0x736D646C
|
|
ldr r2, _0206D8FC ; =0x00000415
|
|
mov r3, #4
|
|
mov r7, r0
|
|
bl DseFile_CheckHeader
|
|
cmp r0, #0
|
|
ldmltia sp!, {r3, r4, r5, r6, r7, pc}
|
|
add r6, r0, #0x10000
|
|
mov r0, r6
|
|
bl DseSequence_GetById
|
|
cmp r0, #0
|
|
beq _0206D854
|
|
mov r1, r6
|
|
mvn r0, #0x48
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x48
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0206D854:
|
|
mov r0, r7
|
|
mov r1, #1
|
|
bl FindSmdlSongChunk
|
|
movs r5, r0
|
|
bne _0206D880
|
|
mov r1, r7
|
|
mvn r0, #0x42
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x42
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0206D880:
|
|
ldrb r0, [r5, #6]
|
|
ldrb r1, [r5, #7]
|
|
ldr r2, _0206D900 ; =0x7165736D
|
|
bl DseSequence_AllocateNew
|
|
movs r4, r0
|
|
mvneq r0, #0x7f
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
str r6, [r4, #0x28]
|
|
mov r1, r5
|
|
str r7, [r4, #0x1c]
|
|
bl DseSequence_LoadSong
|
|
mov r1, #0
|
|
ldr r0, _0206D904 ; =0x04000208
|
|
strb r1, [r4, #0xa]
|
|
ldrh r3, [r0]
|
|
ldr r2, _0206D908 ; =_022B7994
|
|
strh r1, [r0]
|
|
ldr r0, [r2]
|
|
cmp r0, #0
|
|
beq _0206D8E0
|
|
_0206D8D0:
|
|
add r2, r0, #0xa4
|
|
ldr r0, [r0, #0xa4]
|
|
cmp r0, #0
|
|
bne _0206D8D0
|
|
_0206D8E0:
|
|
ldr r1, _0206D904 ; =0x04000208
|
|
str r4, [r2]
|
|
ldrh r0, [r1]
|
|
strh r3, [r1]
|
|
ldr r0, [r4, #0x28]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0206D8F8: .word 0x736D646C
|
|
_0206D8FC: .word 0x00000415
|
|
_0206D900: .word 0x7165736D
|
|
_0206D904: .word 0x04000208
|
|
_0206D908: .word _022B7994
|
|
arm_func_end DseBgm_Load
|
|
|
|
arm_func_start DseBgm_Unload
|
|
DseBgm_Unload: ; 0x0206D90C
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl DseSequence_GetById
|
|
cmp r0, #0
|
|
bne _0206D938
|
|
mov r1, r4
|
|
mvn r0, #0x41
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x41
|
|
ldmia sp!, {r4, pc}
|
|
_0206D938:
|
|
bl DseSequence_Unload
|
|
mov r0, r4
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseBgm_Unload
|
|
|
|
arm_func_start DseBgm_SetSignalCallback
|
|
DseBgm_SetSignalCallback: ; 0x0206D944
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, r2
|
|
bl DseSequence_GetById
|
|
cmp r0, #0
|
|
bne _0206D978
|
|
mov r1, r6
|
|
mvn r0, #0x41
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x41
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_0206D978:
|
|
cmp r5, #0
|
|
strne r5, [r0, #0x9c]
|
|
strne r4, [r0, #0xa0]
|
|
bne _0206D998
|
|
ldr r2, _0206D9A0 ; =DseBgm_DefaultSignalCallback
|
|
mov r1, #0
|
|
str r2, [r0, #0x9c]
|
|
str r1, [r0, #0xa0]
|
|
_0206D998:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0206D9A0: .word DseBgm_DefaultSignalCallback
|
|
arm_func_end DseBgm_SetSignalCallback
|
|
|
|
arm_func_start DseBgm_IsPlaying
|
|
DseBgm_IsPlaying: ; 0x0206D9A4
|
|
stmdb sp!, {r3, lr}
|
|
bl DseSequence_GetById
|
|
cmp r0, #0
|
|
mvneq r0, #0x41
|
|
ldrnesb r0, [r0, #4]
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DseBgm_IsPlaying
|
|
|
|
arm_func_start ResumeBgm
|
|
ResumeBgm: ; 0x0206D9BC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r4, r1
|
|
mov r6, r2
|
|
bl DseSequence_GetById
|
|
movs r5, r0
|
|
bne _0206D9F0
|
|
mov r1, r7
|
|
mvn r0, #0x41
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x41
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0206D9F0:
|
|
ldrsb r0, [r5, #1]
|
|
cmp r0, #1
|
|
bne _0206DA14
|
|
mov r1, r7
|
|
mvn r0, #0x3d
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x3d
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0206DA14:
|
|
ldrsb r0, [r5]
|
|
cmp r0, #0
|
|
moveq r6, #1
|
|
cmp r6, #1
|
|
bne _0206DA50
|
|
ldrsb r0, [r5, #4]
|
|
cmp r0, #1
|
|
bne _0206DA40
|
|
mov r0, r7
|
|
mov r1, #0
|
|
bl DseBgm_Stop
|
|
_0206DA40:
|
|
mov r0, r5
|
|
bl DseSequence_Reset
|
|
cmp r0, #0
|
|
ldmltia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0206DA50:
|
|
mov r0, #0
|
|
str r0, [r5, #0x68]
|
|
strh r0, [r5, #0x74]
|
|
strb r6, [r5, #2]
|
|
bl sub_0206C688
|
|
cmp r0, #0
|
|
ldrnesb r0, [r5, #9]
|
|
mov r1, #0
|
|
mov r2, r1
|
|
cmpne r0, #0
|
|
movne ip, #1
|
|
moveq ip, #0
|
|
mov r0, r5
|
|
mov r3, r4
|
|
strb ip, [r5, #8]
|
|
bl DseSequence_Start
|
|
cmp r0, #0
|
|
movge r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end ResumeBgm
|
|
|
|
arm_func_start DseBgm_Stop
|
|
DseBgm_Stop: ; 0x0206DA9C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl DseSequence_GetById
|
|
cmp r0, #0
|
|
mov r2, #0
|
|
bne _0206DACC
|
|
mov r1, r5
|
|
mvn r0, #0x41
|
|
bl Dse_SetError
|
|
mvn r0, #0x41
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_0206DACC:
|
|
mov r1, r4
|
|
bl DseSequence_Stop
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end DseBgm_Stop
|
|
|
|
arm_func_start DseBgm_StopAll
|
|
DseBgm_StopAll: ; 0x0206DADC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
ldr r3, _0206DB34 ; =0x04000208
|
|
mov r2, #0
|
|
ldrh r4, [r3]
|
|
ldr r1, _0206DB38 ; =DRIVER_WORK
|
|
mov r7, r0
|
|
strh r2, [r3]
|
|
ldr r6, [r1, #0x664]
|
|
cmp r6, #0
|
|
beq _0206DB24
|
|
mov r5, r2
|
|
_0206DB08:
|
|
mov r0, r6
|
|
mov r1, r7
|
|
mov r2, r5
|
|
bl DseSequence_Stop
|
|
ldr r6, [r6, #0xa4]
|
|
cmp r6, #0
|
|
bne _0206DB08
|
|
_0206DB24:
|
|
ldr r1, _0206DB34 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r4, [r1]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0206DB34: .word 0x04000208
|
|
_0206DB38: .word DRIVER_WORK
|
|
arm_func_end DseBgm_StopAll
|
|
|
|
arm_func_start DseBgm_SetFades
|
|
DseBgm_SetFades: ; 0x0206DB3C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl DseSequence_GetById
|
|
cmp r0, #0
|
|
bne _0206DB6C
|
|
mov r1, r5
|
|
mvn r0, #0x41
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x41
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_0206DB6C:
|
|
mov r1, r4
|
|
bl DseSequence_SetFades
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end DseBgm_SetFades
|
|
|
|
arm_func_start DseSequence_Start
|
|
DseSequence_Start: ; 0x0206DB7C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r0
|
|
strh r1, [r4, #0x2c]
|
|
mov r5, r3
|
|
strb r2, [r4, #0x14]
|
|
ldrsh r2, [r5, #2]
|
|
cmp r2, #0
|
|
mvnlt r0, #0
|
|
blt _0206DBB4
|
|
ldr r1, _0206DC08 ; =DRIVER_WORK
|
|
mov r0, #0x3e8
|
|
ldrsh r1, [r1, #0x28]
|
|
smulbb r0, r2, r0
|
|
bl _s32_div_f
|
|
_0206DBB4:
|
|
strh r0, [r4, #0x1a]
|
|
mov r2, #0
|
|
strb r2, [r4, #2]
|
|
mov r0, r4
|
|
mov r1, r5
|
|
strb r2, [r4, #7]
|
|
bl DseSequence_SetFades
|
|
ldrsb r0, [r4, #8]
|
|
cmp r0, #0
|
|
bne _0206DBF8
|
|
ldrsb r0, [r4, #2]
|
|
cmp r0, #0
|
|
bne _0206DBF0
|
|
ldr r0, [r4, #0x24]
|
|
bl DseSynth_RestoreHeldNotes
|
|
_0206DBF0:
|
|
mov r0, #1
|
|
strb r0, [r4, #5]
|
|
_0206DBF8:
|
|
mov r0, #1
|
|
strb r0, [r4, #4]
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0206DC08: .word DRIVER_WORK
|
|
arm_func_end DseSequence_Start
|
|
|
|
arm_func_start DseSequence_PauseList
|
|
DseSequence_PauseList: ; 0x0206DC0C
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
movs r4, r0
|
|
beq _0206DC6C
|
|
ldr r7, _0206DC74 ; =0x04000208
|
|
mov r8, #0
|
|
mov r5, #1
|
|
_0206DC24:
|
|
ldrsb r0, [r4, #4]
|
|
cmp r0, #1
|
|
ldreqsb r0, [r4, #6]
|
|
cmpeq r0, #0
|
|
ldreqsb r0, [r4, #9]
|
|
cmpeq r0, #1
|
|
bne _0206DC60
|
|
strb r8, [r4, #5]
|
|
ldrh r6, [r7]
|
|
strh r8, [r7]
|
|
ldr r0, [r4, #0x24]
|
|
bl DseSynth_StopChannels
|
|
ldrh r0, [r7]
|
|
strh r6, [r7]
|
|
strb r5, [r4, #8]
|
|
_0206DC60:
|
|
ldr r4, [r4, #0xa4]
|
|
cmp r4, #0
|
|
bne _0206DC24
|
|
_0206DC6C:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_0206DC74: .word 0x04000208
|
|
arm_func_end DseSequence_PauseList
|
|
|
|
arm_func_start sub_0206DC78
|
|
sub_0206DC78: ; 0x0206DC78
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
movs sl, r0
|
|
mov sb, r1
|
|
mov r8, r2
|
|
beq _0206DD64
|
|
mov r0, #0x3e8
|
|
mul r7, sb, r0
|
|
mov fp, #1
|
|
_0206DC98:
|
|
ldrsb r0, [sl, #8]
|
|
cmp r0, #1
|
|
bne _0206DD58
|
|
cmp r8, #1
|
|
bne _0206DCC8
|
|
mov r0, #0
|
|
str r0, [sl, #0x68]
|
|
strh r0, [sl, #0x74]
|
|
strb r0, [sl, #6]
|
|
ldr r0, [sl, #0x24]
|
|
mov r1, #0
|
|
bl DseSynth_ResetAllVoiceTimersAndVolumes
|
|
_0206DCC8:
|
|
cmp sb, #0
|
|
ldrsb r4, [sl, #0x98]
|
|
moveq r6, #0
|
|
beq _0206DCF4
|
|
ldr r0, _0206DD6C ; =DRIVER_WORK
|
|
ldrsh r1, [r0, #0x28]
|
|
mov r0, r7
|
|
bl _u32_div_f
|
|
mov r0, r0, lsl #0x10
|
|
movs r6, r0, lsr #0x10
|
|
moveq r6, #1
|
|
_0206DCF4:
|
|
mov r1, r4, lsl #0x10
|
|
str r1, [sl, #0x70]
|
|
cmp r6, #0
|
|
mov r5, r6
|
|
streq r1, [sl, #0x68]
|
|
beq _0206DD28
|
|
ldr r0, [sl, #0x68]
|
|
subs r0, r1, r0
|
|
moveq r5, #0
|
|
beq _0206DD28
|
|
mov r1, r6
|
|
bl _s32_div_f
|
|
str r0, [sl, #0x6c]
|
|
_0206DD28:
|
|
strh r5, [sl, #0x74]
|
|
cmp r6, #0
|
|
ldrneb r0, [sl, #0xc]
|
|
orrne r0, r0, #4
|
|
strneb r0, [sl, #0xc]
|
|
bne _0206DD4C
|
|
ldr r0, [sl, #0x24]
|
|
mov r1, r4
|
|
bl DseSynth_SetVolume
|
|
_0206DD4C:
|
|
strb fp, [sl, #5]
|
|
mov r0, #0
|
|
strb r0, [sl, #8]
|
|
_0206DD58:
|
|
ldr sl, [sl, #0xa4]
|
|
cmp sl, #0
|
|
bne _0206DC98
|
|
_0206DD64:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0206DD6C: .word DRIVER_WORK
|
|
arm_func_end sub_0206DC78
|
|
|
|
arm_func_start DseSequence_SetFades
|
|
DseSequence_SetFades: ; 0x0206DD70
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r6, r1
|
|
ldrb r1, [r6]
|
|
mov r7, r0
|
|
tst r1, #1
|
|
beq _0206DE38
|
|
ldrsh r4, [r6, #4]
|
|
ldrh r1, [r6, #6]
|
|
cmp r4, #0
|
|
moveq r4, #0x100
|
|
cmp r1, #0
|
|
moveq r5, #0
|
|
beq _0206DDC4
|
|
mov r0, #0x3e8
|
|
mul r0, r1, r0
|
|
ldr r1, _0206E05C ; =DRIVER_WORK
|
|
ldrsh r1, [r1, #0x28]
|
|
bl _u32_div_f
|
|
mov r0, r0, lsl #0x10
|
|
movs r5, r0, lsr #0x10
|
|
moveq r5, #1
|
|
_0206DDC4:
|
|
mov r1, r4, lsl #0x10
|
|
str r1, [r7, #0x50]
|
|
cmp r5, #0
|
|
mov r4, r5
|
|
streq r1, [r7, #0x48]
|
|
beq _0206DDF8
|
|
ldr r0, [r7, #0x48]
|
|
subs r0, r1, r0
|
|
moveq r4, #0
|
|
beq _0206DDF8
|
|
mov r1, r5
|
|
bl _s32_div_f
|
|
str r0, [r7, #0x4c]
|
|
_0206DDF8:
|
|
strh r4, [r7, #0x54]
|
|
cmp r5, #0
|
|
bne _0206DE2C
|
|
ldr r1, [r7, #0x48]
|
|
ldrb r0, [r7, #0x17]
|
|
mov r1, r1, asr #0x10
|
|
smulbb r0, r1, r0
|
|
movs r1, r0, lsr #8
|
|
ldr r0, _0206E060 ; =0x03938700
|
|
moveq r1, #1
|
|
bl _u32_div_f
|
|
str r0, [r7, #0x44]
|
|
b _0206DE38
|
|
_0206DE2C:
|
|
ldrb r0, [r7, #0xc]
|
|
orr r0, r0, #1
|
|
strb r0, [r7, #0xc]
|
|
_0206DE38:
|
|
ldrb r0, [r6]
|
|
tst r0, #2
|
|
beq _0206DEDC
|
|
ldrh r1, [r6, #0xa]
|
|
ldrsh r4, [r6, #8]
|
|
cmp r1, #0
|
|
moveq r5, #0
|
|
beq _0206DE78
|
|
mov r0, #0x3e8
|
|
mul r0, r1, r0
|
|
ldr r1, _0206E05C ; =DRIVER_WORK
|
|
ldrsh r1, [r1, #0x28]
|
|
bl _u32_div_f
|
|
mov r0, r0, lsl #0x10
|
|
movs r5, r0, lsr #0x10
|
|
moveq r5, #1
|
|
_0206DE78:
|
|
mov r1, r4, lsl #0x10
|
|
str r1, [r7, #0x60]
|
|
cmp r5, #0
|
|
mov r4, r5
|
|
streq r1, [r7, #0x58]
|
|
beq _0206DEAC
|
|
ldr r0, [r7, #0x58]
|
|
subs r0, r1, r0
|
|
moveq r4, #0
|
|
beq _0206DEAC
|
|
mov r1, r5
|
|
bl _s32_div_f
|
|
str r0, [r7, #0x5c]
|
|
_0206DEAC:
|
|
strh r4, [r7, #0x64]
|
|
cmp r5, #0
|
|
ldrneb r0, [r7, #0xc]
|
|
orrne r0, r0, #2
|
|
strneb r0, [r7, #0xc]
|
|
bne _0206DEDC
|
|
ldr r1, [r7, #0x58]
|
|
ldr r0, [r7, #0x24]
|
|
mov r1, r1, asr #0x10
|
|
mov r1, r1, lsl #0x10
|
|
mov r1, r1, asr #0x10
|
|
bl DseSynth_SetBend
|
|
_0206DEDC:
|
|
ldrb r0, [r6]
|
|
tst r0, #4
|
|
beq _0206DF98
|
|
ldrsh r4, [r6, #0xc]
|
|
ldrsh r1, [r6, #0xe]
|
|
strb r4, [r7, #0x98]
|
|
ldrsb r0, [r7, #8]
|
|
cmp r0, #1
|
|
moveq r4, #0
|
|
moveq r1, r4
|
|
mov r0, r1, lsl #0x10
|
|
movs r1, r0, lsr #0x10
|
|
moveq r5, #0
|
|
beq _0206DF34
|
|
mov r0, #0x3e8
|
|
mul r0, r1, r0
|
|
ldr r1, _0206E05C ; =DRIVER_WORK
|
|
ldrsh r1, [r1, #0x28]
|
|
bl _u32_div_f
|
|
mov r0, r0, lsl #0x10
|
|
movs r5, r0, lsr #0x10
|
|
moveq r5, #1
|
|
_0206DF34:
|
|
mov r0, r4, lsl #0x18
|
|
mov r0, r0, asr #0x18
|
|
mov r1, r0, lsl #0x10
|
|
str r1, [r7, #0x70]
|
|
cmp r5, #0
|
|
mov r8, r5
|
|
streq r1, [r7, #0x68]
|
|
beq _0206DF70
|
|
ldr r0, [r7, #0x68]
|
|
subs r0, r1, r0
|
|
moveq r8, #0
|
|
beq _0206DF70
|
|
mov r1, r5
|
|
bl _s32_div_f
|
|
str r0, [r7, #0x6c]
|
|
_0206DF70:
|
|
strh r8, [r7, #0x74]
|
|
cmp r5, #0
|
|
ldrneb r0, [r7, #0xc]
|
|
orrne r0, r0, #4
|
|
strneb r0, [r7, #0xc]
|
|
bne _0206DF98
|
|
mov r1, r4, lsl #0x18
|
|
ldr r0, [r7, #0x24]
|
|
mov r1, r1, asr #0x18
|
|
bl DseSynth_SetVolume
|
|
_0206DF98:
|
|
ldrb r0, [r6]
|
|
tst r0, #8
|
|
beq _0206E048
|
|
ldrh r0, [r6, #0x10]
|
|
ldrh r1, [r6, #0x12]
|
|
mov r0, r0, lsl #0x18
|
|
cmp r1, #0
|
|
mov r4, r0, asr #0x18
|
|
moveq r5, #0
|
|
beq _0206DFE0
|
|
mov r0, #0x3e8
|
|
mul r0, r1, r0
|
|
ldr r1, _0206E05C ; =DRIVER_WORK
|
|
ldrsh r1, [r1, #0x28]
|
|
bl _u32_div_f
|
|
mov r0, r0, lsl #0x10
|
|
movs r5, r0, lsr #0x10
|
|
moveq r5, #1
|
|
_0206DFE0:
|
|
mov r1, r4, lsl #0x10
|
|
str r1, [r7, #0x80]
|
|
cmp r5, #0
|
|
mov r4, r5
|
|
streq r1, [r7, #0x78]
|
|
beq _0206E014
|
|
ldr r0, [r7, #0x78]
|
|
subs r0, r1, r0
|
|
moveq r4, #0
|
|
beq _0206E014
|
|
mov r1, r5
|
|
bl _s32_div_f
|
|
str r0, [r7, #0x7c]
|
|
_0206E014:
|
|
strh r4, [r7, #0x84]
|
|
cmp r5, #0
|
|
ldrneb r0, [r7, #0xc]
|
|
orrne r0, r0, #0x10
|
|
strneb r0, [r7, #0xc]
|
|
bne _0206E048
|
|
ldr r1, [r7, #0x78]
|
|
ldr r0, [r7, #0x24]
|
|
mov r1, r1, asr #0x10
|
|
mov r1, r1, lsl #0x18
|
|
mov r1, r1, asr #0x18
|
|
and r1, r1, #0xff
|
|
bl DseSynth_SetPan
|
|
_0206E048:
|
|
ldrsh r0, [r7, #0x1a]
|
|
cmp r0, #0
|
|
movlt r0, #0
|
|
strlth r0, [r7, #0x1a]
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_0206E05C: .word DRIVER_WORK
|
|
_0206E060: .word 0x03938700
|
|
arm_func_end DseSequence_SetFades
|
|
|
|
arm_func_start DseSequence_GetParameter
|
|
DseSequence_GetParameter: ; 0x0206E064
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r8, r0
|
|
mov r7, r1
|
|
mov r6, r2
|
|
bl DseSequence_GetById
|
|
movs r4, r0
|
|
bne _0206E098
|
|
mov r1, r8
|
|
mvn r0, #0x41
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x41
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_0206E098:
|
|
cmp r6, #0
|
|
bne _0206E0B8
|
|
mov r1, r8
|
|
mvn r0, #0x17
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x17
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_0206E0B8:
|
|
cmp r7, #0x12
|
|
mov r5, #0
|
|
addls pc, pc, r7, lsl #2
|
|
b _0206E1F8
|
|
_0206E0C8: ; jump table
|
|
b _0206E1F8 ; case 0
|
|
b _0206E114 ; case 1
|
|
b _0206E174 ; case 2
|
|
b _0206E180 ; case 3
|
|
b _0206E18C ; case 4
|
|
b _0206E1F8 ; case 5
|
|
b _0206E1F8 ; case 6
|
|
b _0206E1F8 ; case 7
|
|
b _0206E1C4 ; case 8
|
|
b _0206E1A4 ; case 9
|
|
b _0206E198 ; case 10
|
|
b _0206E1D0 ; case 11
|
|
b _0206E1EC ; case 12
|
|
b _0206E1F8 ; case 13
|
|
b _0206E1F8 ; case 14
|
|
b _0206E1F8 ; case 15
|
|
b _0206E1F8 ; case 16
|
|
b _0206E1F8 ; case 17
|
|
b _0206E1DC ; case 18
|
|
_0206E114:
|
|
ldrsb r2, [r4, #4]
|
|
mov r0, #0x3e8
|
|
ldr r1, _0206E214 ; =DRIVER_WORK
|
|
strb r2, [r6]
|
|
ldrsb r2, [r4, #6]
|
|
strb r2, [r6, #1]
|
|
ldrsb r2, [r4, #1]
|
|
strb r2, [r6, #2]
|
|
strb r5, [r6, #3]
|
|
ldr r2, [r4, #0x34]
|
|
ldr r1, [r1, #0x30]
|
|
mul r0, r2, r0
|
|
bl _u32_div_f
|
|
str r0, [r6, #4]
|
|
ldr r1, [r4, #0x38]
|
|
mov r0, r4
|
|
str r1, [r6, #8]
|
|
bl DseSequence_GetSmallestNumLoops
|
|
strh r0, [r6, #0xc]
|
|
ldrb r0, [r4, #0x17]
|
|
strb r0, [r6, #0xf]
|
|
ldrb r0, [r4, #0x16]
|
|
strb r0, [r6, #0xe]
|
|
b _0206E20C
|
|
_0206E174:
|
|
ldrsb r0, [r4, #4]
|
|
str r0, [r6]
|
|
b _0206E20C
|
|
_0206E180:
|
|
ldrb r0, [r4, #0x17]
|
|
str r0, [r6]
|
|
b _0206E20C
|
|
_0206E18C:
|
|
ldrsb r0, [r4, #1]
|
|
str r0, [r6]
|
|
b _0206E20C
|
|
_0206E198:
|
|
bl DseSequence_GetSmallestNumLoops
|
|
str r0, [r6]
|
|
b _0206E20C
|
|
_0206E1A4:
|
|
ldr r1, [r4, #0x34]
|
|
mov r0, #0x3e8
|
|
mul r0, r1, r0
|
|
ldr r1, _0206E214 ; =DRIVER_WORK
|
|
ldr r1, [r1, #0x30]
|
|
bl _u32_div_f
|
|
str r0, [r6]
|
|
b _0206E20C
|
|
_0206E1C4:
|
|
ldr r0, [r4, #0x38]
|
|
str r0, [r6]
|
|
b _0206E20C
|
|
_0206E1D0:
|
|
ldrb r0, [r4, #0x16]
|
|
str r0, [r6]
|
|
b _0206E20C
|
|
_0206E1DC:
|
|
ldr r0, [r4, #0x68]
|
|
mov r0, r0, asr #0x10
|
|
str r0, [r6]
|
|
b _0206E20C
|
|
_0206E1EC:
|
|
ldrb r0, [r4, #0x17]
|
|
str r0, [r6]
|
|
b _0206E20C
|
|
_0206E1F8:
|
|
mov r1, r8
|
|
mvn r0, #0x17
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r5, #0x17
|
|
_0206E20C:
|
|
mov r0, r5
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_0206E214: .word DRIVER_WORK
|
|
arm_func_end DseSequence_GetParameter
|
|
|
|
arm_func_start DseSequence_GetSmallestNumLoops
|
|
DseSequence_GetSmallestNumLoops: ; 0x0206E218
|
|
ldrb ip, [r0, #0xf]
|
|
add r2, r0, #0xa8
|
|
ldr r0, _0206E268 ; =0x0000FFFF
|
|
cmp ip, #0
|
|
mov r3, #0
|
|
ble _0206E258
|
|
_0206E230:
|
|
ldrsb r1, [r2, #2]
|
|
cmp r1, #1
|
|
bne _0206E248
|
|
ldrh r1, [r2, #0xa]
|
|
cmp r0, r1
|
|
movhi r0, r1
|
|
_0206E248:
|
|
add r3, r3, #1
|
|
cmp r3, ip
|
|
add r2, r2, #0x5c
|
|
blt _0206E230
|
|
_0206E258:
|
|
ldr r1, _0206E268 ; =0x0000FFFF
|
|
cmp r0, r1
|
|
moveq r0, #0
|
|
bx lr
|
|
.align 2, 0
|
|
_0206E268: .word 0x0000FFFF
|
|
arm_func_end DseSequence_GetSmallestNumLoops
|
|
|
|
arm_func_start DseSequence_Reset
|
|
DseSequence_Reset: ; 0x0206E26C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r4, r0
|
|
ldr r0, [r4, #0x24]
|
|
ldr r2, [r4, #0x28]
|
|
mov r1, #0
|
|
bl DseSynth_ResetAndSetBankAndSequence
|
|
ldrb r1, [r4, #0x13]
|
|
ldr r0, [r4, #0x24]
|
|
mov r2, #0
|
|
bl DseSynth_SetGlobalVolumeIndex
|
|
mov lr, #0
|
|
str lr, [r4, #4]
|
|
strb lr, [r4, #3]
|
|
mov r0, #1
|
|
strb r0, [r4, #9]
|
|
ldr r0, _0206E3BC ; =DRIVER_WORK
|
|
strb lr, [r4, #0xd]
|
|
ldr r2, [r0, #0x2c]
|
|
mov r1, #0x78
|
|
str r2, [r4, #0x30]
|
|
str lr, [r4, #0x34]
|
|
str lr, [r4, #0x38]
|
|
strb r1, [r4, #0x17]
|
|
str lr, [r4, #0x3c]
|
|
ldrb r2, [r4, #0x15]
|
|
ldrsh r1, [r0, #0x28]
|
|
ldr r0, _0206E3C0 ; =0x0007A120
|
|
mov r2, r2, lsl #3
|
|
mul r1, r2, r1
|
|
str r1, [r4, #0x40]
|
|
str r0, [r4, #0x44]
|
|
strb lr, [r4, #0xc]
|
|
mov r0, #0x1000000
|
|
str r0, [r4, #0x48]
|
|
strh lr, [r4, #0x54]
|
|
str lr, [r4, #0x58]
|
|
strh lr, [r4, #0x64]
|
|
mov r0, #0x7f0000
|
|
str r0, [r4, #0x68]
|
|
strh lr, [r4, #0x74]
|
|
mov r0, #0x400000
|
|
str r0, [r4, #0x78]
|
|
strh lr, [r4, #0x84]
|
|
mov r0, #0x7f
|
|
strb r0, [r4, #0x98]
|
|
ldrb r0, [r4, #0xf]
|
|
add ip, r4, #0xa8
|
|
cmp r0, #0
|
|
ble _0206E3AC
|
|
mov r3, #1
|
|
mov r2, lr
|
|
mov r1, #0x7f
|
|
mov r0, #4
|
|
mov r5, #0xc8
|
|
_0206E344:
|
|
ldr r6, [ip, #0x18]
|
|
cmp r6, #0
|
|
beq _0206E38C
|
|
strb r3, [ip, #2]
|
|
strh r2, [ip, #0xa]
|
|
ldr r6, [ip, #0x18]
|
|
str r6, [ip, #0x1c]
|
|
str r2, [ip, #0xc]
|
|
str r2, [ip, #0x14]
|
|
strb r1, [ip, #5]
|
|
strb r0, [ip, #4]
|
|
strb r2, [ip, #6]
|
|
str r2, [ip, #0x20]
|
|
ldr r7, [r4, #0x24]
|
|
ldrb r6, [ip, #3]
|
|
add r7, r7, #0x10
|
|
mla r7, r6, r5, r7
|
|
str r7, [ip, #0x54]
|
|
_0206E38C:
|
|
ldrb r6, [r4, #0xd]
|
|
add lr, lr, #1
|
|
add ip, ip, #0x5c
|
|
add r6, r6, #1
|
|
strb r6, [r4, #0xd]
|
|
ldrb r6, [r4, #0xf]
|
|
cmp lr, r6
|
|
blt _0206E344
|
|
_0206E3AC:
|
|
mov r0, #1
|
|
strb r0, [r4]
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0206E3BC: .word DRIVER_WORK
|
|
_0206E3C0: .word 0x0007A120
|
|
arm_func_end DseSequence_Reset
|
|
|
|
arm_func_start DseSequence_Stop
|
|
DseSequence_Stop: ; 0x0206E3C4
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r0
|
|
ldrsb r0, [r5, #1]
|
|
mov r4, r2
|
|
cmp r0, #1
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
ldrsb r0, [r5, #4]
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
cmp r1, #0
|
|
beq _0206E49C
|
|
ldr r0, [r5, #0x68]
|
|
movs r0, r0, asr #0x10
|
|
beq _0206E49C
|
|
mov r0, #1
|
|
strb r0, [r5, #7]
|
|
mov r6, #0
|
|
strb r6, [r5, #0x98]
|
|
cmp r1, #0
|
|
beq _0206E43C
|
|
mov r0, #0x3e8
|
|
mul r0, r1, r0
|
|
ldr r1, _0206E4E0 ; =DRIVER_WORK
|
|
ldrsh r1, [r1, #0x28]
|
|
bl _u32_div_f
|
|
mov r0, r0, lsl #0x10
|
|
movs r6, r0, lsr #0x10
|
|
moveq r6, #1
|
|
_0206E43C:
|
|
mov r1, #0
|
|
str r1, [r5, #0x70]
|
|
cmp r6, #0
|
|
mov r4, r6
|
|
streq r1, [r5, #0x68]
|
|
beq _0206E470
|
|
ldr r0, [r5, #0x68]
|
|
rsbs r0, r0, #0
|
|
moveq r4, r1
|
|
beq _0206E470
|
|
mov r1, r6
|
|
bl _s32_div_f
|
|
str r0, [r5, #0x6c]
|
|
_0206E470:
|
|
strh r4, [r5, #0x74]
|
|
cmp r6, #0
|
|
bne _0206E48C
|
|
ldr r0, [r5, #0x24]
|
|
mov r1, #0
|
|
bl DseSynth_SetVolume
|
|
b _0206E4D8
|
|
_0206E48C:
|
|
ldrb r0, [r5, #0xc]
|
|
orr r0, r0, #4
|
|
strb r0, [r5, #0xc]
|
|
b _0206E4D8
|
|
_0206E49C:
|
|
mov r1, #0
|
|
str r1, [r5, #4]
|
|
ldr r0, _0206E4E4 ; =0x04000208
|
|
strb r1, [r5, #8]
|
|
ldrh r6, [r0]
|
|
strh r1, [r0]
|
|
ldr r0, [r5, #0x24]
|
|
bl DseSynth_StopChannels
|
|
cmp r4, #1
|
|
bne _0206E4CC
|
|
ldr r0, [r5, #0x24]
|
|
bl DseSynth_ClearHeldNotes
|
|
_0206E4CC:
|
|
ldr r1, _0206E4E4 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r6, [r1]
|
|
_0206E4D8:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0206E4E0: .word DRIVER_WORK
|
|
_0206E4E4: .word 0x04000208
|
|
arm_func_end DseSequence_Stop
|
|
|
|
arm_func_start FindSmdlSongChunk
|
|
FindSmdlSongChunk: ; 0x0206E4E8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
ldr r6, _0206E54C ; =0x736F6E67
|
|
ldr r7, _0206E550 ; =0x656F6420
|
|
mov r5, r1
|
|
add r4, r0, #0x40
|
|
_0206E4FC:
|
|
ldr r0, [r4]
|
|
bl DseUtil_ByteSwap32
|
|
cmp r0, r7
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
cmp r0, r6
|
|
ldreqsh r1, [r4, #0x10]
|
|
addeq r0, r4, #0x10
|
|
cmpeq r1, r5
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldrb r1, [r4, #8]
|
|
ldr r0, [r4, #0xc]
|
|
sub r2, r1, #1
|
|
add r0, r0, #0x10
|
|
mvn r1, r2
|
|
add r0, r0, r2
|
|
and r0, r1, r0
|
|
add r4, r4, r0
|
|
b _0206E4FC
|
|
_0206E548:
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0206E54C: .word 0x736F6E67
|
|
_0206E550: .word 0x656F6420
|
|
arm_func_end FindSmdlSongChunk
|
|
|
|
arm_func_start DseSequence_LoadSong
|
|
DseSequence_LoadSong: ; 0x0206E554
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
mov r7, r0
|
|
mov r6, r1
|
|
ldrb r1, [r6, #6]
|
|
ldrb r0, [r7, #0xe]
|
|
cmp r1, r0
|
|
mvnhi r0, #0
|
|
ldmhiia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
ldrh r0, [r6, #2]
|
|
add r4, r6, #0x30
|
|
add r5, r7, #0xa8
|
|
mov r0, r0, asr #3
|
|
strb r0, [r7, #0x15]
|
|
ldrb r0, [r6, #4]
|
|
strb r0, [r7, #0x11]
|
|
ldrb r0, [r6, #6]
|
|
strb r0, [r7, #0xf]
|
|
ldrb r0, [r6, #7]
|
|
strb r0, [r7, #0x10]
|
|
ldrb r0, [r6, #0x1b]
|
|
strb r0, [r7, #0x12]
|
|
ldrb r0, [r6, #0x19]
|
|
strb r0, [r7, #0x13]
|
|
ldrb r0, [r6, #0x1a]
|
|
strb r0, [r7, #0x14]
|
|
ldrb r0, [r6, #0x18]
|
|
tst r0, #0x80
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
strb r0, [r7, #0xb]
|
|
ldr r0, [r6, #0x30]
|
|
bl DseUtil_ByteSwap32
|
|
ldr sb, _0206E648 ; =0x74726B20
|
|
ldr sl, _0206E64C ; =0x626E6B6C
|
|
ldr r8, _0206E650 ; =0x656F6320
|
|
b _0206E634
|
|
_0206E5E4:
|
|
cmp r0, sl
|
|
beq _0206E610
|
|
cmp r0, sb
|
|
bne _0206E610
|
|
add r0, r4, #0x14
|
|
str r0, [r5, #0x18]
|
|
ldrb r0, [r4, #0x10]
|
|
strh r0, [r5]
|
|
ldrb r0, [r4, #0x11]
|
|
strb r0, [r5, #3]
|
|
add r5, r5, #0x5c
|
|
_0206E610:
|
|
ldrb r1, [r4, #8]
|
|
ldr r0, [r4, #0xc]
|
|
sub r2, r1, #1
|
|
add r0, r0, #0x10
|
|
mvn r1, r2
|
|
add r0, r0, r2
|
|
and r0, r1, r0
|
|
ldr r0, [r4, r0]!
|
|
bl DseUtil_ByteSwap32
|
|
_0206E634:
|
|
cmp r0, r8
|
|
bne _0206E5E4
|
|
str r6, [r7, #0x20]
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_0206E648: .word 0x74726B20
|
|
_0206E64C: .word 0x626E6B6C
|
|
_0206E650: .word 0x656F6320
|
|
arm_func_end DseSequence_LoadSong
|
|
|
|
arm_func_start DseSequence_GetById
|
|
DseSequence_GetById: ; 0x0206E654
|
|
ldr r3, _0206E698 ; =0x04000208
|
|
ldr r1, _0206E69C ; =DRIVER_WORK
|
|
ldrh ip, [r3]
|
|
mov r2, #0
|
|
strh r2, [r3]
|
|
ldr r3, [r1, #0x664]
|
|
b _0206E674
|
|
_0206E670:
|
|
ldr r3, [r3, #0xa4]
|
|
_0206E674:
|
|
cmp r3, #0
|
|
ldrne r1, [r3, #0x28]
|
|
cmpne r1, r0
|
|
bne _0206E670
|
|
ldr r2, _0206E698 ; =0x04000208
|
|
mov r0, r3
|
|
ldrh r1, [r2]
|
|
strh ip, [r2]
|
|
bx lr
|
|
.align 2, 0
|
|
_0206E698: .word 0x04000208
|
|
_0206E69C: .word DRIVER_WORK
|
|
arm_func_end DseSequence_GetById
|
|
|
|
arm_func_start DseSequence_AllocateNew
|
|
DseSequence_AllocateNew: ; 0x0206E6A0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r0, #0x5c
|
|
mul r0, r7, r0
|
|
mov r6, r1
|
|
add r0, r0, #0xa8
|
|
mov r1, #0x10
|
|
mov r5, r2
|
|
bl DseMem_Allocate
|
|
movs r4, r0
|
|
bne _0206E6E4
|
|
mov r1, #0
|
|
mov r2, r1
|
|
mvn r0, #0x83
|
|
bl Dse_SetError
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0206E6E4:
|
|
mov r3, #0
|
|
str r3, [r4]
|
|
str r3, [r4, #4]
|
|
str r3, [r4, #8]
|
|
strb r3, [r4, #0x16]
|
|
strb r3, [r4, #0xd]
|
|
str r3, [r4, #0x30]
|
|
str r3, [r4, #0x28]
|
|
strh r3, [r4, #0x2c]
|
|
mov r0, #6
|
|
strb r0, [r4, #0x15]
|
|
strb r3, [r4, #0xd]
|
|
and r0, r7, #0xff
|
|
strb r0, [r4, #0xe]
|
|
strb r0, [r4, #0xf]
|
|
strb r6, [r4, #0x10]
|
|
strb r3, [r4, #0x11]
|
|
strb r3, [r4, #0x12]
|
|
strb r3, [r4, #0x13]
|
|
str r3, [r4, #0x1c]
|
|
ldr r1, _0206E7C8 ; =0x76656400
|
|
and r2, r5, #0xff
|
|
mov r0, r6
|
|
orr r1, r2, r1
|
|
str r3, [r4, #0x20]
|
|
bl DseSynth_AllocateNew
|
|
str r0, [r4, #0x24]
|
|
cmp r0, #0
|
|
bne _0206E778
|
|
mov r0, r4
|
|
bl DseMem_Free
|
|
mov r1, #0
|
|
mov r2, r1
|
|
mvn r0, #0x85
|
|
bl Dse_SetError
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0206E778:
|
|
mov r0, #0x78
|
|
strb r0, [r4, #0x17]
|
|
mov r3, #0
|
|
str r3, [r4, #0x3c]
|
|
ldr r0, _0206E7CC ; =DRIVER_WORK
|
|
ldrb r2, [r4, #0x15]
|
|
ldrsh r0, [r0, #0x28]
|
|
ldr r1, _0206E7D0 ; =0x0007A120
|
|
mov r2, r2, lsl #3
|
|
mul r0, r2, r0
|
|
str r0, [r4, #0x40]
|
|
ldr r0, _0206E7D4 ; =DseBgm_DefaultSignalCallback
|
|
str r1, [r4, #0x44]
|
|
str r0, [r4, #0x9c]
|
|
str r3, [r4, #0xa0]
|
|
mov r0, r4
|
|
str r3, [r4, #0xa4]
|
|
bl DseSequence_InitTracks
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0206E7C8: .word 0x76656400
|
|
_0206E7CC: .word DRIVER_WORK
|
|
_0206E7D0: .word 0x0007A120
|
|
_0206E7D4: .word DseBgm_DefaultSignalCallback
|
|
arm_func_end DseSequence_AllocateNew
|
|
|
|
arm_func_start DseSequence_Unload
|
|
DseSequence_Unload: ; 0x0206E7D8
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrsb r1, [r4, #4]
|
|
cmp r1, #1
|
|
bne _0206E7F8
|
|
mov r1, #0
|
|
mov r2, r1
|
|
bl DseSequence_Stop
|
|
_0206E7F8:
|
|
ldr r1, _0206E854 ; =0x04000208
|
|
mov r0, #0
|
|
ldrh r3, [r1]
|
|
ldr r2, _0206E858 ; =_022B7994
|
|
strh r0, [r1]
|
|
b _0206E814
|
|
_0206E810:
|
|
add r2, r0, #0xa4
|
|
_0206E814:
|
|
ldr r0, [r2]
|
|
cmp r0, #0
|
|
cmpne r0, r4
|
|
bne _0206E810
|
|
cmp r0, #0
|
|
ldrne r0, [r4, #0xa4]
|
|
ldr r1, _0206E854 ; =0x04000208
|
|
strne r0, [r2]
|
|
ldrh r0, [r1]
|
|
strh r3, [r1]
|
|
ldr r0, [r4, #0x24]
|
|
bl DseSynth_Unload
|
|
mov r0, r4
|
|
bl DseMem_Free
|
|
mov r0, #0
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0206E854: .word 0x04000208
|
|
_0206E858: .word _022B7994
|
|
arm_func_end DseSequence_Unload
|
|
|
|
arm_func_start DseSequence_InitTracks
|
|
DseSequence_InitTracks: ; 0x0206E85C
|
|
ldrb r1, [r0, #0xf]
|
|
add r3, r0, #0xa8
|
|
mov ip, #0
|
|
cmp r1, #0
|
|
bxle lr
|
|
mov r2, ip
|
|
_0206E874:
|
|
strb r2, [r3, #2]
|
|
strh ip, [r3]
|
|
strb ip, [r3, #3]
|
|
strh r2, [r3, #0xa]
|
|
str r2, [r3, #0x18]
|
|
str r2, [r3, #0x1c]
|
|
str r2, [r3, #0x20]
|
|
str r2, [r3, #0x54]
|
|
ldrb r1, [r0, #0xf]
|
|
add ip, ip, #1
|
|
add r3, r3, #0x5c
|
|
cmp ip, r1
|
|
blt _0206E874
|
|
bx lr
|
|
arm_func_end DseSequence_InitTracks
|
|
|
|
arm_func_start DseBgm_SysSetupNoteList
|
|
DseBgm_SysSetupNoteList: ; 0x0206E8AC
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _0206E914 ; =DRIVER_WORK
|
|
mov r1, #0
|
|
mvn r0, #0
|
|
_0206E8BC:
|
|
add r1, r1, #1
|
|
str r0, [r2, #0x54]
|
|
cmp r1, #0x80
|
|
add r2, r2, #0xc
|
|
blt _0206E8BC
|
|
ldr r2, _0206E914 ; =DRIVER_WORK
|
|
ldr ip, _0206E918 ; =_022B7380
|
|
mov lr, #0
|
|
mov r0, #0xc
|
|
_0206E8E0:
|
|
add lr, lr, #1
|
|
mul r3, lr, r0
|
|
add r1, ip, r3
|
|
str r1, [r2, #0x58]
|
|
cmp lr, #0x7f
|
|
add r2, r2, #0xc
|
|
blt _0206E8E0
|
|
ldr r1, _0206E91C ; =_022B7388
|
|
mov r2, #0
|
|
ldr r0, _0206E914 ; =DRIVER_WORK
|
|
str r2, [r1, r3]
|
|
str ip, [r0, #0x650]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0206E914: .word DRIVER_WORK
|
|
_0206E918: .word _022B7380
|
|
_0206E91C: .word _022B7388
|
|
arm_func_end DseBgm_SysSetupNoteList
|
|
|
|
arm_func_start DseSe_SysReset
|
|
DseSe_SysReset: ; 0x0206E920
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
ldr r2, _0206EA08 ; =DRIVER_WORK
|
|
mov sb, r0
|
|
ldrsb r0, [r2]
|
|
mov r8, r1
|
|
mov r1, #0
|
|
cmp r0, #0
|
|
bne _0206E954
|
|
mov r2, r1
|
|
mvn r0, #0xc0
|
|
bl Dse_SetError
|
|
mvn r0, #0xc0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
_0206E954:
|
|
ldr r4, [r2, #0x668]
|
|
ldr r0, _0206EA0C ; =0x04000208
|
|
str r1, [r2, #0x668]
|
|
ldrh r5, [r0]
|
|
cmp r4, #0
|
|
strh r1, [r0]
|
|
beq _0206E984
|
|
_0206E970:
|
|
mov r0, r4
|
|
ldr r4, [r4, #0xa4]
|
|
bl DseSequence_Unload
|
|
cmp r4, #0
|
|
bne _0206E970
|
|
_0206E984:
|
|
ldr r1, _0206EA0C ; =0x04000208
|
|
mov r6, #0
|
|
ldrh r0, [r1]
|
|
ldr r0, _0206EA08 ; =DRIVER_WORK
|
|
mov r4, r6
|
|
strh r5, [r1]
|
|
strb sb, [r0, #0x3a]
|
|
strb r8, [r0, #0x3b]
|
|
ldrh r7, [r1]
|
|
cmp sb, #0
|
|
ldr r5, _0206EA10 ; =_022B7998
|
|
strh r6, [r1]
|
|
ble _0206E9F4
|
|
mov r0, r8, lsl #0x10
|
|
ldr r8, _0206EA14 ; =0x71657365
|
|
mov sl, r0, lsr #0x10
|
|
_0206E9C4:
|
|
mov r0, sl
|
|
mov r1, sl
|
|
mov r2, r8
|
|
bl DseSequence_AllocateNew
|
|
cmp r0, #0
|
|
mvneq r6, #0x83
|
|
beq _0206E9F4
|
|
add r4, r4, #1
|
|
str r0, [r5]
|
|
cmp r4, sb
|
|
add r5, r0, #0xa4
|
|
blt _0206E9C4
|
|
_0206E9F4:
|
|
ldr r2, _0206EA0C ; =0x04000208
|
|
mov r0, r6
|
|
ldrh r1, [r2]
|
|
strh r7, [r2]
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_0206EA08: .word DRIVER_WORK
|
|
_0206EA0C: .word 0x04000208
|
|
_0206EA10: .word _022B7998
|
|
_0206EA14: .word 0x71657365
|
|
arm_func_end DseSe_SysReset
|
|
|
|
arm_func_start DseSe_Load
|
|
DseSe_Load: ; 0x0206EA18
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
ldr r1, _0206EBA8 ; =0x7365646C
|
|
ldr r2, _0206EBAC ; =0x00000415
|
|
mov r3, #4
|
|
mov r4, r0
|
|
bl DseFile_CheckHeader
|
|
movs r5, r0
|
|
ldmmiia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r0, r5, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
bl DseSe_GetById
|
|
cmp r0, #0
|
|
beq _0206EA64
|
|
mov r1, r5
|
|
mvn r0, #0x49
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x49
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0206EA64:
|
|
ldr r2, _0206EBB0 ; =0x66646573
|
|
mov r0, #0x1c
|
|
mov r1, #0x10
|
|
bl DseMem_Allocate
|
|
movs sl, r0
|
|
bne _0206EA94
|
|
mov r1, r5
|
|
mvn r0, #0x7f
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x7f
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0206EA94:
|
|
str r4, [sl]
|
|
ldrsh r2, [r4, #0x30]
|
|
mov r1, #0
|
|
mov r0, #1
|
|
strh r2, [sl, #4]
|
|
strh r5, [sl, #6]
|
|
str r1, [sl, #8]
|
|
str r1, [sl, #0xc]
|
|
str r1, [sl, #0x10]
|
|
str r1, [sl, #0x14]
|
|
strb r0, [sl, #0x18]
|
|
ldrb r0, [r4, #0x35]
|
|
cmp r0, #0
|
|
beq _0206EB60
|
|
add r8, r4, #0x40
|
|
ldr r4, _0206EBB4 ; =0x73657120
|
|
ldr r7, _0206EBB8 ; =0x656F6420
|
|
ldr r6, _0206EBBC ; =0x626E6B6C
|
|
ldr r5, _0206EBC0 ; =0x6D63726C
|
|
mov fp, r1
|
|
_0206EAE4:
|
|
ldr r0, [r8]
|
|
mov sb, fp
|
|
bl DseUtil_ByteSwap32
|
|
cmp r0, r7
|
|
bhi _0206EB0C
|
|
bhs _0206EB30
|
|
cmp r0, r6
|
|
addeq r0, r8, #0x10
|
|
streq r0, [sl, #0x14]
|
|
b _0206EB34
|
|
_0206EB0C:
|
|
cmp r0, r5
|
|
bhi _0206EB20
|
|
addeq r0, r8, #0x10
|
|
streq r0, [sl, #0x10]
|
|
b _0206EB34
|
|
_0206EB20:
|
|
cmp r0, r4
|
|
addeq r0, r8, #0x10
|
|
streq r0, [sl, #0xc]
|
|
b _0206EB34
|
|
_0206EB30:
|
|
mov sb, #1
|
|
_0206EB34:
|
|
cmp sb, #1
|
|
beq _0206EB60
|
|
ldrb r1, [r8, #8]
|
|
ldr r0, [r8, #0xc]
|
|
sub r2, r1, #1
|
|
add r0, r0, #0x10
|
|
mvn r1, r2
|
|
add r0, r0, r2
|
|
and r0, r1, r0
|
|
add r8, r8, r0
|
|
b _0206EAE4
|
|
_0206EB60:
|
|
ldr r1, _0206EBC4 ; =0x04000208
|
|
mov r0, #0
|
|
ldrh r3, [r1]
|
|
ldr r2, _0206EBC8 ; =_022B799C
|
|
strh r0, [r1]
|
|
ldr r0, [r2]
|
|
cmp r0, #0
|
|
beq _0206EB90
|
|
_0206EB80:
|
|
add r2, r0, #8
|
|
ldr r0, [r0, #8]
|
|
cmp r0, #0
|
|
bne _0206EB80
|
|
_0206EB90:
|
|
ldr r1, _0206EBC4 ; =0x04000208
|
|
str sl, [r2]
|
|
ldrh r0, [r1]
|
|
strh r3, [r1]
|
|
ldrh r0, [sl, #6]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0206EBA8: .word 0x7365646C
|
|
_0206EBAC: .word 0x00000415
|
|
_0206EBB0: .word 0x66646573
|
|
_0206EBB4: .word 0x73657120
|
|
_0206EBB8: .word 0x656F6420
|
|
_0206EBBC: .word 0x626E6B6C
|
|
_0206EBC0: .word 0x6D63726C
|
|
_0206EBC4: .word 0x04000208
|
|
_0206EBC8: .word _022B799C
|
|
arm_func_end DseSe_Load
|
|
|
|
arm_func_start DseSe_Unload
|
|
DseSe_Unload: ; 0x0206EBCC
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl DseSe_StopSeq
|
|
ldr r1, _0206EC54 ; =0x04000208
|
|
mov r0, #0
|
|
ldrh ip, [r1]
|
|
ldr r3, _0206EC58 ; =_022B799C
|
|
strh r0, [r1]
|
|
b _0206EBF4
|
|
_0206EBF0:
|
|
add r3, r0, #8
|
|
_0206EBF4:
|
|
ldr r0, [r3]
|
|
cmp r0, #0
|
|
ldrneh r1, [r0, #6]
|
|
cmpne r1, r4
|
|
bne _0206EBF0
|
|
cmp r0, #0
|
|
bne _0206EC34
|
|
ldr r3, _0206EC54 ; =0x04000208
|
|
mov r1, r4
|
|
ldrh r0, [r3]
|
|
mov r2, #0
|
|
mvn r0, #0x43
|
|
strh ip, [r3]
|
|
bl Dse_SetError
|
|
mvn r0, #0x43
|
|
ldmia sp!, {r4, pc}
|
|
_0206EC34:
|
|
ldr r1, [r0, #8]
|
|
ldr r2, _0206EC54 ; =0x04000208
|
|
str r1, [r3]
|
|
ldrh r1, [r2]
|
|
strh ip, [r2]
|
|
bl DseMem_Free
|
|
mov r0, #0
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0206EC54: .word 0x04000208
|
|
_0206EC58: .word _022B799C
|
|
arm_func_end DseSe_Unload
|
|
|
|
arm_func_start DseSe_GetUsedBankIDs
|
|
DseSe_GetUsedBankIDs: ; 0x0206EC5C
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
movs r4, r1
|
|
mov r6, r0
|
|
beq _0206EC74
|
|
cmp r2, #0
|
|
bgt _0206EC8C
|
|
_0206EC74:
|
|
mov r1, r6
|
|
mvn r0, #0x17
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x17
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_0206EC8C:
|
|
mov r0, r6, lsl #0x10
|
|
mov r5, r0, lsr #0x10
|
|
mov r0, r5
|
|
bl DseSe_GetById
|
|
cmp r0, #0
|
|
bne _0206ECBC
|
|
mov r1, r5
|
|
mvn r0, #0x43
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x43
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_0206ECBC:
|
|
ldr r2, [r0, #0x14]
|
|
cmp r2, #0
|
|
bne _0206ECE0
|
|
mov r1, r5
|
|
mvn r0, #0x4d
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x4d
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_0206ECE0:
|
|
mov r0, r6, asr #0x10
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, asr #0xf
|
|
ldrh r1, [r2, r0]
|
|
cmp r1, #0
|
|
mvneq r0, #0x44
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
ldrb r0, [r2, r1]
|
|
add r1, r2, r1
|
|
add r3, r1, #4
|
|
cmp r0, #0
|
|
mov r2, #0
|
|
ldmleia sp!, {r4, r5, r6, pc}
|
|
_0206ED14:
|
|
ldrh r0, [r3], #2
|
|
add r2, r2, #1
|
|
strh r0, [r4], #2
|
|
ldrb r0, [r1]
|
|
cmp r2, r0
|
|
blt _0206ED14
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end DseSe_GetUsedBankIDs
|
|
|
|
arm_func_start DseSe_HasPlayingInstances
|
|
DseSe_HasPlayingInstances: ; 0x0206ED30
|
|
mvn r2, #0
|
|
cmp r0, r2
|
|
beq _0206EDAC
|
|
ldr r2, _0206EDF8 ; =DRIVER_WORK
|
|
ldr r3, [r2, #0x668]
|
|
cmp r3, #0
|
|
beq _0206EDF0
|
|
_0206ED4C:
|
|
ldrsb r2, [r3, #4]
|
|
cmp r2, #1
|
|
ldreq r2, [r3, #0x28]
|
|
cmpeq r2, r0
|
|
bne _0206ED9C
|
|
cmp r1, #0
|
|
bne _0206ED7C
|
|
ldrsb r0, [r3, #6]
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, #2
|
|
bx lr
|
|
_0206ED7C:
|
|
ldrh r2, [r3, #0x2c]
|
|
cmp r2, r1
|
|
bne _0206ED9C
|
|
ldrsb r0, [r3, #6]
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, #2
|
|
bx lr
|
|
_0206ED9C:
|
|
ldr r3, [r3, #0xa4]
|
|
cmp r3, #0
|
|
bne _0206ED4C
|
|
b _0206EDF0
|
|
_0206EDAC:
|
|
ldr r0, _0206EDF8 ; =DRIVER_WORK
|
|
ldr r2, [r0, #0x668]
|
|
cmp r2, #0
|
|
beq _0206EDF0
|
|
_0206EDBC:
|
|
ldrsb r0, [r2, #4]
|
|
cmp r0, #1
|
|
ldreqh r0, [r2, #0x2c]
|
|
cmpeq r0, r1
|
|
bne _0206EDE4
|
|
ldrsb r0, [r2, #6]
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, #2
|
|
bx lr
|
|
_0206EDE4:
|
|
ldr r2, [r2, #0xa4]
|
|
cmp r2, #0
|
|
bne _0206EDBC
|
|
_0206EDF0:
|
|
mov r0, #0
|
|
bx lr
|
|
.align 2, 0
|
|
_0206EDF8: .word DRIVER_WORK
|
|
arm_func_end DseSe_HasPlayingInstances
|
|
|
|
arm_func_start DseSe_Play
|
|
DseSe_Play: ; 0x0206EDFC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sl, r0
|
|
mov r0, sl, lsl #0x10
|
|
mov r5, r0, lsr #0x10
|
|
mov r0, r5
|
|
mov fp, r1
|
|
mov sb, r2
|
|
bl DseSe_GetById
|
|
movs r4, r0
|
|
bne _0206EE3C
|
|
mov r1, r5
|
|
mvn r0, #0x43
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x43
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0206EE3C:
|
|
mov r0, sl, asr #0x10
|
|
mov r1, r0, lsl #0x10
|
|
ldr r5, [r4]
|
|
ldr r2, [r4, #0xc]
|
|
mov r0, r5
|
|
mov r1, r1, asr #0x10
|
|
bl DseSe_GetEffectSong
|
|
movs r6, r0
|
|
bne _0206EE78
|
|
mov r1, sl
|
|
mvn r0, #0x44
|
|
mov r2, #0
|
|
bl Dse_SetError2
|
|
mvn r0, #0x44
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0206EE78:
|
|
ldrb r0, [r6, #0x18]
|
|
ldrb r1, [sb]
|
|
ldrb r8, [r6, #0x1a]
|
|
tst r0, #1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
mov r0, r0, lsl #0x18
|
|
mov r2, r0, asr #0x18
|
|
tst r1, #0x40
|
|
bne _0206EECC
|
|
cmp r8, #0
|
|
ldrb r1, [r6, #0x1c]
|
|
bne _0206EEBC
|
|
mov r0, sl
|
|
bl DseSe_CheckTooManyInstances
|
|
and r0, r0, #0xff
|
|
b _0206EEDC
|
|
_0206EEBC:
|
|
mov r0, r8
|
|
bl DseSe_CheckTooManyInstancesInGroup
|
|
and r0, r0, #0xff
|
|
b _0206EEDC
|
|
_0206EECC:
|
|
mov r0, fp
|
|
mov r1, r2
|
|
bl sub_0206F208
|
|
and r0, r0, #0xff
|
|
_0206EEDC:
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldrb r0, [r6, #0x1b]
|
|
ldrb r1, [r6, #0x19]
|
|
ldrb r2, [r6, #0x1c]
|
|
bl DseSe_GetBestSeqAllocation
|
|
movs r7, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldrsb r1, [r7, #4]
|
|
cmp r1, #1
|
|
bne _0206EF1C
|
|
mov r1, #0
|
|
mov r2, #1
|
|
bl DseSequence_Stop
|
|
_0206EF1C:
|
|
str sl, [r7, #0x28]
|
|
mov r0, r7
|
|
str r5, [r7, #0x1c]
|
|
bl DseSequence_InitTracks
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl DseSequence_LoadSong
|
|
movs r1, r0
|
|
bpl _0206EF54
|
|
mov r2, sl
|
|
mvn r0, #0x4e
|
|
bl Dse_SetError
|
|
mvn r0, #0x4e
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_0206EF54:
|
|
mov r0, r7
|
|
bl DseSequence_Reset
|
|
mov r0, #0
|
|
str r0, [r7, #0x68]
|
|
strh r0, [r7, #0x74]
|
|
mov r0, #1
|
|
strb r0, [r7, #2]
|
|
ldrsb r0, [r4, #0x18]
|
|
strb r0, [r7, #9]
|
|
bl sub_0206C688
|
|
ldrsb r3, [r4, #0x18]
|
|
mov r1, fp
|
|
mov r2, r8
|
|
and r3, r3, r0
|
|
strb r3, [r7, #8]
|
|
mov r3, #1
|
|
strb r3, [r7, #0xa]
|
|
mov r0, r7
|
|
mov r3, sb
|
|
bl DseSequence_Start
|
|
cmp r0, #0
|
|
movge r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
arm_func_end DseSe_Play
|
|
|
|
arm_func_start DseSe_GetEffectSong
|
|
DseSe_GetEffectSong: ; 0x0206EFB0
|
|
cmp r1, #0
|
|
movlt r0, #0
|
|
bxlt lr
|
|
ldrsh r3, [r0, #0x30]
|
|
cmp r3, r1
|
|
movle r0, #0
|
|
bxle lr
|
|
ldrb r3, [r0, #0x35]
|
|
cmp r3, #0
|
|
moveq r2, r0
|
|
addeq r3, r0, #0x40
|
|
movne r3, r2
|
|
mov r0, r1, lsl #1
|
|
ldrh r0, [r3, r0]
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
addne r0, r2, r0
|
|
bx lr
|
|
arm_func_end DseSe_GetEffectSong
|
|
|
|
arm_func_start DseSe_CheckTooManyInstances
|
|
DseSe_CheckTooManyInstances: ; 0x0206EFF8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sl, r0
|
|
movs sb, r1
|
|
mov r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldr r3, _0206F0F8 ; =0x04000208
|
|
cmp r2, #1
|
|
ldrh r1, [r3]
|
|
str r1, [sp]
|
|
strh r0, [r3]
|
|
bne _0206F0AC
|
|
ldr r4, _0206F0FC ; =DRIVER_WORK
|
|
mov fp, r0
|
|
mov r6, r0
|
|
mvn r5, #0x80000000
|
|
_0206F034:
|
|
ldr r1, [r4, #0x668]
|
|
mov r7, r6
|
|
mov r2, r5
|
|
cmp r1, #0
|
|
beq _0206F07C
|
|
_0206F048:
|
|
ldrsb r0, [r1, #4]
|
|
cmp r0, #1
|
|
ldreq r0, [r1, #0x28]
|
|
cmpeq r0, sl
|
|
bne _0206F070
|
|
ldr r0, [r1, #0x30]
|
|
add r7, r7, #1
|
|
cmp r2, r0
|
|
movhi r2, r0
|
|
movhi r8, r1
|
|
_0206F070:
|
|
ldr r1, [r1, #0xa4]
|
|
cmp r1, #0
|
|
bne _0206F048
|
|
_0206F07C:
|
|
cmp r7, sb
|
|
blt _0206F09C
|
|
cmp r8, #0
|
|
beq _0206F09C
|
|
mov r0, r8
|
|
mov r1, fp
|
|
mov r2, #1
|
|
bl DseSequence_Stop
|
|
_0206F09C:
|
|
cmp r7, sb
|
|
bgt _0206F034
|
|
mov r0, #0
|
|
b _0206F0E4
|
|
_0206F0AC:
|
|
ldr r1, _0206F0FC ; =DRIVER_WORK
|
|
ldr r2, [r1, #0x668]
|
|
cmp r2, #0
|
|
beq _0206F0DC
|
|
_0206F0BC:
|
|
ldrsb r1, [r2, #4]
|
|
cmp r1, #1
|
|
ldreq r1, [r2, #0x28]
|
|
ldr r2, [r2, #0xa4]
|
|
cmpeq r1, sl
|
|
addeq r0, r0, #1
|
|
cmp r2, #0
|
|
bne _0206F0BC
|
|
_0206F0DC:
|
|
cmp r0, sb
|
|
movlt r0, #0
|
|
_0206F0E4:
|
|
ldr r2, _0206F0F8 ; =0x04000208
|
|
ldrh r1, [r2]
|
|
ldr r1, [sp]
|
|
strh r1, [r2]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0206F0F8: .word 0x04000208
|
|
_0206F0FC: .word DRIVER_WORK
|
|
arm_func_end DseSe_CheckTooManyInstances
|
|
|
|
arm_func_start DseSe_CheckTooManyInstancesInGroup
|
|
DseSe_CheckTooManyInstancesInGroup: ; 0x0206F100
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sl, r0
|
|
movs sb, r1
|
|
mov r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldr r3, _0206F200 ; =0x04000208
|
|
cmp r2, #1
|
|
ldrh r1, [r3]
|
|
str r1, [sp]
|
|
strh r0, [r3]
|
|
bne _0206F1B4
|
|
ldr r4, _0206F204 ; =DRIVER_WORK
|
|
mov fp, r0
|
|
mov r6, r0
|
|
mvn r5, #0x80000000
|
|
_0206F13C:
|
|
ldr r1, [r4, #0x668]
|
|
mov r7, r6
|
|
mov r2, r5
|
|
cmp r1, #0
|
|
beq _0206F184
|
|
_0206F150:
|
|
ldrsb r0, [r1, #4]
|
|
cmp r0, #1
|
|
ldreqb r0, [r1, #0x14]
|
|
cmpeq r0, sl
|
|
bne _0206F178
|
|
ldr r0, [r1, #0x30]
|
|
add r7, r7, #1
|
|
cmp r2, r0
|
|
movhi r2, r0
|
|
movhi r8, r1
|
|
_0206F178:
|
|
ldr r1, [r1, #0xa4]
|
|
cmp r1, #0
|
|
bne _0206F150
|
|
_0206F184:
|
|
cmp r7, sb
|
|
blt _0206F1A4
|
|
cmp r8, #0
|
|
beq _0206F1A4
|
|
mov r0, r8
|
|
mov r1, fp
|
|
mov r2, #1
|
|
bl DseSequence_Stop
|
|
_0206F1A4:
|
|
cmp r7, sb
|
|
bgt _0206F13C
|
|
mov r0, #0
|
|
b _0206F1EC
|
|
_0206F1B4:
|
|
ldr r1, _0206F204 ; =DRIVER_WORK
|
|
ldr r2, [r1, #0x668]
|
|
cmp r2, #0
|
|
beq _0206F1E4
|
|
_0206F1C4:
|
|
ldrsb r1, [r2, #4]
|
|
cmp r1, #1
|
|
ldreqb r1, [r2, #0x14]
|
|
ldr r2, [r2, #0xa4]
|
|
cmpeq r1, sl
|
|
addeq r0, r0, #1
|
|
cmp r2, #0
|
|
bne _0206F1C4
|
|
_0206F1E4:
|
|
cmp r0, sb
|
|
movlt r0, #0
|
|
_0206F1EC:
|
|
ldr r2, _0206F200 ; =0x04000208
|
|
ldrh r1, [r2]
|
|
ldr r1, [sp]
|
|
strh r1, [r2]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0206F200: .word 0x04000208
|
|
_0206F204: .word DRIVER_WORK
|
|
arm_func_end DseSe_CheckTooManyInstancesInGroup
|
|
|
|
arm_func_start sub_0206F208
|
|
sub_0206F208: ; 0x0206F208
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
ldr r2, _0206F2BC ; =0x04000208
|
|
mov r4, #0
|
|
ldrh r6, [r2]
|
|
mov r7, r0
|
|
cmp r1, #1
|
|
strh r4, [r2]
|
|
bne _0206F274
|
|
ldr r0, _0206F2C0 ; =DRIVER_WORK
|
|
ldr r5, [r0, #0x668]
|
|
cmp r5, #0
|
|
beq _0206F2A8
|
|
mov sb, r4
|
|
mov r8, #1
|
|
_0206F240:
|
|
ldrsb r0, [r5, #4]
|
|
cmp r0, #1
|
|
ldreqh r0, [r5, #0x2c]
|
|
cmpeq r0, r7
|
|
bne _0206F264
|
|
mov r0, r5
|
|
mov r1, sb
|
|
mov r2, r8
|
|
bl DseSequence_Stop
|
|
_0206F264:
|
|
ldr r5, [r5, #0xa4]
|
|
cmp r5, #0
|
|
bne _0206F240
|
|
b _0206F2A8
|
|
_0206F274:
|
|
ldr r0, _0206F2C0 ; =DRIVER_WORK
|
|
ldr r1, [r0, #0x668]
|
|
cmp r1, #0
|
|
beq _0206F2A8
|
|
_0206F284:
|
|
ldrsb r0, [r1, #4]
|
|
cmp r0, #1
|
|
ldreqh r0, [r1, #0x2c]
|
|
cmpeq r0, r7
|
|
moveq r4, #1
|
|
beq _0206F2A8
|
|
ldr r1, [r1, #0xa4]
|
|
cmp r1, #0
|
|
bne _0206F284
|
|
_0206F2A8:
|
|
ldr r2, _0206F2BC ; =0x04000208
|
|
mov r0, r4
|
|
ldrh r1, [r2]
|
|
strh r6, [r2]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_0206F2BC: .word 0x04000208
|
|
_0206F2C0: .word DRIVER_WORK
|
|
arm_func_end sub_0206F208
|
|
|
|
arm_func_start DseSe_GetBestSeqAllocation
|
|
DseSe_GetBestSeqAllocation: ; 0x0206F2C4
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _0206F338 ; =0x04000208
|
|
mov r3, #0
|
|
ldrh lr, [r2]
|
|
ldr r1, _0206F33C ; =DRIVER_WORK
|
|
sub ip, r3, #1
|
|
strh r3, [r2]
|
|
ldr r2, [r1, #0x668]
|
|
cmp r2, #0
|
|
beq _0206F324
|
|
_0206F2EC:
|
|
ldrsb r1, [r2, #4]
|
|
cmp r1, #0
|
|
moveq r3, r2
|
|
beq _0206F324
|
|
ldrb r1, [r2, #0x12]
|
|
cmp r1, r0
|
|
blo _0206F318
|
|
ldr r1, [r2, #0x30]
|
|
cmp ip, r1
|
|
movhi ip, r1
|
|
movhi r3, r2
|
|
_0206F318:
|
|
ldr r2, [r2, #0xa4]
|
|
cmp r2, #0
|
|
bne _0206F2EC
|
|
_0206F324:
|
|
ldr r2, _0206F338 ; =0x04000208
|
|
mov r0, r3
|
|
ldrh r1, [r2]
|
|
strh lr, [r2]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0206F338: .word 0x04000208
|
|
_0206F33C: .word DRIVER_WORK
|
|
arm_func_end DseSe_GetBestSeqAllocation
|
|
|
|
arm_func_start DseSe_GetById
|
|
DseSe_GetById: ; 0x0206F340
|
|
ldr r3, _0206F384 ; =0x04000208
|
|
ldr r1, _0206F388 ; =DRIVER_WORK
|
|
ldrh ip, [r3]
|
|
mov r2, #0
|
|
strh r2, [r3]
|
|
ldr r3, [r1, #0x66c]
|
|
b _0206F360
|
|
_0206F35C:
|
|
ldr r3, [r3, #8]
|
|
_0206F360:
|
|
cmp r3, #0
|
|
ldrneh r1, [r3, #6]
|
|
cmpne r1, r0
|
|
bne _0206F35C
|
|
ldr r2, _0206F384 ; =0x04000208
|
|
mov r0, r3
|
|
ldrh r1, [r2]
|
|
strh ip, [r2]
|
|
bx lr
|
|
.align 2, 0
|
|
_0206F384: .word 0x04000208
|
|
_0206F388: .word DRIVER_WORK
|
|
arm_func_end DseSe_GetById
|
|
|
|
arm_func_start DseSe_Stop
|
|
DseSe_Stop: ; 0x0206F38C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r8, r0
|
|
mvn r0, #0
|
|
mov r7, r1
|
|
mov r6, r2
|
|
cmp r8, r0
|
|
ldr r2, _0206F4D8 ; =0x04000208
|
|
mov r1, #0
|
|
beq _0206F478
|
|
cmp r7, #0
|
|
bne _0206F414
|
|
ldrh r4, [r2]
|
|
ldr r0, _0206F4DC ; =DRIVER_WORK
|
|
strh r1, [r2]
|
|
ldr r7, [r0, #0x668]
|
|
cmp r7, #0
|
|
beq _0206F404
|
|
mov r5, #1
|
|
_0206F3D4:
|
|
ldrsb r0, [r7, #4]
|
|
cmp r0, #1
|
|
ldreq r0, [r7, #0x28]
|
|
cmpeq r0, r8
|
|
bne _0206F3F8
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r5
|
|
bl DseSequence_Stop
|
|
_0206F3F8:
|
|
ldr r7, [r7, #0xa4]
|
|
cmp r7, #0
|
|
bne _0206F3D4
|
|
_0206F404:
|
|
ldr r1, _0206F4D8 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r4, [r1]
|
|
b _0206F4D0
|
|
_0206F414:
|
|
ldrh r4, [r2]
|
|
ldr r0, _0206F4DC ; =DRIVER_WORK
|
|
strh r1, [r2]
|
|
ldr r5, [r0, #0x668]
|
|
cmp r5, #0
|
|
beq _0206F468
|
|
mov sb, #1
|
|
_0206F430:
|
|
ldrsb r0, [r5, #4]
|
|
cmp r0, #1
|
|
ldreq r0, [r5, #0x28]
|
|
cmpeq r0, r8
|
|
ldreqh r0, [r5, #0x2c]
|
|
cmpeq r0, r7
|
|
bne _0206F45C
|
|
mov r0, r5
|
|
mov r1, r6
|
|
mov r2, sb
|
|
bl DseSequence_Stop
|
|
_0206F45C:
|
|
ldr r5, [r5, #0xa4]
|
|
cmp r5, #0
|
|
bne _0206F430
|
|
_0206F468:
|
|
ldr r1, _0206F4D8 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r4, [r1]
|
|
b _0206F4D0
|
|
_0206F478:
|
|
ldrh r4, [r2]
|
|
ldr r0, _0206F4DC ; =DRIVER_WORK
|
|
strh r1, [r2]
|
|
ldr r8, [r0, #0x668]
|
|
cmp r8, #0
|
|
beq _0206F4C4
|
|
mov r5, #1
|
|
_0206F494:
|
|
ldrsb r0, [r8, #4]
|
|
cmp r0, #1
|
|
ldreqh r0, [r8, #0x2c]
|
|
cmpeq r0, r7
|
|
bne _0206F4B8
|
|
mov r0, r8
|
|
mov r1, r6
|
|
mov r2, r5
|
|
bl DseSequence_Stop
|
|
_0206F4B8:
|
|
ldr r8, [r8, #0xa4]
|
|
cmp r8, #0
|
|
bne _0206F494
|
|
_0206F4C4:
|
|
ldr r1, _0206F4D8 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r4, [r1]
|
|
_0206F4D0:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_0206F4D8: .word 0x04000208
|
|
_0206F4DC: .word DRIVER_WORK
|
|
arm_func_end DseSe_Stop
|
|
|
|
arm_func_start DseSe_StopAll
|
|
DseSe_StopAll: ; 0x0206F4E0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
ldr r3, _0206F544 ; =0x04000208
|
|
mov r2, #0
|
|
ldrh r4, [r3]
|
|
ldr r1, _0206F548 ; =DRIVER_WORK
|
|
mov r5, r0
|
|
strh r2, [r3]
|
|
ldr r7, [r1, #0x668]
|
|
cmp r7, #0
|
|
beq _0206F534
|
|
mov r6, #1
|
|
_0206F50C:
|
|
ldrsb r0, [r7, #4]
|
|
cmp r0, #1
|
|
bne _0206F528
|
|
mov r0, r7
|
|
mov r1, r5
|
|
mov r2, r6
|
|
bl DseSequence_Stop
|
|
_0206F528:
|
|
ldr r7, [r7, #0xa4]
|
|
cmp r7, #0
|
|
bne _0206F50C
|
|
_0206F534:
|
|
ldr r1, _0206F544 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r4, [r1]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0206F544: .word 0x04000208
|
|
_0206F548: .word DRIVER_WORK
|
|
arm_func_end DseSe_StopAll
|
|
|
|
arm_func_start DseSe_StopSeq
|
|
DseSe_StopSeq: ; 0x0206F54C
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
ldr r3, _0206F5C0 ; =0x04000208
|
|
mov r2, #0
|
|
ldrh r5, [r3]
|
|
ldr r1, _0206F5C4 ; =DRIVER_WORK
|
|
mov r6, r0
|
|
strh r2, [r3]
|
|
ldr r4, [r1, #0x668]
|
|
cmp r4, #0
|
|
beq _0206F5B0
|
|
mov r8, r2
|
|
mov r7, #1
|
|
_0206F57C:
|
|
ldrsb r0, [r4, #4]
|
|
cmp r0, #1
|
|
ldreq r0, [r4, #0x28]
|
|
moveq r0, r0, lsl #0x10
|
|
cmpeq r6, r0, lsr #16
|
|
bne _0206F5A4
|
|
mov r0, r4
|
|
mov r1, r8
|
|
mov r2, r7
|
|
bl DseSequence_Stop
|
|
_0206F5A4:
|
|
ldr r4, [r4, #0xa4]
|
|
cmp r4, #0
|
|
bne _0206F57C
|
|
_0206F5B0:
|
|
ldr r1, _0206F5C0 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r5, [r1]
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_0206F5C0: .word 0x04000208
|
|
_0206F5C4: .word DRIVER_WORK
|
|
arm_func_end DseSe_StopSeq
|
|
|
|
arm_func_start sub_0206F5C8
|
|
sub_0206F5C8: ; 0x0206F5C8
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r7, r0
|
|
mvn r0, #0
|
|
mov r6, r1
|
|
mov r5, r2
|
|
cmp r7, r0
|
|
ldr r2, _0206F6F4 ; =0x04000208
|
|
mov r1, #0
|
|
beq _0206F69C
|
|
cmp r6, #0
|
|
bne _0206F648
|
|
ldrh r4, [r2]
|
|
ldr r0, _0206F6F8 ; =DRIVER_WORK
|
|
strh r1, [r2]
|
|
ldr r6, [r0, #0x668]
|
|
cmp r6, #0
|
|
beq _0206F638
|
|
_0206F60C:
|
|
ldrsb r0, [r6, #4]
|
|
cmp r0, #1
|
|
ldreq r0, [r6, #0x28]
|
|
cmpeq r0, r7
|
|
bne _0206F62C
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl DseSequence_SetFades
|
|
_0206F62C:
|
|
ldr r6, [r6, #0xa4]
|
|
cmp r6, #0
|
|
bne _0206F60C
|
|
_0206F638:
|
|
ldr r1, _0206F6F4 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r4, [r1]
|
|
b _0206F6EC
|
|
_0206F648:
|
|
ldrh r4, [r2]
|
|
ldr r0, _0206F6F8 ; =DRIVER_WORK
|
|
strh r1, [r2]
|
|
ldr r8, [r0, #0x668]
|
|
cmp r8, #0
|
|
beq _0206F68C
|
|
_0206F660:
|
|
ldr r0, [r8, #0x28]
|
|
cmp r0, r7
|
|
ldreqh r0, [r8, #0x2c]
|
|
cmpeq r0, r6
|
|
bne _0206F680
|
|
mov r0, r8
|
|
mov r1, r5
|
|
bl DseSequence_SetFades
|
|
_0206F680:
|
|
ldr r8, [r8, #0xa4]
|
|
cmp r8, #0
|
|
bne _0206F660
|
|
_0206F68C:
|
|
ldr r1, _0206F6F4 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r4, [r1]
|
|
b _0206F6EC
|
|
_0206F69C:
|
|
ldrh r4, [r2]
|
|
ldr r0, _0206F6F8 ; =DRIVER_WORK
|
|
strh r1, [r2]
|
|
ldr r7, [r0, #0x668]
|
|
cmp r7, #0
|
|
beq _0206F6E0
|
|
_0206F6B4:
|
|
ldrsb r0, [r7, #4]
|
|
cmp r0, #1
|
|
ldreqh r0, [r7, #0x2c]
|
|
cmpeq r0, r6
|
|
bne _0206F6D4
|
|
mov r0, r7
|
|
mov r1, r5
|
|
bl DseSequence_SetFades
|
|
_0206F6D4:
|
|
ldr r7, [r7, #0xa4]
|
|
cmp r7, #0
|
|
bne _0206F6B4
|
|
_0206F6E0:
|
|
ldr r1, _0206F6F4 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r4, [r1]
|
|
_0206F6EC:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_0206F6F4: .word 0x04000208
|
|
_0206F6F8: .word DRIVER_WORK
|
|
arm_func_end sub_0206F5C8
|
|
|
|
arm_func_start sub_0206F6FC
|
|
sub_0206F6FC: ; 0x0206F6FC
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
ldr r2, _0206F76C ; =0x04000208
|
|
ldr r1, _0206F770 ; =_022B9208
|
|
ldrh r5, [r2]
|
|
ldr r4, [r1, #0x1cc]
|
|
mov r1, #0
|
|
mov r6, r0
|
|
strh r1, [r2]
|
|
cmp r4, #0
|
|
beq _0206F758
|
|
mov r8, #1
|
|
mov r7, r8
|
|
_0206F72C:
|
|
ldrsb r0, [r4, #0xa]
|
|
cmp r0, #1
|
|
bne _0206F74C
|
|
mov r0, r4
|
|
mov r1, r8
|
|
mov r2, r6
|
|
bl sub_0206FAE8
|
|
strb r7, [r4, #0x13]
|
|
_0206F74C:
|
|
ldr r4, [r4, #0x500]
|
|
cmp r4, #0
|
|
bne _0206F72C
|
|
_0206F758:
|
|
ldr r2, _0206F76C ; =0x04000208
|
|
mov r0, #0
|
|
ldrh r1, [r2]
|
|
strh r5, [r2]
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_0206F76C: .word 0x04000208
|
|
_0206F770: .word _022B9208
|
|
arm_func_end sub_0206F6FC
|
|
|
|
arm_func_start sub_0206F774
|
|
sub_0206F774: ; 0x0206F774
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
ldr r1, _0206F7C4 ; =_022B9208
|
|
mov r6, r0
|
|
ldr r5, [r1, #0x1cc]
|
|
cmp r5, #0
|
|
beq _0206F7BC
|
|
mov r4, #0
|
|
_0206F790:
|
|
ldrsb r0, [r5, #0x13]
|
|
cmp r0, #1
|
|
bne _0206F7B0
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, r6
|
|
strb r4, [r5, #0x13]
|
|
bl sub_0206FAE8
|
|
_0206F7B0:
|
|
ldr r5, [r5, #0x500]
|
|
cmp r5, #0
|
|
bne _0206F790
|
|
_0206F7BC:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0206F7C4: .word _022B9208
|
|
arm_func_end sub_0206F774
|
|
|
|
arm_func_start sub_0206F7C8
|
|
sub_0206F7C8: ; 0x0206F7C8
|
|
stmdb sp!, {r3, lr}
|
|
ldr r1, _0206F804 ; =_022B9208
|
|
ldrsb r1, [r1, #4]
|
|
cmp r1, #0
|
|
mvneq r0, #0x59
|
|
ldmeqia sp!, {r3, pc}
|
|
bl sub_0206FD2C
|
|
cmp r0, #0
|
|
mvneq r0, #0xb0
|
|
ldmeqia sp!, {r3, pc}
|
|
ldrsb r1, [r0, #4]
|
|
cmp r1, #0
|
|
moveq r0, #0
|
|
ldrne r0, [r0]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0206F804: .word _022B9208
|
|
arm_func_end sub_0206F7C8
|
|
|
|
arm_func_start sub_0206F808
|
|
sub_0206F808: ; 0x0206F808
|
|
stmdb sp!, {r4, lr}
|
|
ldr r0, _0206F83C ; =_022B9208
|
|
ldr r4, [r0, #0x1cc]
|
|
cmp r4, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
_0206F81C:
|
|
ldr r0, [r4]
|
|
cmp r0, #0
|
|
ble _0206F82C
|
|
bl sub_0206F840
|
|
_0206F82C:
|
|
ldr r4, [r4, #0x500]
|
|
cmp r4, #0
|
|
bne _0206F81C
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0206F83C: .word _022B9208
|
|
arm_func_end sub_0206F808
|
|
|
|
arm_func_start sub_0206F840
|
|
sub_0206F840: ; 0x0206F840
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
ldr r1, _0206F96C ; =_022B9208
|
|
mov r5, r0
|
|
ldrsb r1, [r1, #4]
|
|
cmp r1, #0
|
|
mvneq r0, #0x59
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
bl sub_0206FD2C
|
|
movs r4, r0
|
|
bne _0206F880
|
|
mov r1, r5
|
|
mvn r0, #0x3f
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x3f
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_0206F880:
|
|
mov r1, #0
|
|
strb r1, [r4, #0x2b]
|
|
ldr r0, _0206F970 ; =0x04000208
|
|
strb r1, [r4, #9]
|
|
ldrh r3, [r0]
|
|
strh r1, [r0]
|
|
ldrsb r2, [r4, #6]
|
|
ldr r1, _0206F970 ; =0x04000208
|
|
cmp r2, #0
|
|
moveq r0, #1
|
|
streqb r0, [r4, #6]
|
|
ldrh r0, [r1]
|
|
cmp r2, #0
|
|
strh r3, [r1]
|
|
bne _0206F964
|
|
mov r1, #0
|
|
strb r1, [r4, #0x14]
|
|
ldrsb r0, [r4, #0xa]
|
|
cmp r0, #1
|
|
bne _0206F904
|
|
mov r0, r5
|
|
bl sub_0206F9EC
|
|
mov r0, r5
|
|
bl sub_0206F974
|
|
cmp r0, #0
|
|
ble _0206F904
|
|
mov r6, #4
|
|
_0206F8EC:
|
|
mov r0, r6
|
|
bl sub_02079B14
|
|
mov r0, r5
|
|
bl sub_0206F974
|
|
cmp r0, #0
|
|
bgt _0206F8EC
|
|
_0206F904:
|
|
ldrsb r0, [r4, #0x12]
|
|
cmp r0, #1
|
|
bne _0206F918
|
|
mov r0, r4
|
|
bl sub_0207009C
|
|
_0206F918:
|
|
mov r1, #1
|
|
strb r1, [r4, #5]
|
|
strb r1, [r4, #0x10]
|
|
mov r0, #0
|
|
strb r0, [r4, #0x13]
|
|
ldrb r0, [r4, #0x1a]
|
|
cmp r0, #2
|
|
mov r0, r5
|
|
streqb r1, [r4, #7]
|
|
bl sub_0206F7C8
|
|
cmp r0, #0
|
|
blt _0206F964
|
|
mov r4, #4
|
|
_0206F94C:
|
|
mov r0, r4
|
|
bl sub_02079B14
|
|
mov r0, r5
|
|
bl sub_0206F7C8
|
|
cmp r0, #0
|
|
bge _0206F94C
|
|
_0206F964:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0206F96C: .word _022B9208
|
|
_0206F970: .word 0x04000208
|
|
arm_func_end sub_0206F840
|
|
|
|
arm_func_start sub_0206F974
|
|
sub_0206F974: ; 0x0206F974
|
|
stmdb sp!, {r3, lr}
|
|
ldr r1, _0206F9A0 ; =_022B9208
|
|
ldrsb r1, [r1, #4]
|
|
cmp r1, #0
|
|
mvneq r0, #0x59
|
|
ldmeqia sp!, {r3, pc}
|
|
bl sub_0206FD2C
|
|
cmp r0, #0
|
|
mvneq r0, #0x3f
|
|
ldrnesb r0, [r0, #0xa]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0206F9A0: .word _022B9208
|
|
arm_func_end sub_0206F974
|
|
|
|
arm_func_start sub_0206F9A4
|
|
sub_0206F9A4: ; 0x0206F9A4
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r1, _0206F9E8 ; =_022B9208
|
|
mov r5, r0
|
|
ldr r4, [r1, #0x1cc]
|
|
cmp r4, #0
|
|
beq _0206F9E0
|
|
_0206F9BC:
|
|
ldrsb r0, [r4, #0xa]
|
|
cmp r0, #1
|
|
bne _0206F9D4
|
|
ldr r0, [r4]
|
|
mov r1, r5
|
|
bl sub_0206F9EC
|
|
_0206F9D4:
|
|
ldr r4, [r4, #0x500]
|
|
cmp r4, #0
|
|
bne _0206F9BC
|
|
_0206F9E0:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0206F9E8: .word _022B9208
|
|
arm_func_end sub_0206F9A4
|
|
|
|
arm_func_start sub_0206F9EC
|
|
sub_0206F9EC: ; 0x0206F9EC
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
ldr r2, _0206FAE0 ; =_022B9208
|
|
mov r5, r0
|
|
ldrsb r2, [r2, #4]
|
|
mov r6, r1
|
|
cmp r2, #0
|
|
mvneq r0, #0x59
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
bl sub_0206FD2C
|
|
movs r4, r0
|
|
bne _0206FA30
|
|
mov r1, r5
|
|
mvn r0, #0x3f
|
|
mov r2, #0
|
|
bl Dse_SetError
|
|
mvn r0, #0x3f
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_0206FA30:
|
|
mov r5, #0
|
|
strb r5, [r4, #0x2a]
|
|
cmp r6, #0
|
|
beq _0206FA60
|
|
mov r0, #0x3e8
|
|
mul r0, r6, r0
|
|
ldr r1, _0206FAE4 ; =DRIVER_WORK
|
|
ldrsh r1, [r1, #0x28]
|
|
bl _u32_div_f
|
|
mov r0, r0, lsl #0x10
|
|
movs r5, r0, lsr #0x10
|
|
moveq r5, #1
|
|
_0206FA60:
|
|
cmp r5, #0
|
|
mov r1, #0
|
|
bne _0206FAA4
|
|
strb r1, [r4, #0x14]
|
|
strb r1, [r4, #0xa]
|
|
mov r0, r4
|
|
strb r1, [r4, #0xd]
|
|
bl sub_0207009C
|
|
mov r2, #0
|
|
str r2, [r4, #0x2c]
|
|
strh r2, [r4, #0x38]
|
|
ldr r0, [r4]
|
|
ldr r3, [r4, #0x1fc]
|
|
ldr r4, [r4, #0x1f8]
|
|
mov r1, #9
|
|
blx r4
|
|
b _0206FAD8
|
|
_0206FAA4:
|
|
mov r0, #1
|
|
strb r0, [r4, #0x14]
|
|
str r1, [r4, #0x34]
|
|
streq r1, [r4, #0x2c]
|
|
beq _0206FAD4
|
|
ldr r0, [r4, #0x2c]
|
|
rsbs r0, r0, #0
|
|
moveq r5, r1
|
|
beq _0206FAD4
|
|
mov r1, r5
|
|
bl _s32_div_f
|
|
str r0, [r4, #0x30]
|
|
_0206FAD4:
|
|
strh r5, [r4, #0x38]
|
|
_0206FAD8:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0206FAE0: .word _022B9208
|
|
_0206FAE4: .word DRIVER_WORK
|
|
arm_func_end sub_0206F9EC
|
|
|
|
arm_func_start sub_0206FAE8
|
|
sub_0206FAE8: ; 0x0206FAE8
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r3, #0x3e8
|
|
mov r4, r0
|
|
mul r0, r2, r3
|
|
ldr r2, _0206FBC4 ; =DRIVER_WORK
|
|
mov r5, r1
|
|
ldrsh r1, [r2, #0x28]
|
|
bl _s32_div_f
|
|
ldrsb r1, [r4, #0x13]
|
|
cmp r1, #1
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r5, #1
|
|
bne _0206FB9C
|
|
cmp r0, #0
|
|
bne _0206FB58
|
|
ldrsb r0, [r4, #8]
|
|
cmp r0, #1
|
|
bne _0206FBBC
|
|
mov r0, r4
|
|
bl sub_0207009C
|
|
ldr r0, [r4]
|
|
ldr r3, [r4, #0x1fc]
|
|
ldr r4, [r4, #0x1f8]
|
|
mov r1, #9
|
|
mov r2, #0
|
|
blx r4
|
|
b _0206FBBC
|
|
_0206FB58:
|
|
mov r1, #1
|
|
strb r1, [r4, #0x14]
|
|
mov r1, #0
|
|
mov r0, r0, lsl #0x10
|
|
str r1, [r4, #0x34]
|
|
movs r5, r0, lsr #0x10
|
|
streq r1, [r4, #0x2c]
|
|
beq _0206FB94
|
|
ldr r0, [r4, #0x2c]
|
|
rsbs r0, r0, #0
|
|
moveq r5, r1
|
|
beq _0206FB94
|
|
mov r1, r5
|
|
bl _s32_div_f
|
|
str r0, [r4, #0x30]
|
|
_0206FB94:
|
|
strh r5, [r4, #0x38]
|
|
b _0206FBBC
|
|
_0206FB9C:
|
|
mov r1, #1
|
|
strb r1, [r4, #0xa]
|
|
ldrsb r0, [r4, #8]
|
|
cmp r0, #1
|
|
bne _0206FBBC
|
|
mov r0, r4
|
|
strb r1, [r4, #0x15]
|
|
bl sub_0206FE5C
|
|
_0206FBBC:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0206FBC4: .word DRIVER_WORK
|
|
arm_func_end sub_0206FAE8
|
|
|
|
arm_func_start sub_0206FBC8
|
|
sub_0206FBC8: ; 0x0206FBC8
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
ldr r0, _0206FC80 ; =_022B9208
|
|
ldr r4, [r0, #0x1cc]
|
|
cmp r4, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
mov r7, #0
|
|
mov r6, #9
|
|
mov r5, r7
|
|
_0206FBE8:
|
|
ldrsb r0, [r4, #0xa]
|
|
cmp r0, #0
|
|
ldrnesb r0, [r4, #8]
|
|
cmpne r0, #0
|
|
ldrneh r0, [r4, #0x38]
|
|
cmpne r0, #0
|
|
beq _0206FC70
|
|
sub r0, r0, #1
|
|
strh r0, [r4, #0x38]
|
|
ldrh r0, [r4, #0x38]
|
|
cmp r0, #0
|
|
ldreq r0, [r4, #0x34]
|
|
beq _0206FC28
|
|
ldr r1, [r4, #0x2c]
|
|
ldr r0, [r4, #0x30]
|
|
add r0, r1, r0
|
|
_0206FC28:
|
|
str r0, [r4, #0x2c]
|
|
ldrh r8, [r4, #0x38]
|
|
mov r0, r4
|
|
bl sub_0206FC84
|
|
cmp r8, #0
|
|
ldreqsb r0, [r4, #0x14]
|
|
cmpeq r0, #1
|
|
bne _0206FC70
|
|
strb r7, [r4, #0xa]
|
|
mov r0, r4
|
|
strb r7, [r4, #0x14]
|
|
bl sub_0207009C
|
|
ldr r0, [r4]
|
|
ldr r3, [r4, #0x1fc]
|
|
ldr ip, [r4, #0x1f8]
|
|
mov r1, r6
|
|
mov r2, r5
|
|
blx ip
|
|
_0206FC70:
|
|
ldr r4, [r4, #0x500]
|
|
cmp r4, #0
|
|
bne _0206FBE8
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_0206FC80: .word _022B9208
|
|
arm_func_end sub_0206FBC8
|
|
|
|
arm_func_start sub_0206FC84
|
|
sub_0206FC84: ; 0x0206FC84
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
ldr r1, [r0, #0x2c]
|
|
ldrb r2, [r0, #0xbc]
|
|
mov r1, r1, asr #0x10
|
|
ldr r4, _0206FD20 ; =0x04000208
|
|
mul r1, r2, r1
|
|
ldrb r5, [r0, #0x22]
|
|
ldr r3, _0206FD24 ; =0x82061029
|
|
ldrh r2, [r4]
|
|
mul ip, r5, r1
|
|
smull r1, lr, r3, ip
|
|
mov r1, #0
|
|
strh r1, [r4]
|
|
ldrb r4, [r0, #0x1f]
|
|
add lr, ip, lr
|
|
mov r3, ip, lsr #0x1f
|
|
add lr, r3, lr, asr #13
|
|
mul r5, lr, lr
|
|
ldr lr, _0206FD28 ; =0x81020409
|
|
mov r3, r5, lsr #0x1f
|
|
smull ip, r6, lr, r5
|
|
add r6, r5, r6
|
|
cmp r4, #0
|
|
add r6, r3, r6, asr #6
|
|
ble _0206FD10
|
|
_0206FCE8:
|
|
add r3, r0, r1, lsl #2
|
|
ldr ip, [r3, #0x1d8]
|
|
add r1, r1, #1
|
|
str r6, [ip, #0x140]
|
|
ldrh r3, [ip, #6]
|
|
orr r3, r3, #0x20
|
|
strh r3, [ip, #6]
|
|
ldrb r3, [r0, #0x1f]
|
|
cmp r1, r3
|
|
blt _0206FCE8
|
|
_0206FD10:
|
|
ldr r1, _0206FD20 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r2, [r1]
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0206FD20: .word 0x04000208
|
|
_0206FD24: .word 0x82061029
|
|
_0206FD28: .word 0x81020409
|
|
arm_func_end sub_0206FC84
|
|
|
|
arm_func_start sub_0206FD2C
|
|
sub_0206FD2C: ; 0x0206FD2C
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
bxeq lr
|
|
ldr r3, _0206FD80 ; =0x04000208
|
|
mov r2, #0
|
|
ldrh ip, [r3]
|
|
ldr r1, _0206FD84 ; =_022B9208
|
|
strh r2, [r3]
|
|
ldr r3, [r1, #0x1cc]
|
|
cmp r3, #0
|
|
beq _0206FD6C
|
|
_0206FD58:
|
|
ldr r1, [r3]
|
|
cmp r1, r0
|
|
ldrne r3, [r3, #0x500]
|
|
cmpne r3, #0
|
|
bne _0206FD58
|
|
_0206FD6C:
|
|
ldr r2, _0206FD80 ; =0x04000208
|
|
mov r0, r3
|
|
ldrh r1, [r2]
|
|
strh ip, [r2]
|
|
bx lr
|
|
.align 2, 0
|
|
_0206FD80: .word 0x04000208
|
|
_0206FD84: .word _022B9208
|
|
arm_func_end sub_0206FD2C
|
|
|
|
arm_func_start sub_0206FD88
|
|
sub_0206FD88: ; 0x0206FD88
|
|
stmdb sp!, {r4, lr}
|
|
ldr r1, _0206FDAC ; =_022B9208
|
|
mov r4, r0
|
|
ldr r0, [r1, #0x1c8]
|
|
ldr r2, [r1, #0x1c4]
|
|
sub r1, r4, #0x10
|
|
blx r2
|
|
mov r0, r4
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0206FDAC: .word _022B9208
|
|
arm_func_end sub_0206FD88
|
|
|
|
arm_func_start sub_0206FDB0
|
|
sub_0206FDB0: ; 0x0206FDB0
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _0206FDD8 ; =_022B9208
|
|
ldrsb r1, [r0, #0x2a]
|
|
cmp r1, #1
|
|
ldrnesb r0, [r0, #0xf5]
|
|
cmpne r0, #0
|
|
ldmeqia sp!, {r3, pc}
|
|
ldr r0, _0206FDDC ; =_022B9234
|
|
bl sub_02079940
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0206FDD8: .word _022B9208
|
|
_0206FDDC: .word _022B9234
|
|
arm_func_end sub_0206FDB0
|
|
|
|
arm_func_start sub_0206FDE0
|
|
sub_0206FDE0: ; 0x0206FDE0
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, _0206FE4C ; =DRIVER_WORK
|
|
ldr r1, _0206FE50 ; =_022B9208
|
|
ldrb ip, [r2, #0x738]
|
|
mov r3, #0
|
|
ldr r0, _0206FE54 ; =_022B9234
|
|
bic ip, ip, #6
|
|
strb ip, [r2, #0x738]
|
|
ldrb ip, [r2, #0x739]
|
|
strb r3, [r1, #0x29]
|
|
mov r3, #1
|
|
orr ip, ip, #6
|
|
strb ip, [r2, #0x739]
|
|
strb r3, [r1, #0x2a]
|
|
bl sub_02079940
|
|
ldr r0, _0206FE54 ; =_022B9234
|
|
bl sub_02079800
|
|
ldr r1, _0206FE50 ; =_022B9208
|
|
mov r2, #0
|
|
ldr r0, _0206FE58 ; =_022B9300
|
|
strb r2, [r1, #0xf5]
|
|
mov r2, #1
|
|
strb r2, [r1, #0xf6]
|
|
bl sub_02079940
|
|
ldr r0, _0206FE58 ; =_022B9300
|
|
bl sub_02079800
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0206FE4C: .word DRIVER_WORK
|
|
_0206FE50: .word _022B9208
|
|
_0206FE54: .word _022B9234
|
|
_0206FE58: .word _022B9300
|
|
arm_func_end sub_0206FDE0
|
|
|
|
arm_func_start sub_0206FE5C
|
|
sub_0206FE5C: ; 0x0206FE5C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #8
|
|
mov sl, r0
|
|
ldrsb r0, [sl, #0x12]
|
|
cmp r0, #1
|
|
addeq sp, sp, #8
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldrsb r0, [sl, #0x15]
|
|
add r5, sl, #0x1b8
|
|
cmp r0, #1
|
|
bne _0206FEB0
|
|
ldr r1, [r5, #0xc]
|
|
ldr r2, [r5]
|
|
mov r0, #0
|
|
bl ArrayFill32Fast
|
|
ldr r0, [r5, #0xc]
|
|
ldr r1, [r5]
|
|
bl sub_0207A2DC
|
|
mov r0, #0
|
|
strb r0, [sl, #0x15]
|
|
_0206FEB0:
|
|
mov r0, #0
|
|
strb r0, [r5, #0x2c]
|
|
ldr r1, [sl, #0x3c]
|
|
ldr r0, _02070080 ; =0x00FFB0FF
|
|
bl _u32_div_f
|
|
mov r4, r0
|
|
ldr r1, [r5, #8]
|
|
ldr r0, _02070084 ; =_022B9208
|
|
mul r1, r4, r1
|
|
mov r1, r1, lsr #6
|
|
str r0, [sp]
|
|
ldr r3, _02070088 ; =sub_0206FDB0
|
|
mov r2, r1
|
|
mov r0, #2
|
|
bl sub_0207C984
|
|
ldr r0, [sl, #0x2c]
|
|
ldrb r1, [sl, #0xbc]
|
|
mov r0, r0, asr #0x10
|
|
ldrb r2, [sl, #0x22]
|
|
mul r0, r1, r0
|
|
mul r6, r2, r0
|
|
ldr r2, _0207008C ; =0x82061029
|
|
ldr r0, _02070090 ; =0x04000208
|
|
smull r1, r7, r2, r6
|
|
ldr r3, [r5, #4]
|
|
add r7, r6, r7
|
|
mov r1, r6, lsr #0x1f
|
|
add r7, r1, r7, asr #13
|
|
ldrh r1, [r0]
|
|
mul r6, r7, r7
|
|
ldr r2, _02070094 ; =0x81020409
|
|
str r1, [sp, #4]
|
|
smull r1, sb, r2, r6
|
|
add sb, r6, sb
|
|
mov r1, r6, lsr #0x1f
|
|
mov r6, #0
|
|
strh r6, [r0]
|
|
ldrb r0, [sl, #0x1f]
|
|
mov r8, r3, lsr #2
|
|
add sb, r1, sb, asr #6
|
|
cmp r0, #0
|
|
ble _0207000C
|
|
mvn fp, #0xc0000000
|
|
_0206FF5C:
|
|
add r0, r5, r6, lsl #2
|
|
ldr r7, [r0, #0x20]
|
|
mov r0, #0x1000
|
|
strh r0, [r7, #4]
|
|
mov r0, #1
|
|
strb r0, [r7, #0xc]
|
|
strb r0, [r7, #0x1f]
|
|
ldrb r0, [sl, #0x1e]
|
|
cmp r0, #1
|
|
moveq r0, #0
|
|
movne r0, r6
|
|
add r0, r5, r0, lsl #2
|
|
ldr r0, [r0, #0x10]
|
|
str r0, [r7, #0x30]
|
|
mov r0, #0
|
|
str r0, [r7, #0x34]
|
|
str r8, [r7, #0x38]
|
|
mov r0, #1
|
|
strb r0, [r7, #0x21]
|
|
str r4, [r7, #0x13c]
|
|
str sb, [r7, #0x140]
|
|
ldrb r0, [sl, #0x1e]
|
|
cmp r0, #1
|
|
ldrne r0, _02070098 ; =DRIVER_WORK
|
|
ldrneb r0, [r0, #0x39]
|
|
cmpne r0, #1
|
|
moveq r0, #0x40
|
|
streq r0, [r7, #0x144]
|
|
beq _0206FFE0
|
|
tst r6, #1
|
|
moveq r0, #0
|
|
movne r0, #0x7f
|
|
str r0, [r7, #0x144]
|
|
_0206FFE0:
|
|
add r0, r7, #0x3c
|
|
mov r1, fp
|
|
bl SoundEnvelope_ForceVolume
|
|
add r0, r7, #0x5c
|
|
bl SoundLfoBank_Reset
|
|
mov r0, #1
|
|
strh r0, [r7, #6]
|
|
ldrb r0, [sl, #0x1f]
|
|
add r6, r6, #1
|
|
cmp r6, r0
|
|
blt _0206FF5C
|
|
_0207000C:
|
|
ldr r1, _02070098 ; =DRIVER_WORK
|
|
ldr r3, _02070090 ; =0x04000208
|
|
ldrb r4, [r1, #0x739]
|
|
mov r2, #1
|
|
mov r0, #0
|
|
bic r4, r4, #4
|
|
strb r4, [r1, #0x739]
|
|
ldrb r4, [r1, #0x738]
|
|
orr r4, r4, #4
|
|
strb r4, [r1, #0x738]
|
|
ldrh r1, [r3]
|
|
ldr r1, [sp, #4]
|
|
strh r1, [r3]
|
|
strb r2, [sl, #0x12]
|
|
ldrb r1, [sl, #0x1e]
|
|
cmp r1, #0
|
|
ble _02070074
|
|
mov r2, r0
|
|
_02070054:
|
|
add r1, sl, r0, lsl #2
|
|
add r1, r1, #0x200
|
|
strh r2, [r1, #0x10]
|
|
strh r2, [r1, #0x12]
|
|
ldrb r1, [sl, #0x1e]
|
|
add r0, r0, #1
|
|
cmp r0, r1
|
|
blt _02070054
|
|
_02070074:
|
|
mov r0, #0
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_02070080: .word 0x00FFB0FF
|
|
_02070084: .word _022B9208
|
|
_02070088: .word sub_0206FDB0
|
|
_0207008C: .word 0x82061029
|
|
_02070090: .word 0x04000208
|
|
_02070094: .word 0x81020409
|
|
_02070098: .word DRIVER_WORK
|
|
arm_func_end sub_0206FE5C
|
|
|
|
arm_func_start sub_0207009C
|
|
sub_0207009C: ; 0x0207009C
|
|
ldr r3, _0207011C ; =0x04000208
|
|
mov ip, #0
|
|
ldrh r1, [r3]
|
|
strh ip, [r3]
|
|
ldrsb r2, [r0, #0x12]
|
|
cmp r2, #0
|
|
bne _020700C8
|
|
ldrh r0, [r3]
|
|
mov r0, ip
|
|
strh r1, [r3]
|
|
bx lr
|
|
_020700C8:
|
|
strb ip, [r0, #0x12]
|
|
ldrb r2, [r0, #0x1f]
|
|
cmp r2, #0
|
|
ble _020700F8
|
|
mov r3, #2
|
|
_020700DC:
|
|
add r2, r0, ip, lsl #2
|
|
ldr r2, [r2, #0x1d8]
|
|
add ip, ip, #1
|
|
strh r3, [r2, #6]
|
|
ldrb r2, [r0, #0x1f]
|
|
cmp ip, r2
|
|
blt _020700DC
|
|
_020700F8:
|
|
ldr r2, _02070120 ; =DRIVER_WORK
|
|
ldr r3, _0207011C ; =0x04000208
|
|
ldrb ip, [r2, #0x739]
|
|
mov r0, #0
|
|
orr ip, ip, #4
|
|
strb ip, [r2, #0x739]
|
|
ldrh r2, [r3]
|
|
strh r1, [r3]
|
|
bx lr
|
|
.align 2, 0
|
|
_0207011C: .word 0x04000208
|
|
_02070120: .word DRIVER_WORK
|
|
arm_func_end sub_0207009C
|
|
|
|
arm_func_start sub_02070124
|
|
sub_02070124: ; 0x02070124
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _02070144 ; =_022B7A30
|
|
mov r1, #0
|
|
strh r1, [r0, #0xe]
|
|
strh r1, [r0, #0x10]
|
|
bl sub_020701F8
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02070144: .word _022B7A30
|
|
arm_func_end sub_02070124
|
|
|
|
arm_func_start sub_02070148
|
|
sub_02070148: ; 0x02070148
|
|
stmdb sp!, {r3, lr}
|
|
bl sub_0207028C
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end sub_02070148
|
|
|
|
arm_func_start sub_02070158
|
|
sub_02070158: ; 0x02070158
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _02070184 ; =_022B7A30
|
|
ldrh r0, [r0, #0xe]
|
|
cmp r0, #0
|
|
beq _0207017C
|
|
mov r0, #0
|
|
mov r1, r0
|
|
mov r2, r0
|
|
bl sub_020702F8
|
|
_0207017C:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02070184: .word _022B7A30
|
|
arm_func_end sub_02070158
|
|
|
|
arm_func_start sub_02070188
|
|
sub_02070188: ; 0x02070188
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _020701A8 ; =_022B9484
|
|
ldrsb r0, [r0, #0x24]
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, pc}
|
|
ldr r0, _020701AC ; =_022B9484
|
|
bl sub_020708F4
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_020701A8: .word _022B9484
|
|
_020701AC: .word _022B9484
|
|
arm_func_end sub_02070188
|
|
|
|
arm_func_start sub_020701B0
|
|
sub_020701B0: ; 0x020701B0
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _020701F0 ; =_022B9484
|
|
ldrsb r0, [r0, #0x24]
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, pc}
|
|
ldr r0, _020701F4 ; =_022B9484
|
|
mov r1, #0
|
|
mov r2, #1
|
|
bl FlushChannels
|
|
ldr r0, _020701F4 ; =_022B9484
|
|
mov r1, #1
|
|
mov r2, #3
|
|
bl FlushChannels
|
|
ldr r0, _020701F4 ; =_022B9484
|
|
bl sub_020706E8
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_020701F0: .word _022B9484
|
|
_020701F4: .word _022B9484
|
|
arm_func_end sub_020701B0
|
|
|
|
arm_func_start sub_020701F8
|
|
sub_020701F8: ; 0x020701F8
|
|
stmdb sp!, {r3, lr}
|
|
sub sp, sp, #8
|
|
ldr r3, _02070278 ; =_022B9484
|
|
mov ip, #0
|
|
str ip, [r3]
|
|
str ip, [r3, #8]
|
|
strb ip, [r3, #0x24]
|
|
strb ip, [r3, #0x25]
|
|
ldr r2, _0207027C ; =0x78667473
|
|
mov r0, #0x400
|
|
mov r1, #0x10
|
|
strb ip, [r3, #0x26]
|
|
bl DseMem_AllocateThreadStack
|
|
ldr r2, _02070278 ; =_022B9484
|
|
mov r1, #0x400
|
|
str r0, [r2, #0x34]
|
|
ldr r0, _02070280 ; =_022B8330
|
|
str r1, [sp]
|
|
ldrb r3, [r0, #0xd10]
|
|
ldr r0, _02070284 ; =_022B94BC
|
|
ldr r1, _02070288 ; =sub_020709A0
|
|
add r3, r3, #1
|
|
str r3, [sp, #4]
|
|
ldr r3, [r2, #0x34]
|
|
mov r2, #0
|
|
add r3, r3, #0x400
|
|
bl StartThread
|
|
ldr r0, _02070284 ; =_022B94BC
|
|
bl sub_02079940
|
|
mov r0, #0
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02070278: .word _022B9484
|
|
_0207027C: .word 0x78667473
|
|
_02070280: .word _022B8330
|
|
_02070284: .word _022B94BC
|
|
_02070288: .word sub_020709A0
|
|
arm_func_end sub_020701F8
|
|
|
|
arm_func_start sub_0207028C
|
|
sub_0207028C: ; 0x0207028C
|
|
stmdb sp!, {r4, lr}
|
|
mov r0, #0
|
|
mov r1, r0
|
|
mov r2, r0
|
|
bl sub_020702F8
|
|
ldr r0, _020702EC ; =_022B9484
|
|
mov r1, #1
|
|
ldr r2, _020702F0 ; =0x04000208
|
|
strb r1, [r0, #0x26]
|
|
ldrh r4, [r2]
|
|
mov r1, #0
|
|
ldr r0, _020702F4 ; =_022B94BC
|
|
strh r1, [r2]
|
|
bl sub_02079940
|
|
ldr r2, _020702F0 ; =0x04000208
|
|
ldr r0, _020702F4 ; =_022B94BC
|
|
ldrh r1, [r2]
|
|
strh r4, [r2]
|
|
bl sub_02079800
|
|
ldr r0, _020702EC ; =_022B9484
|
|
ldr r0, [r0, #0x34]
|
|
bl DseMem_Free
|
|
mov r0, #0
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_020702EC: .word _022B9484
|
|
_020702F0: .word 0x04000208
|
|
_020702F4: .word _022B94BC
|
|
arm_func_end sub_0207028C
|
|
|
|
arm_func_start sub_020702F8
|
|
sub_020702F8: ; 0x020702F8
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
ldr r3, _02070648 ; =0x0000FFFF
|
|
mov r8, r1
|
|
cmp r8, r3
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
cmp r8, #0
|
|
ldreq r1, _0207064C ; =_022B9484
|
|
ldreqh r1, [r1, #0x1c]
|
|
cmpeq r1, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
cmp r8, #0
|
|
beq _02070370
|
|
cmp r0, #1
|
|
blo _02070350
|
|
mov r1, #0
|
|
mov r2, r1
|
|
mvn r0, #0x17
|
|
bl Dse_SetError
|
|
mvn r0, #0x17
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_02070350:
|
|
tst r8, #0xff00
|
|
bne _02070370
|
|
mov r1, #0
|
|
mov r2, r1
|
|
mvn r0, #0x17
|
|
bl Dse_SetError
|
|
mvn r0, #0x17
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_02070370:
|
|
cmp r2, #0
|
|
moveq r7, #0
|
|
moveq r6, r7
|
|
moveq r5, r7
|
|
beq _02070390
|
|
ldrb r5, [r2]
|
|
ldrb r6, [r2, #1]
|
|
ldrb r7, [r2, #2]
|
|
_02070390:
|
|
mov r1, #0xc
|
|
mul r1, r0, r1
|
|
ldr r2, _02070650 ; =_022B7A3E
|
|
ldr r0, _02070654 ; =_022B9484
|
|
strh r8, [r2, r1]
|
|
add r1, r2, r1
|
|
strh r5, [r1, #2]
|
|
strh r6, [r1, #8]
|
|
strh r7, [r1, #0xa]
|
|
bl sub_020708F4
|
|
ldr r0, _0207064C ; =_022B9484
|
|
mov r1, #0
|
|
strb r1, [r0, #0x24]
|
|
ldr r0, [r0]
|
|
cmp r0, #0
|
|
beq _020703E0
|
|
bl DseMem_Free
|
|
ldr r0, _0207064C ; =_022B9484
|
|
mov r1, #0
|
|
str r1, [r0]
|
|
_020703E0:
|
|
ldr r0, _0207064C ; =_022B9484
|
|
ldr r0, [r0, #8]
|
|
cmp r0, #0
|
|
beq _02070400
|
|
bl DseMem_Free
|
|
ldr r0, _0207064C ; =_022B9484
|
|
mov r1, #0
|
|
str r1, [r0, #8]
|
|
_02070400:
|
|
cmp r8, #0
|
|
bgt _02070410
|
|
beq _0207051C
|
|
b _02070514
|
|
_02070410:
|
|
sub r0, r8, #0x300
|
|
cmp r0, #5
|
|
addls pc, pc, r0, lsl #2
|
|
b _02070514
|
|
_02070420: ; jump table
|
|
b _02070438 ; case 0
|
|
b _02070458 ; case 1
|
|
b _02070480 ; case 2
|
|
b _020704A8 ; case 3
|
|
b _020704C4 ; case 4
|
|
b _020704EC ; case 5
|
|
_02070438:
|
|
ldr r0, _0207064C ; =_022B9484
|
|
ldr r1, _02070658 ; =_02070A44
|
|
strb r5, [r0, #0x1e]
|
|
cmp r6, #0
|
|
moveq r8, #0
|
|
str r1, [r0, #0x30]
|
|
mov r4, #0
|
|
b _0207051C
|
|
_02070458:
|
|
ldr r0, _0207064C ; =_022B9484
|
|
mov r1, #0x7f
|
|
strb r1, [r0, #0x1e]
|
|
ldr r1, _0207065C ; =sub_02070A9C
|
|
strb r5, [r0, #0x21]
|
|
cmp r6, #0
|
|
moveq r8, #0
|
|
str r1, [r0, #0x30]
|
|
mov r4, #1
|
|
b _0207051C
|
|
_02070480:
|
|
ldr r0, _0207064C ; =_022B9484
|
|
mov r1, #0x7f
|
|
strb r1, [r0, #0x1e]
|
|
ldr r1, _02070660 ; =sub_02070B74
|
|
strb r5, [r0, #0x21]
|
|
cmp r6, #0
|
|
moveq r8, #0
|
|
str r1, [r0, #0x30]
|
|
mov r4, #1
|
|
b _0207051C
|
|
_020704A8:
|
|
ldr r0, _0207064C ; =_022B9484
|
|
mov r2, #0x7f
|
|
ldr r1, _02070664 ; =sub_02070C30
|
|
strb r2, [r0, #0x1e]
|
|
str r1, [r0, #0x30]
|
|
mov r4, #0
|
|
b _0207051C
|
|
_020704C4:
|
|
ldr r0, _0207064C ; =_022B9484
|
|
mov r1, #0x7f
|
|
strb r1, [r0, #0x1e]
|
|
ldr r1, _02070668 ; =sub_02070C58
|
|
strb r5, [r0, #0x21]
|
|
cmp r6, #0
|
|
moveq r8, #0
|
|
str r1, [r0, #0x30]
|
|
mov r4, #1
|
|
b _0207051C
|
|
_020704EC:
|
|
ldr r0, _0207064C ; =_022B9484
|
|
mov r1, #0x7f
|
|
strb r1, [r0, #0x1e]
|
|
ldr r1, _0207066C ; =sub_02070D44
|
|
strb r5, [r0, #0x21]
|
|
cmp r6, #0
|
|
moveq r8, #0
|
|
str r1, [r0, #0x30]
|
|
mov r4, #1
|
|
b _0207051C
|
|
_02070514:
|
|
mvn r0, #0x5f
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_0207051C:
|
|
cmp r8, #0
|
|
beq _02070640
|
|
mov r0, #0xc0
|
|
mul r5, r7, r0
|
|
mov r0, r6, lsl #8
|
|
add r1, r0, r0, lsr #31
|
|
ldr r3, _0207064C ; =_022B9484
|
|
mov r6, r1, asr #1
|
|
str r0, [r3, #0x10]
|
|
add r1, r6, r6, lsr #31
|
|
ldr r2, _02070670 ; =0x81020409
|
|
str r6, [r3, #0x14]
|
|
mov r1, r1, asr #1
|
|
str r1, [r3, #0x18]
|
|
smull r1, r6, r2, r5
|
|
strh r8, [r3, #0x1c]
|
|
add r6, r5, r6
|
|
mov r1, r5, lsr #0x1f
|
|
add r6, r1, r6, asr #6
|
|
strb r7, [r3, #0x1f]
|
|
add r1, r6, #0x40
|
|
strh r1, [r3, #0x22]
|
|
ldr r2, [r3]
|
|
cmp r2, #0
|
|
bne _0207059C
|
|
mov r1, #0x20
|
|
bl DseMem_AllocateUser
|
|
movs r2, r0
|
|
ldr r0, _0207064C ; =_022B9484
|
|
str r2, [r0]
|
|
mvneq r0, #0x7f
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_0207059C:
|
|
ldr r0, _0207064C ; =_022B9484
|
|
cmp r4, #1
|
|
ldr r1, [r0, #0x14]
|
|
add r1, r2, r1
|
|
str r1, [r0, #4]
|
|
bne _02070604
|
|
ldr r0, [r0, #0x10]
|
|
mov r1, #0x20
|
|
bl DseMem_AllocateUser
|
|
ldr r1, _0207064C ; =_022B9484
|
|
cmp r0, #0
|
|
str r0, [r1, #8]
|
|
bne _020705F8
|
|
ldr r0, [r1]
|
|
bl DseMem_Free
|
|
mov r1, #0
|
|
ldr r3, _0207064C ; =_022B9484
|
|
mov r2, r1
|
|
sub r0, r1, #0x80
|
|
str r1, [r3]
|
|
bl Dse_SetError
|
|
mvn r0, #0x7f
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_020705F8:
|
|
ldr r2, [r1, #0x14]
|
|
add r0, r0, r2
|
|
str r0, [r1, #0xc]
|
|
_02070604:
|
|
ldr r3, _0207064C ; =_022B9484
|
|
mov r1, #0
|
|
ldr r0, _02070654 ; =_022B9484
|
|
mov r2, #1
|
|
strb r1, [r3, #0x20]
|
|
bl FlushChannels
|
|
ldr r0, _02070654 ; =_022B9484
|
|
mov r1, #1
|
|
mov r2, #3
|
|
bl FlushChannels
|
|
ldr r0, _02070654 ; =_022B9484
|
|
bl sub_020706E8
|
|
ldr r0, _0207064C ; =_022B9484
|
|
mov r1, #1
|
|
strb r1, [r0, #0x24]
|
|
_02070640:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_02070648: .word 0x0000FFFF
|
|
_0207064C: .word _022B9484
|
|
_02070650: .word _022B7A3E
|
|
_02070654: .word _022B9484
|
|
_02070658: .word sub_02070A44
|
|
_0207065C: .word sub_02070A9C
|
|
_02070660: .word sub_02070B74
|
|
_02070664: .word sub_02070C30
|
|
_02070668: .word sub_02070C58
|
|
_0207066C: .word sub_02070D44
|
|
_02070670: .word 0x81020409
|
|
arm_func_end sub_020702F8
|
|
|
|
arm_func_start FlushChannels
|
|
FlushChannels: ; 0x02070674
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
ldr r4, _020706E0 ; =_022B7A6C
|
|
mov r3, #0x15c
|
|
mla r5, r2, r3, r4
|
|
ldr r3, _020706E4 ; =0x04000208
|
|
mov r7, r0
|
|
ldrh r4, [r3]
|
|
mov r2, #0
|
|
mov r0, r5
|
|
mov r6, r1
|
|
strh r2, [r3]
|
|
bl DseVoice_Deallocate
|
|
add r0, r5, #0x3c
|
|
mvn r1, #0xc0000000
|
|
bl SoundEnvelope_ForceVolume
|
|
add r0, r5, #0x5c
|
|
bl SoundLfoBank_Reset
|
|
mov r0, #0
|
|
strh r0, [r5, #6]
|
|
mov r0, #0x10
|
|
strb r0, [r5, #0x14e]
|
|
add r0, r7, r6, lsl #2
|
|
ldr r1, _020706E4 ; =0x04000208
|
|
str r5, [r0, #0x28]
|
|
ldrh r0, [r1]
|
|
strh r4, [r1]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_020706E0: .word _022B7A6C
|
|
_020706E4: .word 0x04000208
|
|
arm_func_end FlushChannels
|
|
|
|
arm_func_start sub_020706E8
|
|
sub_020706E8: ; 0x020706E8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x10
|
|
mov r4, r0
|
|
ldr r6, [r4, #0x18]
|
|
mov r7, #0
|
|
strb r7, [r4, #0x20]
|
|
ldrh r3, [r4, #0x1c]
|
|
add r5, r6, #0x20
|
|
mov r6, r6, lsr #1
|
|
sub r3, r3, #0x300
|
|
mov r5, r5, lsr #1
|
|
mov r8, r6, lsl #9
|
|
mov r6, r5, lsl #9
|
|
cmp r3, #7
|
|
mov r5, r8, lsr #5
|
|
mov r6, r6, lsr #5
|
|
addls pc, pc, r3, lsl #2
|
|
b _0207077C
|
|
_02070730: ; jump table
|
|
b _02070750 ; case 0
|
|
b _02070760 ; case 1
|
|
b _02070760 ; case 2
|
|
b _02070770 ; case 3
|
|
b _02070770 ; case 4
|
|
b _02070770 ; case 5
|
|
b _02070770 ; case 6
|
|
b _02070770 ; case 7
|
|
_02070750:
|
|
mov r0, r7
|
|
mov r1, r7
|
|
mov r2, r7
|
|
b _0207077C
|
|
_02070760:
|
|
mov r0, #1
|
|
mov r2, r0
|
|
mov r1, #2
|
|
b _0207077C
|
|
_02070770:
|
|
mov r0, #1
|
|
mov r2, r0
|
|
mov r1, #2
|
|
_0207077C:
|
|
mov r3, r2
|
|
bl sub_0207CB54
|
|
mov r1, #1
|
|
mov r0, #0
|
|
str r1, [sp]
|
|
str r0, [sp, #4]
|
|
str r0, [sp, #8]
|
|
ldr r3, [r4, #0x14]
|
|
ldr r2, [r4]
|
|
mov r1, r0
|
|
mov r3, r3, lsr #2
|
|
bl sub_0207C944
|
|
mov r0, #1
|
|
str r0, [sp]
|
|
mov r1, #0
|
|
str r1, [sp, #4]
|
|
str r1, [sp, #8]
|
|
ldr r3, [r4, #0x14]
|
|
ldr r2, [r4, #4]
|
|
mov r3, r3, lsr #2
|
|
bl sub_0207C944
|
|
ldr r3, _020708E4 ; =sub_0207098C
|
|
mov r1, r6
|
|
mov r2, r5
|
|
mov r0, #4
|
|
str r4, [sp]
|
|
bl sub_0207C984
|
|
ldr r1, _020708E8 ; =0x04000208
|
|
mov sb, #0
|
|
ldrh r0, [r1]
|
|
str r0, [sp, #0xc]
|
|
strh sb, [r1]
|
|
mov r5, #1
|
|
mov r7, sb
|
|
mvn r6, #0xc0000000
|
|
mov r8, #0x1000
|
|
mov fp, r5
|
|
_02070810:
|
|
add r0, r4, sb, lsl #2
|
|
ldr sl, [r0, #0x28]
|
|
cmp sb, #0
|
|
strh r8, [sl, #4]
|
|
strb fp, [sl, #0xc]
|
|
strb fp, [sl, #0x1f]
|
|
ldreq r0, [r4]
|
|
mov r1, r6
|
|
ldrne r0, [r4, #4]
|
|
tst sb, #1
|
|
str r0, [sl, #0x30]
|
|
str r7, [sl, #0x34]
|
|
ldr r0, [r4, #0x14]
|
|
mov r0, r0, lsr #2
|
|
str r0, [sl, #0x38]
|
|
mov r0, #1
|
|
strb r0, [sl, #0x21]
|
|
mov r0, #0x200
|
|
str r0, [sl, #0x13c]
|
|
ldrb r0, [r4, #0x1e]
|
|
str r0, [sl, #0x140]
|
|
moveq r0, r7
|
|
movne r0, #0x7f
|
|
str r0, [sl, #0x144]
|
|
add r0, sl, #0x3c
|
|
bl SoundEnvelope_ForceVolume
|
|
add r0, sl, #0x5c
|
|
bl SoundLfoBank_Reset
|
|
add sb, sb, #1
|
|
strh r5, [sl, #6]
|
|
cmp sb, #2
|
|
blt _02070810
|
|
ldr r1, _020708EC ; =DRIVER_WORK
|
|
ldr r0, _020708F0 ; =_022B9484
|
|
ldrb r3, [r1, #0x739]
|
|
strb r5, [r0, #0x25]
|
|
ldr r2, _020708E8 ; =0x04000208
|
|
bic r0, r3, #0x10
|
|
strb r0, [r1, #0x739]
|
|
ldrb r0, [r1, #0x73b]
|
|
bic r0, r0, #3
|
|
strb r0, [r1, #0x73b]
|
|
ldrb r0, [r1, #0x738]
|
|
orr r0, r0, #0x10
|
|
strb r0, [r1, #0x738]
|
|
ldrb r0, [r1, #0x73a]
|
|
orr r0, r0, #3
|
|
strb r0, [r1, #0x73a]
|
|
ldrh r0, [r2]
|
|
ldr r0, [sp, #0xc]
|
|
strh r0, [r2]
|
|
add sp, sp, #0x10
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_020708E4: .word sub_0207098C
|
|
_020708E8: .word 0x04000208
|
|
_020708EC: .word DRIVER_WORK
|
|
_020708F0: .word _022B9484
|
|
arm_func_end sub_020706E8
|
|
|
|
arm_func_start sub_020708F4
|
|
sub_020708F4: ; 0x020708F4
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
ldr r1, _02070980 ; =_022B9484
|
|
mov r6, r0
|
|
ldrsb r0, [r1, #0x25]
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
mov r5, #0
|
|
ldr r0, _02070984 ; =0x04000208
|
|
strb r5, [r1, #0x25]
|
|
ldrh r4, [r0]
|
|
strh r5, [r0]
|
|
_02070920:
|
|
add r0, r6, r5, lsl #2
|
|
ldr r0, [r0, #0x28]
|
|
cmp r0, #0
|
|
beq _02070934
|
|
bl DseVoice_Deallocate
|
|
_02070934:
|
|
add r5, r5, #1
|
|
cmp r5, #2
|
|
blt _02070920
|
|
ldr ip, _02070988 ; =DRIVER_WORK
|
|
mov r0, #0
|
|
ldrb r2, [ip, #0x739]
|
|
ldr lr, _02070984 ; =0x04000208
|
|
mov r1, r0
|
|
orr r2, r2, #0x10
|
|
strb r2, [ip, #0x739]
|
|
ldrb r5, [ip, #0x73b]
|
|
mov r2, r0
|
|
mov r3, r0
|
|
orr r5, r5, #3
|
|
strb r5, [ip, #0x73b]
|
|
ldrh ip, [lr]
|
|
strh r4, [lr]
|
|
bl sub_0207CB54
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02070980: .word _022B9484
|
|
_02070984: .word 0x04000208
|
|
_02070988: .word DRIVER_WORK
|
|
arm_func_end sub_020708F4
|
|
|
|
arm_func_start sub_0207098C
|
|
sub_0207098C: ; 0x0207098C
|
|
ldr ip, _02070998 ; =sub_02079940
|
|
ldr r0, _0207099C ; =_022B94BC
|
|
bx ip
|
|
.align 2, 0
|
|
_02070998: .word sub_02079940
|
|
_0207099C: .word _022B94BC
|
|
arm_func_end sub_0207098C
|
|
|
|
arm_func_start sub_020709A0
|
|
sub_020709A0: ; 0x020709A0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
ldr r5, _02070A3C ; =_022B9484
|
|
ldr r4, _02070A40 ; =_022B9484
|
|
mov fp, #1
|
|
mov r6, #0
|
|
_020709B4:
|
|
mov r0, r6
|
|
bl sub_02079888
|
|
ldrsb r0, [r4, #0x26]
|
|
cmp r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldrsb r0, [r4, #0x25]
|
|
cmp r0, #1
|
|
bne _020709B4
|
|
ldrb r7, [r4, #0x20]
|
|
ldr sl, [r4, #0x18]
|
|
ldr sb, [r4]
|
|
cmp r7, #1
|
|
ldr r8, [r4, #4]
|
|
addeq sb, sb, sl
|
|
addeq r8, r8, sl
|
|
ldr ip, [r4, #0x30]
|
|
mov r0, r5
|
|
mov r1, sb
|
|
mov r2, r8
|
|
mov r3, sl
|
|
blx ip
|
|
mov r0, sb
|
|
mov r1, sl
|
|
bl sub_0207A2DC
|
|
mov r0, r8
|
|
mov r1, sl
|
|
bl sub_0207A2DC
|
|
bl sub_0207A300
|
|
cmp r7, #0
|
|
moveq r0, fp
|
|
movne r0, #0
|
|
strb r0, [r4, #0x20]
|
|
b _020709B4
|
|
_02070A38:
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_02070A3C: .word _022B9484
|
|
_02070A40: .word _022B9484
|
|
arm_func_end sub_020709A0
|
|
|
|
arm_func_start sub_02070A44
|
|
sub_02070A44: ; 0x02070A44
|
|
stmdb sp!, {r3, lr}
|
|
ldrb r0, [r0, #0x1f]
|
|
mov ip, r3, asr #1
|
|
cmp ip, #0
|
|
add lr, r0, #0x80
|
|
ldmleia sp!, {r3, pc}
|
|
_02070A5C:
|
|
ldrsh r0, [r1]
|
|
sub ip, ip, #1
|
|
cmp ip, #0
|
|
mul r3, r0, lr
|
|
mov r0, r3, asr #7
|
|
add r0, r3, r0, lsr #24
|
|
mov r0, r0, asr #8
|
|
strh r0, [r1], #2
|
|
ldrsh r0, [r2]
|
|
mul r3, r0, lr
|
|
mov r0, r3, asr #7
|
|
add r0, r3, r0, lsr #24
|
|
mov r0, r0, asr #8
|
|
strh r0, [r2], #2
|
|
bgt _02070A5C
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end sub_02070A44
|
|
|
|
arm_func_start sub_02070A9C
|
|
sub_02070A9C: ; 0x02070A9C
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
ldrb r5, [r0, #0x20]
|
|
ldr lr, [r0, #8]
|
|
ldr r4, [r0, #0xc]
|
|
cmp r5, #1
|
|
biceq r5, r3, #1
|
|
ldrh r6, [r0, #0x22]
|
|
ldrb r7, [r0, #0x21]
|
|
addeq lr, lr, r5
|
|
addeq r4, r4, r5
|
|
mov r5, r3, asr #1
|
|
cmp r5, #0
|
|
ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
mov r3, #0x8000
|
|
rsb r3, r3, #0
|
|
mov ip, r3, lsr #0x11
|
|
_02070ADC:
|
|
ldrsh r8, [lr]
|
|
ldrsh r0, [r1]
|
|
sub r5, r5, #1
|
|
mul sl, r8, r6
|
|
mul sb, sl, r7
|
|
mov r8, sl, asr #7
|
|
add r8, sl, r8, lsr #24
|
|
mov r8, r8, asr #8
|
|
add r8, r8, r0, asr #8
|
|
add r0, r0, sb, asr #7
|
|
cmp r0, r3, lsr #17
|
|
strh r8, [lr]
|
|
movgt r0, ip
|
|
bgt _02070B1C
|
|
cmp r0, r3
|
|
movlt r0, r3
|
|
_02070B1C:
|
|
strh r0, [r1], #2
|
|
ldrsh r8, [r4]
|
|
ldrsh r0, [r2]
|
|
add lr, lr, #2
|
|
mul sl, r8, r6
|
|
mul sb, sl, r7
|
|
mov r8, sl, asr #7
|
|
add r8, sl, r8, lsr #24
|
|
mov r8, r8, asr #8
|
|
add r8, r8, r0, asr #8
|
|
add r0, r0, sb, asr #7
|
|
cmp r0, r3, lsr #17
|
|
strh r8, [r4]
|
|
movgt r0, ip
|
|
bgt _02070B60
|
|
cmp r0, r3
|
|
movlt r0, r3
|
|
_02070B60:
|
|
cmp r5, #0
|
|
strh r0, [r2], #2
|
|
add r4, r4, #2
|
|
bgt _02070ADC
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
arm_func_end sub_02070A9C
|
|
|
|
arm_func_start sub_02070B74
|
|
sub_02070B74: ; 0x02070B74
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
ldrb r4, [r0, #0x20]
|
|
ldr lr, [r0, #8]
|
|
ldrh r5, [r0, #0x22]
|
|
cmp r4, #1
|
|
biceq r4, r3, #1
|
|
addeq lr, lr, r4
|
|
mov r4, r3, asr #1
|
|
ldrb r6, [r0, #0x21]
|
|
cmp r4, #0
|
|
ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
mov r0, #0x8000
|
|
rsb r0, r0, #0
|
|
mov r3, r0, lsr #0x11
|
|
_02070BAC:
|
|
ldrsh r8, [lr]
|
|
ldrsh ip, [r1]
|
|
ldrsh r7, [r2]
|
|
mul sb, r8, r5
|
|
mul sl, sb, r6
|
|
mov r8, sb, asr #7
|
|
add sb, sb, r8, lsr #24
|
|
mov r8, sl, asr #6
|
|
add sl, sl, r8, lsr #25
|
|
add r8, ip, sl, asr #7
|
|
cmp r8, r0, lsr #17
|
|
add ip, ip, r7
|
|
mov sb, sb, asr #8
|
|
add sb, sb, ip, asr #9
|
|
strh sb, [lr]
|
|
sub r4, r4, #1
|
|
movgt r8, r3
|
|
bgt _02070BFC
|
|
cmp r8, r0
|
|
movlt r8, r0
|
|
_02070BFC:
|
|
add r7, r7, sl, asr #7
|
|
cmp r7, r0, lsr #17
|
|
strh r8, [r1]
|
|
movgt r7, r3
|
|
bgt _02070C18
|
|
cmp r7, r0
|
|
movlt r7, r0
|
|
_02070C18:
|
|
cmp r4, #0
|
|
strh r7, [r2], #2
|
|
add r1, r1, #2
|
|
add lr, lr, #2
|
|
bgt _02070BAC
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
arm_func_end sub_02070B74
|
|
|
|
arm_func_start sub_02070C30
|
|
sub_02070C30: ; 0x02070C30
|
|
mov r2, r3, asr #1
|
|
cmp r2, #0
|
|
bxle lr
|
|
_02070C3C:
|
|
ldrsh r0, [r1]
|
|
sub r2, r2, #1
|
|
cmp r2, #0
|
|
rsb r0, r0, #0
|
|
strh r0, [r1], #2
|
|
bgt _02070C3C
|
|
bx lr
|
|
arm_func_end sub_02070C30
|
|
|
|
arm_func_start sub_02070C58
|
|
sub_02070C58: ; 0x02070C58
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
ldrb r5, [r0, #0x20]
|
|
ldr lr, [r0, #8]
|
|
ldr r4, [r0, #0xc]
|
|
cmp r5, #1
|
|
biceq r5, r3, #1
|
|
ldrh r6, [r0, #0x22]
|
|
ldrb r7, [r0, #0x21]
|
|
addeq lr, lr, r5
|
|
addeq r4, r4, r5
|
|
mov r5, r3, asr #1
|
|
cmp r5, #0
|
|
ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
mov r3, #0x8000
|
|
rsb r3, r3, #0
|
|
mov ip, r3, lsr #0x11
|
|
_02070C98:
|
|
ldrsh r8, [lr]
|
|
ldrsh r0, [r1]
|
|
sub r5, r5, #1
|
|
mul sl, r8, r6
|
|
mul sb, sl, r7
|
|
mov r8, sl, asr #7
|
|
add r8, sl, r8, lsr #24
|
|
mov r8, r8, asr #8
|
|
add r8, r8, r0, asr #8
|
|
add r0, r0, sb, asr #7
|
|
cmp r0, r3, lsr #17
|
|
strh r8, [lr]
|
|
movgt r0, ip
|
|
bgt _02070CD8
|
|
cmp r0, r3
|
|
movlt r0, r3
|
|
_02070CD8:
|
|
strh r0, [r1], #2
|
|
ldrsh r8, [r4]
|
|
ldrsh r0, [r2]
|
|
add lr, lr, #2
|
|
mul sl, r8, r6
|
|
mul sb, sl, r7
|
|
mov r8, sl, asr #7
|
|
add r8, sl, r8, lsr #24
|
|
mov r8, r8, asr #8
|
|
add r8, r8, r0, asr #8
|
|
add r0, r0, sb, asr #7
|
|
cmp r0, r3, lsr #17
|
|
strh r8, [r4]
|
|
movgt r0, ip
|
|
bgt _02070D1C
|
|
cmp r0, r3
|
|
movlt r0, r3
|
|
_02070D1C:
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
rsb r0, r0, #0
|
|
cmp r5, #0
|
|
strh r0, [r2], #2
|
|
add r4, r4, #2
|
|
bgt _02070C98
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
arm_func_end sub_02070C58
|
|
|
|
arm_func_start sub_02070D44
|
|
sub_02070D44: ; 0x02070D44
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
ldrb r4, [r0, #0x20]
|
|
ldr lr, [r0, #8]
|
|
ldrh r5, [r0, #0x22]
|
|
cmp r4, #1
|
|
biceq r4, r3, #1
|
|
addeq lr, lr, r4
|
|
mov r4, r3, asr #1
|
|
ldrb r6, [r0, #0x21]
|
|
cmp r4, #0
|
|
ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
mov r0, #0x8000
|
|
rsb r0, r0, #0
|
|
mov r3, r0, lsr #0x11
|
|
_02070D7C:
|
|
ldrsh r8, [lr]
|
|
ldrsh ip, [r1]
|
|
ldrsh r7, [r2]
|
|
mul sb, r8, r5
|
|
mul sl, sb, r6
|
|
mov r8, sb, asr #7
|
|
add sb, sb, r8, lsr #24
|
|
add r8, ip, sl, asr #7
|
|
cmp r8, r0, lsr #17
|
|
add ip, ip, r7
|
|
mov sb, sb, asr #8
|
|
add sb, sb, ip, asr #9
|
|
strh sb, [lr]
|
|
sub r4, r4, #1
|
|
movgt r8, r3
|
|
bgt _02070DC4
|
|
cmp r8, r0
|
|
movlt r8, r0
|
|
_02070DC4:
|
|
add r7, r7, sl, asr #7
|
|
cmp r7, r0, lsr #17
|
|
strh r8, [r1]
|
|
movgt r7, r3
|
|
bgt _02070DE0
|
|
cmp r7, r0
|
|
movlt r7, r0
|
|
_02070DE0:
|
|
mov r7, r7, lsl #0x10
|
|
mov r7, r7, lsr #0x10
|
|
mov r7, r7, lsl #0x10
|
|
mov r7, r7, asr #0x10
|
|
rsb r7, r7, #0
|
|
cmp r4, #0
|
|
strh r7, [r2], #2
|
|
add lr, lr, #2
|
|
add r1, r1, #2
|
|
bgt _02070D7C
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
arm_func_end sub_02070D44
|
|
|
|
arm_func_start DseDriver_StartMainThread
|
|
DseDriver_StartMainThread: ; 0x02070E0C
|
|
stmdb sp!, {r3, lr}
|
|
sub sp, sp, #8
|
|
ldr r3, _02070E90 ; =_022B8330
|
|
ldrb r0, [r3, #0xd10]
|
|
cmp r0, #0
|
|
beq _02070E84
|
|
mov ip, #0
|
|
strb ip, [r3, #0xd12]
|
|
mov r0, #1
|
|
strb r0, [r3, #0xd11]
|
|
ldr r2, _02070E94 ; =0x72637473
|
|
mov r0, #0x800
|
|
mov r1, #0x10
|
|
strb ip, [r3, #0xd13]
|
|
bl DseMem_AllocateThreadStack
|
|
ldr r2, _02070E90 ; =_022B8330
|
|
mov r1, #0x800
|
|
str r0, [r2, #0xdd4]
|
|
str r1, [sp]
|
|
ldrb r3, [r2, #0xd10]
|
|
ldr r0, _02070E98 ; =_022B9044
|
|
ldr r1, _02070E9C ; =DseDriver_Main
|
|
str r3, [sp, #4]
|
|
ldr r3, [r2, #0xdd4]
|
|
mov r2, #0
|
|
add r3, r3, #0x800
|
|
bl StartThread
|
|
ldr r0, _02070E98 ; =_022B9044
|
|
bl sub_02079940
|
|
bl DseDriver_StartTickTimer
|
|
_02070E84:
|
|
mov r0, #0
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02070E90: .word _022B8330
|
|
_02070E94: .word 0x72637473
|
|
_02070E98: .word _022B9044
|
|
_02070E9C: .word DseDriver_Main
|
|
arm_func_end DseDriver_StartMainThread
|
|
|
|
arm_func_start sub_02070EA0
|
|
sub_02070EA0: ; 0x02070EA0
|
|
stmdb sp!, {r3, lr}
|
|
bl sub_02070F4C
|
|
ldr r1, _02070ED4 ; =_022B8330
|
|
mov r2, #0
|
|
ldr r0, _02070ED8 ; =_022B9044
|
|
strb r2, [r1, #0xd11]
|
|
bl sub_02079940
|
|
ldr r0, _02070ED8 ; =_022B9044
|
|
bl sub_02079800
|
|
ldr r0, _02070ED4 ; =_022B8330
|
|
ldr r0, [r0, #0xdd4]
|
|
bl DseMem_Free
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02070ED4: .word _022B8330
|
|
_02070ED8: .word _022B9044
|
|
arm_func_end sub_02070EA0
|
|
|
|
arm_func_start DseDriver_StartTickTimer
|
|
DseDriver_StartTickTimer: ; 0x02070EDC
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _02070F3C ; =_022B8330
|
|
add r0, r0, #0xd00
|
|
ldrsb r0, [r0, #0xd8]
|
|
cmp r0, #0
|
|
bne _02070F34
|
|
ldr r1, _02070F40 ; =0x00001474
|
|
ldr ip, _02070F44 ; =DRIVER_WORK
|
|
ldr r3, _02070F48 ; =DseDriver_NotifyTick
|
|
mov r2, r1
|
|
mov r0, #0
|
|
str ip, [sp]
|
|
bl sub_0207C984
|
|
mov r0, #0
|
|
mov r1, r0
|
|
mov r3, r0
|
|
mov r2, #1
|
|
bl sub_0207C8B8
|
|
mov r0, #1
|
|
bl sub_0207CF14
|
|
mov r0, #1
|
|
bl sub_0207CD44
|
|
_02070F34:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02070F3C: .word _022B8330
|
|
_02070F40: .word 0x00001474
|
|
_02070F44: .word DRIVER_WORK
|
|
_02070F48: .word DseDriver_NotifyTick
|
|
arm_func_end DseDriver_StartTickTimer
|
|
|
|
arm_func_start sub_02070F4C
|
|
sub_02070F4C: ; 0x02070F4C
|
|
stmdb sp!, {r3, lr}
|
|
mov r1, #0
|
|
ldr r0, _02070FC4 ; =0x0000FFFF
|
|
mov r3, r1
|
|
mov r2, #1
|
|
bl sub_0207C8E0
|
|
ldr r0, _02070FC8 ; =_022B8330
|
|
add r0, r0, #0xd00
|
|
ldrsb r0, [r0, #0xd8]
|
|
cmp r0, #0
|
|
bne _02070F90
|
|
mov r0, #0
|
|
mov r1, r0
|
|
mov r2, r0
|
|
mov r3, r0
|
|
str r0, [sp]
|
|
bl sub_0207C984
|
|
_02070F90:
|
|
mov r0, #1
|
|
bl sub_0207CF14
|
|
mov r0, #1
|
|
bl sub_0207CD44
|
|
ldr r2, _02070FCC ; =_022B7A30
|
|
mov r0, #0
|
|
strh r0, [r2, #0x30]
|
|
strh r0, [r2, #0x34]
|
|
ldr r1, _02070FD0 ; =DRIVER_WORK
|
|
strh r0, [r2, #0x32]
|
|
strb r0, [r1, #0x739]
|
|
strb r0, [r1, #0x738]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02070FC4: .word 0x0000FFFF
|
|
_02070FC8: .word _022B8330
|
|
_02070FCC: .word _022B7A30
|
|
_02070FD0: .word DRIVER_WORK
|
|
arm_func_end sub_02070F4C
|
|
|
|
arm_func_start DseDriver_NotifyTick
|
|
DseDriver_NotifyTick: ; 0x02070FD4
|
|
stmdb sp!, {r3, lr}
|
|
ldr r1, _0207100C ; =_022B8330
|
|
add r0, r1, #0xd00
|
|
ldrsb r2, [r0, #0x11]
|
|
cmp r2, #0
|
|
ldmeqia sp!, {r3, pc}
|
|
ldrsb r0, [r0, #0x13]
|
|
cmp r0, #1
|
|
ldmneia sp!, {r3, pc}
|
|
ldr r0, _02071010 ; =_022B9044
|
|
mov r2, #0
|
|
strb r2, [r1, #0xd13]
|
|
bl sub_02079940
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0207100C: .word _022B8330
|
|
_02071010: .word _022B9044
|
|
arm_func_end DseDriver_NotifyTick
|
|
|
|
arm_func_start DseDriver_Main
|
|
DseDriver_Main: ; 0x02071014
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
ldr r8, _0207114C ; =_022B8330
|
|
ldr r7, _02071150 ; =_022B9130
|
|
ldr r6, _02071154 ; =DRIVER_WORK
|
|
add r4, r8, #0xd00
|
|
add r5, r8, #0xe00
|
|
mov fp, #1
|
|
_02071030:
|
|
mov r0, #0
|
|
strb fp, [r8, #0xd13]
|
|
bl sub_02079888
|
|
ldrsb r0, [r5, #0xd0]
|
|
cmp r0, #1
|
|
bne _020710D0
|
|
bl GetTimer0Control
|
|
ldr r2, [r8, #0xec8]
|
|
ldr r1, [r8, #0xecc]
|
|
sub sl, r0, r2
|
|
cmp r1, r2
|
|
sub r1, r1, r2
|
|
addlo r1, r1, #0x10000
|
|
str r0, [r8, #0xec8]
|
|
mov r0, r1
|
|
bl _ffltu
|
|
mov sb, r0
|
|
mov r0, sl
|
|
bl _ffltu
|
|
mov r1, r0
|
|
mov r0, sb
|
|
bl _fdiv
|
|
mov r1, r0
|
|
ldr r0, _02071158 ; =0x42C80000
|
|
bl _fmul
|
|
mov sb, r0
|
|
ldrsh r0, [r7, #0xc4]
|
|
mov r1, sb
|
|
cmp r0, #0
|
|
movlt r0, #0
|
|
strlt r0, [r8, #0xec0]
|
|
str sb, [r8, #0xebc]
|
|
ldr r0, [r8, #0xec0]
|
|
bl _fls
|
|
strlo sb, [r8, #0xec0]
|
|
movlo r0, #0x64
|
|
strloh r0, [r7, #0xc4]
|
|
ldrsh r0, [r7, #0xc4]
|
|
sub r0, r0, #1
|
|
strh r0, [r7, #0xc4]
|
|
_020710D0:
|
|
ldrsb r0, [r4, #0x11]
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r0, #0
|
|
bl sub_0207CD44
|
|
ldr r0, [r6, #0x2c]
|
|
add r0, r0, #1
|
|
str r0, [r6, #0x2c]
|
|
ldr r0, [r6, #0x664]
|
|
bl UpdateSequencerTracks
|
|
ldr r0, [r6, #0x668]
|
|
bl UpdateSequencerTracks
|
|
bl sub_0206FBC8
|
|
ldr r0, _0207115C ; =_022B9584
|
|
ldr r0, [r0]
|
|
cmp r0, #0
|
|
beq _02071118
|
|
bl sub_02072BB8
|
|
_02071118:
|
|
bl UpdateChannels
|
|
bl DseVoice_UpdateParameters
|
|
bl DseVoice_UpdateHardware
|
|
bl DseVoice_Cleanup
|
|
mov r0, #0
|
|
bl sub_0207CF14
|
|
ldrsb r0, [r5, #0xd0]
|
|
cmp r0, #1
|
|
bne _02071030
|
|
bl GetTimer0Control
|
|
str r0, [r8, #0xecc]
|
|
b _02071030
|
|
_02071148:
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0207114C: .word _022B8330
|
|
_02071150: .word _022B9130
|
|
_02071154: .word DRIVER_WORK
|
|
_02071158: .word 0x42C80000
|
|
_0207115C: .word _022B9584
|
|
arm_func_end DseDriver_Main
|
|
|
|
arm_func_start DseSequence_TickNotes
|
|
DseSequence_TickNotes: ; 0x02071160
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
ldr r1, [r0, #0x24]
|
|
ldrb r0, [r1, #1]
|
|
add r7, r1, #0x10
|
|
str r0, [sp]
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov fp, #0
|
|
mvn r6, #0
|
|
mov r5, fp
|
|
_02071188:
|
|
ldr r8, [r7, #0xb8]
|
|
add sl, r7, #0xb8
|
|
cmp r8, #0
|
|
beq _02071200
|
|
ldr r4, _02071220 ; =DRIVER_WORK
|
|
_0207119C:
|
|
ldmib r8, {r0, sb}
|
|
sub r1, r0, #1
|
|
cmp r1, #0
|
|
bgt _020711E0
|
|
ldrb r0, [r7, #4]
|
|
tst r0, #3
|
|
movne r1, fp
|
|
bne _020711E0
|
|
mov r0, r7
|
|
mov r1, r8
|
|
bl DseVoice_ReleaseNote
|
|
ldr r0, [r4, #0x650]
|
|
mov r1, r6
|
|
str r0, [r8, #8]
|
|
str r8, [r4, #0x650]
|
|
str r6, [r8, #4]
|
|
strb r5, [r8, #1]
|
|
_020711E0:
|
|
str r1, [r8, #4]
|
|
cmp r1, #0
|
|
strge r1, [r8, #4]
|
|
strge r8, [sl]
|
|
addge sl, r8, #8
|
|
mov r8, sb
|
|
cmp sb, #0
|
|
bne _0207119C
|
|
_02071200:
|
|
mov r0, #0
|
|
str r0, [sl]
|
|
ldr r0, [sp]
|
|
add r7, r7, #0xc8
|
|
subs r0, r0, #1
|
|
str r0, [sp]
|
|
bne _02071188
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_02071220: .word DRIVER_WORK
|
|
arm_func_end DseSequence_TickNotes
|
|
|
|
arm_func_start ParseDseEvent
|
|
ParseDseEvent: ; 0x02071224
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
sub sp, sp, #8
|
|
mov r6, r1
|
|
ldr r1, [r6, #0xc]
|
|
mov r7, r0
|
|
cmp r1, #0
|
|
ldr r5, [r6, #0x1c]
|
|
ldr r4, [r6, #0x54]
|
|
bne _020713C4
|
|
_02071248:
|
|
ldrb r3, [r5]
|
|
add r0, r5, #1
|
|
mov r5, r0
|
|
cmp r3, #0x80
|
|
blo _020712A0
|
|
cmp r3, #0x90
|
|
blo _02071288
|
|
ldr r2, _020713DC ; =SMD_EVENTS_FUN_TABLE
|
|
mov r1, r7
|
|
add r2, r2, r3, lsl #2
|
|
ldr r5, [r2, #-0x240]
|
|
mov r2, r6
|
|
mov r3, r4
|
|
blx r5
|
|
mov r5, r0
|
|
b _020713AC
|
|
_02071288:
|
|
ldr r0, _020713E0 ; =_020B0B7C
|
|
add r0, r0, r3
|
|
ldrb r0, [r0, #-0x80]
|
|
str r0, [r6, #0x10]
|
|
str r0, [r6, #0xc]
|
|
b _020713AC
|
|
_020712A0:
|
|
strb r3, [sp, #3]
|
|
ldrb r1, [r0]
|
|
ldrb r5, [r6, #4]
|
|
mov r3, #0xc
|
|
mov r2, r1, lsl #0x14
|
|
mov r2, r2, asr #0x18
|
|
and r2, r2, #3
|
|
sub r2, r2, #2
|
|
mov r2, r2, lsl #0x18
|
|
add r2, r5, r2, asr #24
|
|
mov r2, r2, lsl #0x18
|
|
mov r5, r2, asr #0x18
|
|
and r2, r1, #0xf
|
|
smlabb r2, r5, r3, r2
|
|
strb r2, [sp, #2]
|
|
mov r1, r1, asr #6
|
|
strb r5, [r6, #4]
|
|
ands r1, r1, #0xff
|
|
add r5, r0, #1
|
|
ldreq r3, [r6, #0x14]
|
|
beq _02071318
|
|
cmp r1, #0
|
|
mov r3, #0
|
|
beq _02071314
|
|
_02071300:
|
|
ldrb r0, [r5], #1
|
|
sub r1, r1, #1
|
|
ands r1, r1, #0xff
|
|
add r3, r0, r3, lsl #8
|
|
bne _02071300
|
|
_02071314:
|
|
str r3, [r6, #0x14]
|
|
_02071318:
|
|
ldrb r2, [r6, #5]
|
|
mov r1, #0
|
|
ldr r0, _020713E4 ; =0x02040811
|
|
mul r2, r3, r2
|
|
umull r0, r3, r2, r0
|
|
sub r0, r2, r3
|
|
add r3, r3, r0, lsr #1
|
|
mov r3, r3, lsr #6
|
|
str r3, [sp, #4]
|
|
strb r1, [sp]
|
|
ldrsb r0, [r6, #8]
|
|
cmp r0, #0
|
|
bne _02071398
|
|
ldrb r0, [r4, #4]
|
|
add r1, sp, #0
|
|
tst r0, #2
|
|
beq _0207136C
|
|
ldrb r2, [r6, #7]
|
|
mov r0, r4
|
|
bl DseChannel_ChangeNote
|
|
b _02071398
|
|
_0207136C:
|
|
mov r0, r4
|
|
bl DseChannel_ReleaseNote
|
|
mov r2, #0
|
|
add r1, sp, #0
|
|
mov r0, r4
|
|
str r2, [r4, #0x1c]
|
|
bl DseChannel_AllocateNote
|
|
movs r1, r0
|
|
beq _02071398
|
|
mov r0, r4
|
|
bl DseVoice_PlayNote
|
|
_02071398:
|
|
ldrb r0, [sp, #2]
|
|
strb r0, [r6, #7]
|
|
ldrb r0, [r4, #4]
|
|
bic r0, r0, #2
|
|
strb r0, [r4, #4]
|
|
_020713AC:
|
|
ldrsb r0, [r6, #2]
|
|
cmp r0, #0
|
|
beq _020713C4
|
|
ldr r0, [r6, #0xc]
|
|
cmp r0, #0
|
|
beq _02071248
|
|
_020713C4:
|
|
ldr r0, [r6, #0xc]
|
|
sub r0, r0, #1
|
|
str r0, [r6, #0xc]
|
|
str r5, [r6, #0x1c]
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_020713DC: .word SMD_EVENTS_FUN_TABLE
|
|
_020713E0: .word _020B0B7C
|
|
_020713E4: .word 0x02040811
|
|
arm_func_end ParseDseEvent
|
|
|
|
arm_func_start UpdateSequencerTracks
|
|
UpdateSequencerTracks: ; 0x020713E8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
movs sl, r0
|
|
cmpne sl, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_020713F8:
|
|
ldrsb r0, [sl, #5]
|
|
cmp r0, #1
|
|
bne _0207176C
|
|
ldrsh r0, [sl, #0x1a]
|
|
cmp r0, #0
|
|
beq _0207141C
|
|
subgt r0, r0, #1
|
|
strgth r0, [sl, #0x1a]
|
|
b _0207176C
|
|
_0207141C:
|
|
ldr r0, [sl, #0x34]
|
|
add r0, r0, #1
|
|
str r0, [sl, #0x34]
|
|
ldrb r0, [sl, #0xc]
|
|
cmp r0, #0
|
|
beq _0207143C
|
|
mov r0, sl
|
|
bl DseSequence_TickFades
|
|
_0207143C:
|
|
ldr r1, [sl, #0x3c]
|
|
ldr r0, [sl, #0x40]
|
|
add r1, r1, r0
|
|
str r1, [sl, #0x3c]
|
|
ldr r0, [sl, #0x44]
|
|
cmp r1, r0
|
|
ble _020716B0
|
|
mov r6, #0
|
|
ldr r7, _0207177C ; =0x04000208
|
|
ldr fp, _02071780 ; =0x82061029
|
|
mov r5, r6
|
|
mov r4, r6
|
|
_0207146C:
|
|
mov r0, sl
|
|
bl DseSequence_TickNotes
|
|
ldr r2, [sl, #0x24]
|
|
ldrb r0, [r2, #1]
|
|
add r1, r2, #0x10
|
|
cmp r0, #0
|
|
beq _0207162C
|
|
_02071488:
|
|
ldrh r3, [r1, #0x28]
|
|
sub r0, r0, #1
|
|
cmp r3, #0
|
|
beq _0207150C
|
|
sub r3, r3, #1
|
|
strh r3, [r1, #0x28]
|
|
ldrh r3, [r1, #0x28]
|
|
cmp r3, #0
|
|
ldreq r3, [r1, #0x24]
|
|
beq _020714BC
|
|
ldr r8, [r1, #0x1c]
|
|
ldr r3, [r1, #0x20]
|
|
add r3, r8, r3
|
|
_020714BC:
|
|
str r3, [r1, #0x1c]
|
|
ldrsh r3, [r1, #0x54]
|
|
ldr r8, [r1, #0x1c]
|
|
ldrsh sb, [r2, #4]
|
|
add r3, r3, r8, asr #16
|
|
add r3, sb, r3
|
|
strh r3, [r1, #0x16]
|
|
ldrh r3, [r7]
|
|
strh r6, [r7]
|
|
ldr sb, [r1, #0xb4]
|
|
cmp sb, #0
|
|
beq _02071504
|
|
_020714EC:
|
|
ldrh r8, [sb, #6]
|
|
orr r8, r8, #0x10
|
|
strh r8, [sb, #6]
|
|
ldr sb, [sb, #0x154]
|
|
cmp sb, #0
|
|
bne _020714EC
|
|
_02071504:
|
|
ldrh r8, [r7]
|
|
strh r3, [r7]
|
|
_0207150C:
|
|
ldrh r3, [r1, #0x38]
|
|
cmp r3, #0
|
|
beq _020715A0
|
|
sub r3, r3, #1
|
|
strh r3, [r1, #0x38]
|
|
ldrh r3, [r1, #0x38]
|
|
cmp r3, #0
|
|
ldreq r3, [r1, #0x34]
|
|
beq _0207153C
|
|
ldr r8, [r1, #0x2c]
|
|
ldr r3, [r1, #0x30]
|
|
add r3, r8, r3
|
|
_0207153C:
|
|
str r3, [r1, #0x2c]
|
|
ldr r8, [r1, #0x2c]
|
|
ldrb r3, [r1, #0x50]
|
|
mov r8, r8, asr #0x10
|
|
ldrsb sb, [r2, #8]
|
|
mul r3, r8, r3
|
|
mul r8, sb, r3
|
|
smull r3, sb, fp, r8
|
|
add sb, r8, sb
|
|
mov r3, r8, lsr #0x1f
|
|
add sb, r3, sb, asr #13
|
|
strh sb, [r1, #0x18]
|
|
ldrh r3, [r7]
|
|
strh r5, [r7]
|
|
ldr sb, [r1, #0xb4]
|
|
cmp sb, #0
|
|
beq _02071598
|
|
_02071580:
|
|
ldrh r8, [sb, #6]
|
|
orr r8, r8, #0x20
|
|
strh r8, [sb, #6]
|
|
ldr sb, [sb, #0x154]
|
|
cmp sb, #0
|
|
bne _02071580
|
|
_02071598:
|
|
ldrh r8, [r7]
|
|
strh r3, [r7]
|
|
_020715A0:
|
|
ldrh r3, [r1, #0x48]
|
|
cmp r3, #0
|
|
beq _02071620
|
|
sub r3, r3, #1
|
|
strh r3, [r1, #0x48]
|
|
ldrh r3, [r1, #0x48]
|
|
cmp r3, #0
|
|
ldreq r3, [r1, #0x44]
|
|
beq _020715D0
|
|
ldr r8, [r1, #0x3c]
|
|
ldr r3, [r1, #0x40]
|
|
add r3, r8, r3
|
|
_020715D0:
|
|
str r3, [r1, #0x3c]
|
|
ldr r3, [r1, #0xc4]
|
|
ldr r8, [r1, #0x3c]
|
|
ldrsb r3, [r3, #7]
|
|
sub r3, r3, #0x40
|
|
add r3, r3, r8, asr #16
|
|
strh r3, [r1, #0x1a]
|
|
ldrh r3, [r7]
|
|
strh r4, [r7]
|
|
ldr sb, [r1, #0xb4]
|
|
cmp sb, #0
|
|
beq _02071618
|
|
_02071600:
|
|
ldrh r8, [sb, #6]
|
|
orr r8, r8, #0x40
|
|
strh r8, [sb, #6]
|
|
ldr sb, [sb, #0x154]
|
|
cmp sb, #0
|
|
bne _02071600
|
|
_02071618:
|
|
ldrh r8, [r7]
|
|
strh r3, [r7]
|
|
_02071620:
|
|
cmp r0, #0
|
|
add r1, r1, #0xc8
|
|
bne _02071488
|
|
_0207162C:
|
|
mov r0, #0
|
|
strb r0, [sl, #0xd]
|
|
ldrb r0, [sl, #0xf]
|
|
mov sb, #0
|
|
add r8, sl, #0xa8
|
|
cmp r0, #0
|
|
ble _02071688
|
|
_02071648:
|
|
ldrsb r0, [r8, #2]
|
|
cmp r0, #1
|
|
bne _02071674
|
|
mov r0, sl
|
|
mov r1, r8
|
|
bl ParseDseEvent
|
|
ldrsb r0, [r8, #2]
|
|
cmp r0, #1
|
|
ldreqb r0, [sl, #0xd]
|
|
addeq r0, r0, #1
|
|
streqb r0, [sl, #0xd]
|
|
_02071674:
|
|
ldrb r0, [sl, #0xf]
|
|
add sb, sb, #1
|
|
add r8, r8, #0x5c
|
|
cmp sb, r0
|
|
blt _02071648
|
|
_02071688:
|
|
ldr r0, [sl, #0x38]
|
|
add r0, r0, #1
|
|
str r0, [sl, #0x38]
|
|
ldr r1, [sl, #0x3c]
|
|
ldr r0, [sl, #0x44]
|
|
sub r1, r1, r0
|
|
str r1, [sl, #0x3c]
|
|
ldr r0, [sl, #0x44]
|
|
cmp r1, r0
|
|
bgt _0207146C
|
|
_020716B0:
|
|
ldrb r0, [sl, #0xd]
|
|
cmp r0, #0
|
|
bne _020716E8
|
|
mov r0, #0
|
|
str r0, [sl, #4]
|
|
ldr r0, [sl, #0x24]
|
|
bl DseSynth_ClearHeldNotes
|
|
ldr r0, [sl, #0x28]
|
|
ldr r3, [sl, #0xa0]
|
|
ldr r4, [sl, #0x9c]
|
|
mov r1, #1
|
|
mov r2, #0
|
|
blx r4
|
|
b _0207176C
|
|
_020716E8:
|
|
ldrsb r1, [sl, #7]
|
|
cmp r1, #0
|
|
beq _0207176C
|
|
ldr r0, [sl, #0x68]
|
|
cmp r0, #0
|
|
bne _0207176C
|
|
cmp r1, #1
|
|
bne _02071744
|
|
mov r0, #0
|
|
str r0, [sl, #4]
|
|
ldr r0, [sl, #0x24]
|
|
bl DseSynth_StopChannels
|
|
ldr r0, [sl, #0x28]
|
|
ldr r3, [sl, #0xa0]
|
|
ldr r4, [sl, #0x9c]
|
|
mov r1, #2
|
|
mov r2, #0
|
|
blx r4
|
|
ldrsb r0, [sl, #0xa]
|
|
cmp r0, #1
|
|
moveq r0, #0
|
|
streqb r0, [sl, #0xd]
|
|
b _0207176C
|
|
_02071744:
|
|
mov r1, #1
|
|
strb r1, [sl, #6]
|
|
ldr r0, [sl, #0x24]
|
|
bl DseSynth_ResetAllVoiceTimersAndVolumes
|
|
ldr r0, [sl, #0x28]
|
|
ldr r3, [sl, #0xa0]
|
|
ldr r4, [sl, #0x9c]
|
|
mov r1, #3
|
|
mov r2, #0
|
|
blx r4
|
|
_0207176C:
|
|
ldr sl, [sl, #0xa4]
|
|
cmp sl, #0
|
|
bne _020713F8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0207177C: .word 0x04000208
|
|
_02071780: .word 0x82061029
|
|
arm_func_end UpdateSequencerTracks
|
|
|
|
arm_func_start DseSequence_TickFades
|
|
DseSequence_TickFades: ; 0x02071784
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrh r0, [r4, #0x54]
|
|
cmp r0, #0
|
|
beq _020717F8
|
|
sub r0, r0, #1
|
|
strh r0, [r4, #0x54]
|
|
ldrh r0, [r4, #0x54]
|
|
cmp r0, #0
|
|
ldreq r0, [r4, #0x50]
|
|
beq _020717BC
|
|
ldr r1, [r4, #0x48]
|
|
ldr r0, [r4, #0x4c]
|
|
add r0, r1, r0
|
|
_020717BC:
|
|
str r0, [r4, #0x48]
|
|
ldr r1, [r4, #0x48]
|
|
ldrb r0, [r4, #0x17]
|
|
mov r1, r1, asr #0x10
|
|
mul r0, r1, r0
|
|
movs r1, r0, lsr #8
|
|
ldr r0, _02071918 ; =0x03938700
|
|
moveq r1, #1
|
|
bl _u32_div_f
|
|
str r0, [r4, #0x44]
|
|
ldrh r0, [r4, #0x54]
|
|
cmp r0, #0
|
|
ldreqb r0, [r4, #0xc]
|
|
biceq r0, r0, #1
|
|
streqb r0, [r4, #0xc]
|
|
_020717F8:
|
|
ldrh r0, [r4, #0x64]
|
|
cmp r0, #0
|
|
beq _02071858
|
|
sub r0, r0, #1
|
|
strh r0, [r4, #0x64]
|
|
ldrh r0, [r4, #0x64]
|
|
cmp r0, #0
|
|
ldreq r0, [r4, #0x60]
|
|
beq _02071828
|
|
ldr r1, [r4, #0x58]
|
|
ldr r0, [r4, #0x5c]
|
|
add r0, r1, r0
|
|
_02071828:
|
|
str r0, [r4, #0x58]
|
|
ldr r1, [r4, #0x58]
|
|
ldr r0, [r4, #0x24]
|
|
mov r1, r1, asr #0x10
|
|
mov r1, r1, lsl #0x10
|
|
mov r1, r1, asr #0x10
|
|
bl DseSynth_SetBend
|
|
ldrh r0, [r4, #0x64]
|
|
cmp r0, #0
|
|
ldreqb r0, [r4, #0xc]
|
|
biceq r0, r0, #2
|
|
streqb r0, [r4, #0xc]
|
|
_02071858:
|
|
ldrh r0, [r4, #0x74]
|
|
cmp r0, #0
|
|
beq _020718B8
|
|
sub r0, r0, #1
|
|
strh r0, [r4, #0x74]
|
|
ldrh r0, [r4, #0x74]
|
|
cmp r0, #0
|
|
ldreq r0, [r4, #0x70]
|
|
beq _02071888
|
|
ldr r1, [r4, #0x68]
|
|
ldr r0, [r4, #0x6c]
|
|
add r0, r1, r0
|
|
_02071888:
|
|
str r0, [r4, #0x68]
|
|
ldr r1, [r4, #0x68]
|
|
ldr r0, [r4, #0x24]
|
|
mov r1, r1, asr #0x10
|
|
mov r1, r1, lsl #0x18
|
|
mov r1, r1, asr #0x18
|
|
bl DseSynth_SetVolume
|
|
ldrh r0, [r4, #0x74]
|
|
cmp r0, #0
|
|
ldreqb r0, [r4, #0xc]
|
|
biceq r0, r0, #4
|
|
streqb r0, [r4, #0xc]
|
|
_020718B8:
|
|
ldrh r0, [r4, #0x84]
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
sub r0, r0, #1
|
|
strh r0, [r4, #0x84]
|
|
ldrh r0, [r4, #0x84]
|
|
cmp r0, #0
|
|
ldreq r0, [r4, #0x80]
|
|
beq _020718E8
|
|
ldr r1, [r4, #0x78]
|
|
ldr r0, [r4, #0x7c]
|
|
add r0, r1, r0
|
|
_020718E8:
|
|
str r0, [r4, #0x78]
|
|
ldr r1, [r4, #0x78]
|
|
ldr r0, [r4, #0x24]
|
|
mov r1, r1, asr #0x10
|
|
and r1, r1, #0xff
|
|
bl DseSynth_SetPan
|
|
ldrh r0, [r4, #0x84]
|
|
cmp r0, #0
|
|
ldreqb r0, [r4, #0xc]
|
|
biceq r0, r0, #0x10
|
|
streqb r0, [r4, #0xc]
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_02071918: .word 0x03938700
|
|
arm_func_end DseSequence_TickFades
|
|
|
|
arm_func_start DseTrackEvent_Invalid
|
|
DseTrackEvent_Invalid: ; 0x0207191C
|
|
mov r1, #0
|
|
strb r1, [r2, #2]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_Invalid
|
|
|
|
arm_func_start DseTrackEvent_WaitSame
|
|
DseTrackEvent_WaitSame: ; 0x02071928
|
|
ldr r1, [r2, #0x10]
|
|
str r1, [r2, #0xc]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_WaitSame
|
|
|
|
arm_func_start DseTrackEvent_WaitDelta
|
|
DseTrackEvent_WaitDelta: ; 0x02071934
|
|
ldrsb r1, [r0], #1
|
|
ldr r3, [r2, #0x10]
|
|
add r1, r3, r1
|
|
str r1, [r2, #0x10]
|
|
str r1, [r2, #0xc]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_WaitDelta
|
|
|
|
arm_func_start DseTrackEvent_Wait8
|
|
DseTrackEvent_Wait8: ; 0x0207194C
|
|
ldrb r1, [r0], #1
|
|
str r1, [r2, #0x10]
|
|
str r1, [r2, #0xc]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_Wait8
|
|
|
|
arm_func_start DseTrackEvent_Wait16
|
|
DseTrackEvent_Wait16: ; 0x0207195C
|
|
ldrb r3, [r0]
|
|
ldrb r1, [r0, #1]
|
|
add r0, r0, #2
|
|
add r1, r3, r1, lsl #8
|
|
str r1, [r2, #0x10]
|
|
str r1, [r2, #0xc]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_Wait16
|
|
|
|
arm_func_start DseTrackEvent_Wait24
|
|
DseTrackEvent_Wait24: ; 0x02071978
|
|
ldrb r3, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb ip, [r0, #2]
|
|
add r0, r0, #3
|
|
add r1, r3, r1, lsl #8
|
|
add r1, r1, ip, lsl #16
|
|
str r1, [r2, #0x10]
|
|
str r1, [r2, #0xc]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_Wait24
|
|
|
|
arm_func_start DseTrackEvent_WaitUntilFadeout
|
|
DseTrackEvent_WaitUntilFadeout: ; 0x0207199C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r0, r3
|
|
mov r4, r2
|
|
bl DseVoice_CountNumActiveInChannel
|
|
cmp r0, #0
|
|
ldrgtb r0, [r5], #-1
|
|
addle r5, r5, #1
|
|
strgt r0, [r4, #0xc]
|
|
mov r0, r5
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end DseTrackEvent_WaitUntilFadeout
|
|
|
|
arm_func_start DseTrackEvent_EndTrack
|
|
DseTrackEvent_EndTrack: ; 0x020719C8
|
|
stmdb sp!, {r4, lr}
|
|
ldr ip, [r2, #0x20]
|
|
mov r4, r0
|
|
cmp ip, #0
|
|
bne _020719F4
|
|
mov r1, #0
|
|
mov r0, r3
|
|
strb r1, [r2, #2]
|
|
sub r4, r4, #1
|
|
bl DseChannel_DeallocateVoices
|
|
b _02071A0C
|
|
_020719F4:
|
|
ldrh r3, [r2, #0xa]
|
|
mov r0, #1
|
|
add r3, r3, #1
|
|
strh r3, [r2, #0xa]
|
|
strb r0, [r1, #3]
|
|
ldr r4, [r2, #0x20]
|
|
_02071A0C:
|
|
mov r0, r4
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_EndTrack
|
|
|
|
arm_func_start DseTrackEvent_MainLoopBegin
|
|
DseTrackEvent_MainLoopBegin: ; 0x02071A14
|
|
str r0, [r2, #0x20]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_MainLoopBegin
|
|
|
|
arm_func_start DseTrackEvent_SubLoopBegin
|
|
DseTrackEvent_SubLoopBegin: ; 0x02071A1C
|
|
stmdb sp!, {r4, lr}
|
|
ldrb r4, [r2, #6]
|
|
mov r1, #0xc
|
|
ldrb lr, [r0], #1
|
|
smulbb r1, r4, r1
|
|
add r3, r2, #0x24
|
|
str r0, [r3, r1]
|
|
add ip, r3, r1
|
|
mov r1, #0
|
|
str r1, [ip, #4]
|
|
strb lr, [ip, #8]
|
|
ldrb r3, [r2, #4]
|
|
add r1, r4, #1
|
|
strb r3, [ip, #9]
|
|
strb r1, [r2, #6]
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_SubLoopBegin
|
|
|
|
arm_func_start DseTrackEvent_SubLoopEnd
|
|
DseTrackEvent_SubLoopEnd: ; 0x02071A5C
|
|
ldrb ip, [r2, #6]
|
|
add r3, r2, #0x24
|
|
mov r1, #0xc
|
|
sub ip, ip, #1
|
|
mla r3, ip, r1, r3
|
|
ldrb r1, [r3, #8]
|
|
subs r1, r1, #1
|
|
streqb ip, [r2, #6]
|
|
bxeq lr
|
|
str r0, [r3, #4]
|
|
strb r1, [r3, #8]
|
|
ldrb r0, [r3, #9]
|
|
strb r0, [r2, #4]
|
|
ldr r0, [r3]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SubLoopEnd
|
|
|
|
arm_func_start DseTrackEvent_SubLoopBreakOnLastIteration
|
|
DseTrackEvent_SubLoopBreakOnLastIteration: ; 0x02071A98
|
|
ldrb ip, [r2, #6]
|
|
add r3, r2, #0x24
|
|
mov r1, #0xc
|
|
sub ip, ip, #1
|
|
mla r3, ip, r1, r3
|
|
ldrb r1, [r3, #8]
|
|
subs r1, r1, #1
|
|
ldreq r0, [r3, #4]
|
|
streqb ip, [r2, #6]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SubLoopBreakOnLastIteration
|
|
|
|
arm_func_start DseTrackEvent_SetOctave
|
|
DseTrackEvent_SetOctave: ; 0x02071AC0
|
|
ldrb r1, [r0], #1
|
|
strb r1, [r2, #4]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SetOctave
|
|
|
|
arm_func_start DseTrackEvent_OctaveDelta
|
|
DseTrackEvent_OctaveDelta: ; 0x02071ACC
|
|
ldrb r3, [r2, #4]
|
|
ldrsb r1, [r0], #1
|
|
add r1, r3, r1
|
|
strb r1, [r2, #4]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_OctaveDelta
|
|
|
|
arm_func_start DseTrackEvent_SetBpm
|
|
DseTrackEvent_SetBpm: ; 0x02071AE0
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
ldr r0, [r5, #0x48]
|
|
ldrb r4, [r6]
|
|
mov r0, r0, asr #0x10
|
|
mul r1, r0, r4
|
|
movs r1, r1, lsr #8
|
|
ldr r0, _02071B1C ; =0x03938700
|
|
moveq r1, #1
|
|
bl _u32_div_f
|
|
str r0, [r5, #0x44]
|
|
strb r4, [r5, #0x17]
|
|
add r0, r6, #1
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02071B1C: .word 0x03938700
|
|
arm_func_end DseTrackEvent_SetBpm
|
|
|
|
arm_func_start DseTrackEvent_SetBpm2
|
|
DseTrackEvent_SetBpm2: ; 0x02071B20
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
ldr r0, [r5, #0x48]
|
|
ldrb r4, [r6]
|
|
mov r0, r0, asr #0x10
|
|
mul r1, r0, r4
|
|
movs r1, r1, lsr #8
|
|
ldr r0, _02071B5C ; =0x03938700
|
|
moveq r1, #1
|
|
bl _u32_div_f
|
|
str r0, [r5, #0x44]
|
|
strb r4, [r5, #0x17]
|
|
add r0, r6, #1
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02071B5C: .word 0x03938700
|
|
arm_func_end DseTrackEvent_SetBpm2
|
|
|
|
arm_func_start DseTrackEvent_SetBank
|
|
DseTrackEvent_SetBank: ; 0x02071B60
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrb r2, [r4]
|
|
ldrb r1, [r4, #1]
|
|
mov r0, r3
|
|
add r1, r1, r2, lsl #8
|
|
mov r1, r1, lsl #0x10
|
|
mov r1, r1, lsr #0x10
|
|
bl DseChannel_SetBank
|
|
add r0, r4, #2
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_SetBank
|
|
|
|
arm_func_start DseTrackEvent_SetBankMsb
|
|
DseTrackEvent_SetBankMsb: ; 0x02071B8C
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrh r1, [r3, #0xe]
|
|
ldrb r2, [r4]
|
|
mov r0, r3
|
|
and r1, r1, #0xff
|
|
add r1, r1, r2, lsl #8
|
|
mov r1, r1, lsl #0x10
|
|
mov r1, r1, lsr #0x10
|
|
bl DseChannel_SetBank
|
|
add r0, r4, #1
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_SetBankMsb
|
|
|
|
arm_func_start DseTrackEvent_SetBankLsb
|
|
DseTrackEvent_SetBankLsb: ; 0x02071BBC
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrh r2, [r3, #0xe]
|
|
ldrb r1, [r4]
|
|
mov r0, r3
|
|
bic r2, r2, #0xff
|
|
add r1, r2, r1
|
|
mov r1, r1, lsl #0x10
|
|
mov r1, r1, lsr #0x10
|
|
bl DseChannel_SetBank
|
|
add r0, r4, #1
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_SetBankLsb
|
|
|
|
arm_func_start DseTrackEvent_Dummy1Byte
|
|
DseTrackEvent_Dummy1Byte: ; 0x02071BEC
|
|
add r0, r0, #1
|
|
bx lr
|
|
arm_func_end DseTrackEvent_Dummy1Byte
|
|
|
|
arm_func_start DseTrackEvent_SetInstrument
|
|
DseTrackEvent_SetInstrument: ; 0x02071BF4
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, r3
|
|
ldrb r1, [r6]
|
|
mov r0, r4
|
|
bl DseChannel_SetInstrument
|
|
movs r2, r0
|
|
bpl _02071C34
|
|
ldrh r1, [r4, #0xe]
|
|
ldr r0, [r5, #0x28]
|
|
ldr r3, [r5, #0xa0]
|
|
ldr ip, [r5, #0x9c]
|
|
rsb r2, r2, r1, lsl #16
|
|
mvn r1, #0xcb
|
|
blx ip
|
|
_02071C34:
|
|
add r0, r6, #1
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end DseTrackEvent_SetInstrument
|
|
|
|
arm_func_start DseTrackEvent_SongVolumeFade
|
|
DseTrackEvent_SongVolumeFade: ; 0x02071C3C
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r0
|
|
ldrb r2, [r5]
|
|
ldrb r0, [r5, #1]
|
|
mov r4, r1
|
|
add r0, r2, r0, lsl #8
|
|
mov r0, r0, lsl #0x10
|
|
movs r1, r0, lsr #0x10
|
|
moveq r6, #0
|
|
beq _02071C84
|
|
mov r0, #0x3e8
|
|
mul r0, r1, r0
|
|
ldr r1, _02071CC4 ; =DRIVER_WORK
|
|
ldrsh r1, [r1, #0x28]
|
|
bl _u32_div_f
|
|
mov r0, r0, lsl #0x10
|
|
movs r6, r0, lsr #0x10
|
|
moveq r6, #1
|
|
_02071C84:
|
|
ldrb r0, [r5, #2]
|
|
cmp r6, #0
|
|
mov r1, r0, lsl #0x10
|
|
str r1, [r4, #0x70]
|
|
streq r1, [r4, #0x68]
|
|
beq _02071CB8
|
|
ldr r0, [r4, #0x68]
|
|
subs r0, r1, r0
|
|
moveq r6, #0
|
|
beq _02071CB8
|
|
mov r1, r6
|
|
bl _s32_div_f
|
|
str r0, [r4, #0x6c]
|
|
_02071CB8:
|
|
strh r6, [r4, #0x74]
|
|
add r0, r5, #3
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02071CC4: .word DRIVER_WORK
|
|
arm_func_end DseTrackEvent_SongVolumeFade
|
|
|
|
arm_func_start DseTrackEvent_RestoreEnvelopeDefaults
|
|
DseTrackEvent_RestoreEnvelopeDefaults: ; 0x02071CC8
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
add r0, r3, #0x64
|
|
bl SoundEnvelopeParameters_Reset
|
|
mov r0, r4
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_RestoreEnvelopeDefaults
|
|
|
|
arm_func_start DseTrackEvent_SetEnvelopeAttackBegin
|
|
DseTrackEvent_SetEnvelopeAttackBegin: ; 0x02071CE0
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrb r1, [r4]
|
|
add r0, r3, #0x64
|
|
strb r1, [r3, #0x6c]
|
|
bl SoundEnvelopeParameters_CheckValidity
|
|
add r0, r4, #1
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_SetEnvelopeAttackBegin
|
|
|
|
arm_func_start DseTrackEvent_SetEnvelopeAttackTime
|
|
DseTrackEvent_SetEnvelopeAttackTime: ; 0x02071D00
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrb r1, [r4]
|
|
add r0, r3, #0x64
|
|
strb r1, [r3, #0x6d]
|
|
bl SoundEnvelopeParameters_CheckValidity
|
|
add r0, r4, #1
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_SetEnvelopeAttackTime
|
|
|
|
arm_func_start DseTrackEvent_SetEnvelopeHoldTime
|
|
DseTrackEvent_SetEnvelopeHoldTime: ; 0x02071D20
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrb r1, [r4]
|
|
add r0, r3, #0x64
|
|
strb r1, [r3, #0x70]
|
|
bl SoundEnvelopeParameters_CheckValidity
|
|
add r0, r4, #1
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_SetEnvelopeHoldTime
|
|
|
|
arm_func_start DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel
|
|
DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel: ; 0x02071D40
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrb r0, [r4]
|
|
cmp r0, #0xff
|
|
strneb r0, [r3, #0x6e]
|
|
ldrb r0, [r4, #1]
|
|
cmp r0, #0xff
|
|
strneb r0, [r3, #0x6f]
|
|
add r0, r3, #0x64
|
|
bl SoundEnvelopeParameters_CheckValidity
|
|
add r0, r4, #2
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel
|
|
|
|
arm_func_start DseTrackEvent_SetEnvelopeSustainTime
|
|
DseTrackEvent_SetEnvelopeSustainTime: ; 0x02071D70
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrb r1, [r4]
|
|
add r0, r3, #0x64
|
|
strb r1, [r3, #0x71]
|
|
bl SoundEnvelopeParameters_CheckValidity
|
|
add r0, r4, #1
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_SetEnvelopeSustainTime
|
|
|
|
arm_func_start DseTrackEvent_SetEnvelopeReleaseTime
|
|
DseTrackEvent_SetEnvelopeReleaseTime: ; 0x02071D90
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrb r1, [r4]
|
|
add r0, r3, #0x64
|
|
strb r1, [r3, #0x72]
|
|
bl SoundEnvelopeParameters_CheckValidity
|
|
add r0, r4, #1
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_SetEnvelopeReleaseTime
|
|
|
|
arm_func_start DseTrackEvent_SetNoteDurationMultiplier
|
|
DseTrackEvent_SetNoteDurationMultiplier: ; 0x02071DB0
|
|
ldrb r1, [r0], #1
|
|
strb r1, [r2, #5]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SetNoteDurationMultiplier
|
|
|
|
arm_func_start DseTrackEvent_ForceLfoEnvelopeLevel
|
|
DseTrackEvent_ForceLfoEnvelopeLevel: ; 0x02071DBC
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrsb r1, [r4]
|
|
mov r0, r3
|
|
bl DseChannel_SetLfoConstEnvelopeLevel
|
|
add r0, r4, #1
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_ForceLfoEnvelopeLevel
|
|
|
|
arm_func_start DseTrackEvent_SetHoldNotes
|
|
DseTrackEvent_SetHoldNotes: ; 0x02071DD8
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrb r1, [r4]
|
|
ldr r0, [r2, #0x54]
|
|
cmp r1, #0x40
|
|
ldrb r1, [r0, #4]
|
|
orrhs r1, r1, #1
|
|
strhsb r1, [r0, #4]
|
|
bhs _02071E08
|
|
bic r1, r1, #1
|
|
strb r1, [r0, #4]
|
|
bl DseVoice_ReleaseHeld
|
|
_02071E08:
|
|
add r0, r4, #1
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_SetHoldNotes
|
|
|
|
arm_func_start DseTrackEvent_SetFlagBit1Unknown
|
|
DseTrackEvent_SetFlagBit1Unknown: ; 0x02071E10
|
|
ldrb r1, [r3, #4]
|
|
orr r1, r1, #2
|
|
strb r1, [r3, #4]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SetFlagBit1Unknown
|
|
|
|
arm_func_start DseTrackEvent_SetOptionalVolume
|
|
DseTrackEvent_SetOptionalVolume: ; 0x02071E20
|
|
ldrb r1, [r0], #1
|
|
strb r1, [r3, #0x58]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SetOptionalVolume
|
|
|
|
arm_func_start DseTrackEvent_Dummy2Bytes
|
|
DseTrackEvent_Dummy2Bytes: ; 0x02071E2C
|
|
add r0, r0, #2
|
|
bx lr
|
|
arm_func_end DseTrackEvent_Dummy2Bytes
|
|
|
|
arm_func_start DseTrackEvent_SetTuning
|
|
DseTrackEvent_SetTuning: ; 0x02071E34
|
|
stmdb sp!, {r4, lr}
|
|
ldrsb r1, [r0]
|
|
ldr ip, _02071EB0 ; =0x04000208
|
|
mov r2, #0
|
|
mov r1, r1, lsl #0x18
|
|
mov r4, r1, asr #0x10
|
|
strh r4, [r3, #0x54]
|
|
ldr lr, [r3, #0xc4]
|
|
ldr r1, [r3, #0x1c]
|
|
ldrsh lr, [lr, #4]
|
|
mov r1, r1, asr #0x10
|
|
mov r1, r1, lsl #0x10
|
|
add r1, r4, r1, asr #16
|
|
add r1, lr, r1
|
|
strh r1, [r3, #0x16]
|
|
ldrh r4, [ip]
|
|
strh r2, [ip]
|
|
ldr r2, [r3, #0xb4]
|
|
cmp r2, #0
|
|
beq _02071E9C
|
|
_02071E84:
|
|
ldrh r1, [r2, #6]
|
|
orr r1, r1, #0x10
|
|
strh r1, [r2, #6]
|
|
ldr r2, [r2, #0x154]
|
|
cmp r2, #0
|
|
bne _02071E84
|
|
_02071E9C:
|
|
ldr r2, _02071EB0 ; =0x04000208
|
|
add r0, r0, #1
|
|
ldrh r1, [r2]
|
|
strh r4, [r2]
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_02071EB0: .word 0x04000208
|
|
arm_func_end DseTrackEvent_SetTuning
|
|
|
|
arm_func_start DseTrackEvent_TuningDeltaCoarse
|
|
DseTrackEvent_TuningDeltaCoarse: ; 0x02071EB4
|
|
stmdb sp!, {r4, lr}
|
|
ldrsb r4, [r0]
|
|
ldrsh r1, [r3, #0x54]
|
|
ldr ip, _02071F38 ; =0x04000208
|
|
mov r2, #0
|
|
add r1, r1, r4, lsl #8
|
|
mov r1, r1, lsl #0x10
|
|
mov r4, r1, asr #0x10
|
|
strh r4, [r3, #0x54]
|
|
ldr lr, [r3, #0xc4]
|
|
ldr r1, [r3, #0x1c]
|
|
ldrsh lr, [lr, #4]
|
|
mov r1, r1, asr #0x10
|
|
mov r1, r1, lsl #0x10
|
|
add r1, r4, r1, asr #16
|
|
add r1, lr, r1
|
|
strh r1, [r3, #0x16]
|
|
ldrh r4, [ip]
|
|
strh r2, [ip]
|
|
ldr r2, [r3, #0xb4]
|
|
cmp r2, #0
|
|
beq _02071F24
|
|
_02071F0C:
|
|
ldrh r1, [r2, #6]
|
|
orr r1, r1, #0x10
|
|
strh r1, [r2, #6]
|
|
ldr r2, [r2, #0x154]
|
|
cmp r2, #0
|
|
bne _02071F0C
|
|
_02071F24:
|
|
ldr r2, _02071F38 ; =0x04000208
|
|
add r0, r0, #1
|
|
ldrh r1, [r2]
|
|
strh r4, [r2]
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_02071F38: .word 0x04000208
|
|
arm_func_end DseTrackEvent_TuningDeltaCoarse
|
|
|
|
arm_func_start DseTrackEvent_TuningDeltaFine
|
|
DseTrackEvent_TuningDeltaFine: ; 0x02071F3C
|
|
stmdb sp!, {r4, lr}
|
|
ldrsb r4, [r0]
|
|
ldrsh r1, [r3, #0x54]
|
|
ldr ip, _02071FC0 ; =0x04000208
|
|
mov r2, #0
|
|
add r1, r1, r4, lsl #2
|
|
mov r1, r1, lsl #0x10
|
|
mov r4, r1, asr #0x10
|
|
strh r4, [r3, #0x54]
|
|
ldr lr, [r3, #0xc4]
|
|
ldr r1, [r3, #0x1c]
|
|
ldrsh lr, [lr, #4]
|
|
mov r1, r1, asr #0x10
|
|
mov r1, r1, lsl #0x10
|
|
add r1, r4, r1, asr #16
|
|
add r1, lr, r1
|
|
strh r1, [r3, #0x16]
|
|
ldrh r4, [ip]
|
|
strh r2, [ip]
|
|
ldr r2, [r3, #0xb4]
|
|
cmp r2, #0
|
|
beq _02071FAC
|
|
_02071F94:
|
|
ldrh r1, [r2, #6]
|
|
orr r1, r1, #0x10
|
|
strh r1, [r2, #6]
|
|
ldr r2, [r2, #0x154]
|
|
cmp r2, #0
|
|
bne _02071F94
|
|
_02071FAC:
|
|
ldr r2, _02071FC0 ; =0x04000208
|
|
add r0, r0, #1
|
|
ldrh r1, [r2]
|
|
strh r4, [r2]
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_02071FC0: .word 0x04000208
|
|
arm_func_end DseTrackEvent_TuningDeltaFine
|
|
|
|
arm_func_start DseTrackEvent_TuningDeltaFull
|
|
DseTrackEvent_TuningDeltaFull: ; 0x02071FC4
|
|
stmdb sp!, {r3, lr}
|
|
ldrb ip, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrsh lr, [r3, #0x54]
|
|
ldr r2, _02072050 ; =0x04000208
|
|
add r1, ip, r1, lsl #8
|
|
add r1, lr, r1
|
|
mov r1, r1, lsl #0x10
|
|
mov lr, r1, asr #0x10
|
|
strh lr, [r3, #0x54]
|
|
ldr ip, [r3, #0xc4]
|
|
ldr r1, [r3, #0x1c]
|
|
ldrsh ip, [ip, #4]
|
|
mov r1, r1, asr #0x10
|
|
mov r1, r1, lsl #0x10
|
|
add r1, lr, r1, asr #16
|
|
add r1, ip, r1
|
|
strh r1, [r3, #0x16]
|
|
ldrh ip, [r2]
|
|
mov r1, #0
|
|
strh r1, [r2]
|
|
ldr r2, [r3, #0xb4]
|
|
cmp r2, #0
|
|
beq _0207203C
|
|
_02072024:
|
|
ldrh r1, [r2, #6]
|
|
orr r1, r1, #0x10
|
|
strh r1, [r2, #6]
|
|
ldr r2, [r2, #0x154]
|
|
cmp r2, #0
|
|
bne _02072024
|
|
_0207203C:
|
|
ldr r2, _02072050 ; =0x04000208
|
|
add r0, r0, #2
|
|
ldrh r1, [r2]
|
|
strh ip, [r2]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02072050: .word 0x04000208
|
|
arm_func_end DseTrackEvent_TuningDeltaFull
|
|
|
|
arm_func_start DseTrackEvent_TuningFade
|
|
DseTrackEvent_TuningFade: ; 0x02072054
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r6, r3
|
|
ldrb r1, [r6, #4]
|
|
ldrb r4, [r7]
|
|
ldrb r0, [r7, #1]
|
|
tst r1, #2
|
|
ldrb r2, [r7, #2]
|
|
add r0, r4, r0, lsl #8
|
|
mov r0, r0, lsl #0x10
|
|
mov r5, r0, lsr #0x10
|
|
ldr r4, [r6, #0xc4]
|
|
moveq r1, #0
|
|
streq r1, [r6, #0x1c]
|
|
ldr r1, [r6, #0x1c]
|
|
mov r0, r2, lsl #0x18
|
|
mov r1, r1, asr #0x10
|
|
add r0, r1, r0, lsr #16
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
mov r1, r0, lsl #0x10
|
|
str r1, [r6, #0x24]
|
|
cmp r5, #0
|
|
streq r1, [r6, #0x1c]
|
|
beq _020720D4
|
|
ldr r0, [r6, #0x1c]
|
|
subs r0, r1, r0
|
|
moveq r5, #0
|
|
beq _020720D4
|
|
mov r1, r5
|
|
bl _s32_div_f
|
|
str r0, [r6, #0x20]
|
|
_020720D4:
|
|
strh r5, [r6, #0x28]
|
|
ldr r0, [r6, #0x1c]
|
|
ldrsh r1, [r6, #0x54]
|
|
mov r0, r0, asr #0x10
|
|
mov r0, r0, lsl #0x10
|
|
ldrsh r2, [r4, #4]
|
|
add r0, r1, r0, lsr #16
|
|
ldr r1, _02072140 ; =0x04000208
|
|
add r0, r2, r0
|
|
strh r0, [r6, #0x16]
|
|
ldrh r3, [r1]
|
|
mov r0, #0
|
|
strh r0, [r1]
|
|
ldr r1, [r6, #0xb4]
|
|
cmp r1, #0
|
|
beq _0207212C
|
|
_02072114:
|
|
ldrh r0, [r1, #6]
|
|
orr r0, r0, #0x10
|
|
strh r0, [r1, #6]
|
|
ldr r1, [r1, #0x154]
|
|
cmp r1, #0
|
|
bne _02072114
|
|
_0207212C:
|
|
ldr r2, _02072140 ; =0x04000208
|
|
add r0, r7, #3
|
|
ldrh r1, [r2]
|
|
strh r3, [r2]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_02072140: .word 0x04000208
|
|
arm_func_end DseTrackEvent_TuningFade
|
|
|
|
arm_func_start DseTrackEvent_SetNoteRandomRegion
|
|
DseTrackEvent_SetNoteRandomRegion: ; 0x02072144
|
|
ldrb r1, [r0]
|
|
ldrb ip, [r0, #1]
|
|
add r0, r0, #2
|
|
mov r2, r1
|
|
cmp r1, ip
|
|
movhi r2, ip
|
|
movhi ip, r1
|
|
strb r2, [r3, #0xc]
|
|
strb ip, [r3, #0xd]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SetNoteRandomRegion
|
|
|
|
arm_func_start DseTrackEvent_SetTuningJitterAmplitude
|
|
DseTrackEvent_SetTuningJitterAmplitude: ; 0x0207216C
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
add r0, r0, #2
|
|
add r1, r2, r1, lsl #8
|
|
strh r1, [r3, #0xa]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SetTuningJitterAmplitude
|
|
|
|
arm_func_start DseTrackEvent_SetKeyBend
|
|
DseTrackEvent_SetKeyBend: ; 0x02072184
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrb r2, [r4]
|
|
ldrb r1, [r4, #1]
|
|
mov r0, r3
|
|
add r1, r1, r2, lsl #8
|
|
mov r1, r1, lsl #0x10
|
|
mov r1, r1, asr #0x10
|
|
bl DseChannel_SetKeyBend
|
|
add r0, r4, #2
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_SetKeyBend
|
|
|
|
arm_func_start DseTrackEvent_SetUnknown2
|
|
DseTrackEvent_SetUnknown2: ; 0x020721B0
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
add r0, r0, #2
|
|
add r1, r1, r2, lsl #8
|
|
strh r1, [r3, #0x56]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SetUnknown2
|
|
|
|
arm_func_start DseTrackEvent_SetKeyBendRange
|
|
DseTrackEvent_SetKeyBendRange: ; 0x020721C8
|
|
ldrb r1, [r0], #1
|
|
strb r1, [r3, #0x59]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SetKeyBendRange
|
|
|
|
arm_func_start DseTrackEvent_SetupKeyBendLfo
|
|
DseTrackEvent_SetupKeyBendLfo: ; 0x020721D4
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldrb r5, [r0]
|
|
ldrb r4, [r0, #1]
|
|
ldrb lr, [r0, #2]
|
|
ldrb ip, [r0, #3]
|
|
ldrb r2, [r0, #4]
|
|
mov r1, #1
|
|
add r4, r5, r4, lsl #8
|
|
strb r1, [r3, #0x75]
|
|
strb r1, [r3, #0x76]
|
|
mov r1, r4, lsl #0x10
|
|
strb r2, [r3, #0x77]
|
|
mov r1, r1, asr #0x10
|
|
str r1, [r3, #0x78]
|
|
add r1, lr, ip, lsl #8
|
|
strh r1, [r3, #0x7c]
|
|
mov r1, #0
|
|
strh r1, [r3, #0x7e]
|
|
strh r1, [r3, #0x80]
|
|
strb r1, [r3, #0x82]
|
|
add r0, r0, #5
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end DseTrackEvent_SetupKeyBendLfo
|
|
|
|
arm_func_start DseTrackEvent_SetupKeyBendLfoEnvelope
|
|
DseTrackEvent_SetupKeyBendLfoEnvelope: ; 0x0207222C
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
add r1, r2, r1, lsl #8
|
|
strh r1, [r3, #0x7e]
|
|
ldrb r2, [r0, #2]
|
|
ldrb r1, [r0, #3]
|
|
add r0, r0, #4
|
|
add r1, r2, r1, lsl #8
|
|
strh r1, [r3, #0x80]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SetupKeyBendLfoEnvelope
|
|
|
|
arm_func_start DseTrackEvent_UseKeyBendLfo
|
|
DseTrackEvent_UseKeyBendLfo: ; 0x02072254
|
|
ldrb r1, [r0]
|
|
add r0, r0, #1
|
|
cmp r1, #2
|
|
moveq r1, #1
|
|
strb r1, [r3, #0x75]
|
|
cmp r1, #0
|
|
moveq r1, #0
|
|
movne r1, #1
|
|
strb r1, [r3, #0x76]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_UseKeyBendLfo
|
|
|
|
arm_func_start DseTrackEvent_SetVolume
|
|
DseTrackEvent_SetVolume: ; 0x0207227C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldrsb r4, [r0]
|
|
mov r5, #0
|
|
ldr r2, _02072308 ; =0x82061029
|
|
mov r1, r4, lsl #0x10
|
|
str r1, [r3, #0x34]
|
|
str r1, [r3, #0x2c]
|
|
strh r5, [r3, #0x38]
|
|
ldr ip, [r3, #0xc4]
|
|
ldrb r1, [r3, #0x50]
|
|
ldrsb lr, [ip, #8]
|
|
ldr ip, _0207230C ; =0x04000208
|
|
smulbb r1, r4, r1
|
|
mul r4, lr, r1
|
|
smull r1, lr, r2, r4
|
|
add lr, r4, lr
|
|
mov r1, r4, lsr #0x1f
|
|
add lr, r1, lr, asr #13
|
|
strh lr, [r3, #0x18]
|
|
ldrh r4, [ip]
|
|
strh r5, [ip]
|
|
ldr r2, [r3, #0xb4]
|
|
cmp r2, #0
|
|
beq _020722F4
|
|
_020722DC:
|
|
ldrh r1, [r2, #6]
|
|
orr r1, r1, #0x20
|
|
strh r1, [r2, #6]
|
|
ldr r2, [r2, #0x154]
|
|
cmp r2, #0
|
|
bne _020722DC
|
|
_020722F4:
|
|
ldr r2, _0207230C ; =0x04000208
|
|
add r0, r0, #1
|
|
ldrh r1, [r2]
|
|
strh r4, [r2]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02072308: .word 0x82061029
|
|
_0207230C: .word 0x04000208
|
|
arm_func_end DseTrackEvent_SetVolume
|
|
|
|
arm_func_start DseTrackEvent_VolumeDelta
|
|
DseTrackEvent_VolumeDelta: ; 0x02072310
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldrsb r2, [r0]
|
|
ldr r1, [r3, #0x2c]
|
|
add r4, r2, r1, asr #16
|
|
cmp r4, #0x7f
|
|
movgt r4, #0x7f
|
|
bgt _02072334
|
|
cmp r4, #0
|
|
movlt r4, #0
|
|
_02072334:
|
|
mov r1, r4, lsl #0x10
|
|
str r1, [r3, #0x34]
|
|
str r1, [r3, #0x2c]
|
|
mov r5, #0
|
|
strh r5, [r3, #0x38]
|
|
ldrb r1, [r3, #0x50]
|
|
ldr ip, [r3, #0xc4]
|
|
ldr r2, _020723B8 ; =0x82061029
|
|
mul r1, r4, r1
|
|
ldrsb lr, [ip, #8]
|
|
ldr ip, _020723BC ; =0x04000208
|
|
mul r4, lr, r1
|
|
smull r1, lr, r2, r4
|
|
add lr, r4, lr
|
|
mov r1, r4, lsr #0x1f
|
|
add lr, r1, lr, asr #13
|
|
strh lr, [r3, #0x18]
|
|
ldrh r4, [ip]
|
|
strh r5, [ip]
|
|
ldr r2, [r3, #0xb4]
|
|
cmp r2, #0
|
|
beq _020723A4
|
|
_0207238C:
|
|
ldrh r1, [r2, #6]
|
|
orr r1, r1, #0x20
|
|
strh r1, [r2, #6]
|
|
ldr r2, [r2, #0x154]
|
|
cmp r2, #0
|
|
bne _0207238C
|
|
_020723A4:
|
|
ldr r2, _020723BC ; =0x04000208
|
|
add r0, r0, #1
|
|
ldrh r1, [r2]
|
|
strh r4, [r2]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_020723B8: .word 0x82061029
|
|
_020723BC: .word 0x04000208
|
|
arm_func_end DseTrackEvent_VolumeDelta
|
|
|
|
arm_func_start DseTrackEvent_VolumeFade
|
|
DseTrackEvent_VolumeFade: ; 0x020723C0
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r0
|
|
ldrsb r1, [r5, #2]
|
|
ldrb r2, [r5]
|
|
ldrb r0, [r5, #1]
|
|
mov r4, r3
|
|
mov r1, r1, lsl #0x10
|
|
add r0, r2, r0, lsl #8
|
|
mov r0, r0, lsl #0x10
|
|
str r1, [r4, #0x34]
|
|
movs r6, r0, lsr #0x10
|
|
streq r1, [r4, #0x2c]
|
|
beq _02072410
|
|
ldr r0, [r4, #0x2c]
|
|
subs r0, r1, r0
|
|
moveq r6, #0
|
|
beq _02072410
|
|
mov r1, r6
|
|
bl _s32_div_f
|
|
str r0, [r4, #0x30]
|
|
_02072410:
|
|
strh r6, [r4, #0x38]
|
|
add r0, r5, #3
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end DseTrackEvent_VolumeFade
|
|
|
|
arm_func_start DseTrackEvent_SetExpression
|
|
DseTrackEvent_SetExpression: ; 0x0207241C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldrb r4, [r0]
|
|
ldr r2, _020724A0 ; =0x82061029
|
|
ldr lr, _020724A4 ; =0x04000208
|
|
strb r4, [r3, #0x50]
|
|
ldr r1, [r3, #0x2c]
|
|
ldr ip, [r3, #0xc4]
|
|
mov r1, r1, asr #0x10
|
|
mul r4, r1, r4
|
|
ldrsb r1, [ip, #8]
|
|
mov ip, #0
|
|
mul r4, r1, r4
|
|
smull r1, r5, r2, r4
|
|
add r5, r4, r5
|
|
mov r1, r4, lsr #0x1f
|
|
add r5, r1, r5, asr #13
|
|
strh r5, [r3, #0x18]
|
|
ldrh r4, [lr]
|
|
strh ip, [lr]
|
|
ldr r2, [r3, #0xb4]
|
|
cmp r2, #0
|
|
beq _0207248C
|
|
_02072474:
|
|
ldrh r1, [r2, #6]
|
|
orr r1, r1, #0x20
|
|
strh r1, [r2, #6]
|
|
ldr r2, [r2, #0x154]
|
|
cmp r2, #0
|
|
bne _02072474
|
|
_0207248C:
|
|
ldr r2, _020724A4 ; =0x04000208
|
|
add r0, r0, #1
|
|
ldrh r1, [r2]
|
|
strh r4, [r2]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_020724A0: .word 0x82061029
|
|
_020724A4: .word 0x04000208
|
|
arm_func_end DseTrackEvent_SetExpression
|
|
|
|
arm_func_start DseTrackEvent_SetupVolumeLfo
|
|
DseTrackEvent_SetupVolumeLfo: ; 0x020724A8
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldrb r5, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r4, [r0, #2]
|
|
ldrb lr, [r0, #3]
|
|
ldrb ip, [r0, #4]
|
|
mov r2, #1
|
|
add r1, r5, r1, lsl #8
|
|
mov r1, r1, lsl #0x10
|
|
strb r2, [r3, #0x85]
|
|
mov r2, #2
|
|
strb r2, [r3, #0x86]
|
|
strb ip, [r3, #0x87]
|
|
mov r1, r1, asr #0x10
|
|
str r1, [r3, #0x88]
|
|
add r1, r4, lr, lsl #8
|
|
strh r1, [r3, #0x8c]
|
|
mov r1, #0
|
|
strh r1, [r3, #0x8e]
|
|
strh r1, [r3, #0x90]
|
|
strb r1, [r3, #0x92]
|
|
add r0, r0, #5
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end DseTrackEvent_SetupVolumeLfo
|
|
|
|
arm_func_start DseTrackEvent_SetupVolumeLfoEnvelope
|
|
DseTrackEvent_SetupVolumeLfoEnvelope: ; 0x02072504
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
add r1, r2, r1, lsl #8
|
|
strh r1, [r3, #0x8e]
|
|
ldrb r2, [r0, #2]
|
|
ldrb r1, [r0, #3]
|
|
add r0, r0, #4
|
|
add r1, r2, r1, lsl #8
|
|
strh r1, [r3, #0x90]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SetupVolumeLfoEnvelope
|
|
|
|
arm_func_start DseTrackEvent_UseVolumeLfo
|
|
DseTrackEvent_UseVolumeLfo: ; 0x0207252C
|
|
ldrb r1, [r0]
|
|
add r0, r0, #1
|
|
cmp r1, #2
|
|
moveq r1, #1
|
|
strb r1, [r3, #0x85]
|
|
cmp r1, #0
|
|
moveq r1, #0
|
|
movne r1, #2
|
|
strb r1, [r3, #0x86]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_UseVolumeLfo
|
|
|
|
arm_func_start DseTrackEvent_SetPan
|
|
DseTrackEvent_SetPan: ; 0x02072554
|
|
stmdb sp!, {r3, lr}
|
|
ldrb lr, [r0]
|
|
mov ip, #0
|
|
cmp lr, #0x7f
|
|
movgt lr, #0x7f
|
|
mov r1, lr, lsl #0x10
|
|
str r1, [r3, #0x44]
|
|
str r1, [r3, #0x3c]
|
|
strh ip, [r3, #0x48]
|
|
ldr r2, [r3, #0xc4]
|
|
ldr r1, _020725D0 ; =0x04000208
|
|
ldrsb r2, [r2, #7]
|
|
sub r2, r2, #0x40
|
|
add r2, lr, r2
|
|
strh r2, [r3, #0x1a]
|
|
ldrh lr, [r1]
|
|
strh ip, [r1]
|
|
ldr r2, [r3, #0xb4]
|
|
cmp r2, #0
|
|
beq _020725BC
|
|
_020725A4:
|
|
ldrh r1, [r2, #6]
|
|
orr r1, r1, #0x40
|
|
strh r1, [r2, #6]
|
|
ldr r2, [r2, #0x154]
|
|
cmp r2, #0
|
|
bne _020725A4
|
|
_020725BC:
|
|
ldr r2, _020725D0 ; =0x04000208
|
|
add r0, r0, #1
|
|
ldrh r1, [r2]
|
|
strh lr, [r2]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_020725D0: .word 0x04000208
|
|
arm_func_end DseTrackEvent_SetPan
|
|
|
|
arm_func_start DseTrackEvent_PanDelta
|
|
DseTrackEvent_PanDelta: ; 0x020725D4
|
|
stmdb sp!, {r3, lr}
|
|
ldrsb r2, [r0]
|
|
ldr r1, [r3, #0x3c]
|
|
add lr, r2, r1, asr #16
|
|
cmp lr, #0x7f
|
|
movgt lr, #0x7f
|
|
bgt _020725F8
|
|
cmp lr, #0
|
|
movlt lr, #0
|
|
_020725F8:
|
|
mov r1, lr, lsl #0x10
|
|
str r1, [r3, #0x44]
|
|
str r1, [r3, #0x3c]
|
|
mov ip, #0
|
|
strh ip, [r3, #0x48]
|
|
ldr r2, [r3, #0xc4]
|
|
ldr r1, _02072664 ; =0x04000208
|
|
ldrsb r2, [r2, #7]
|
|
sub r2, r2, #0x40
|
|
add r2, lr, r2
|
|
strh r2, [r3, #0x1a]
|
|
ldrh lr, [r1]
|
|
strh ip, [r1]
|
|
ldr r2, [r3, #0xb4]
|
|
cmp r2, #0
|
|
beq _02072650
|
|
_02072638:
|
|
ldrh r1, [r2, #6]
|
|
orr r1, r1, #0x40
|
|
strh r1, [r2, #6]
|
|
ldr r2, [r2, #0x154]
|
|
cmp r2, #0
|
|
bne _02072638
|
|
_02072650:
|
|
ldr r2, _02072664 ; =0x04000208
|
|
add r0, r0, #1
|
|
ldrh r1, [r2]
|
|
strh lr, [r2]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02072664: .word 0x04000208
|
|
arm_func_end DseTrackEvent_PanDelta
|
|
|
|
arm_func_start DseTrackEvent_PanFade
|
|
DseTrackEvent_PanFade: ; 0x02072668
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r0
|
|
ldrsb r1, [r5, #2]
|
|
ldrb r2, [r5]
|
|
ldrb r0, [r5, #1]
|
|
mov r4, r3
|
|
mov r1, r1, lsl #0x10
|
|
add r0, r2, r0, lsl #8
|
|
mov r0, r0, lsl #0x10
|
|
str r1, [r4, #0x44]
|
|
movs r6, r0, lsr #0x10
|
|
streq r1, [r4, #0x3c]
|
|
beq _020726B8
|
|
ldr r0, [r4, #0x3c]
|
|
subs r0, r1, r0
|
|
moveq r6, #0
|
|
beq _020726B8
|
|
mov r1, r6
|
|
bl _s32_div_f
|
|
str r0, [r4, #0x40]
|
|
_020726B8:
|
|
strh r6, [r4, #0x48]
|
|
add r0, r5, #3
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end DseTrackEvent_PanFade
|
|
|
|
arm_func_start DseTrackEvent_SetupPanLfo
|
|
DseTrackEvent_SetupPanLfo: ; 0x020726C4
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldrb r5, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r4, [r0, #2]
|
|
ldrb lr, [r0, #3]
|
|
ldrb ip, [r0, #4]
|
|
mov r2, #1
|
|
add r1, r5, r1, lsl #8
|
|
mov r1, r1, lsl #0x10
|
|
strb r2, [r3, #0x95]
|
|
mov r2, #3
|
|
strb r2, [r3, #0x96]
|
|
strb ip, [r3, #0x97]
|
|
mov r1, r1, asr #0x10
|
|
str r1, [r3, #0x98]
|
|
add r1, r4, lr, lsl #8
|
|
strh r1, [r3, #0x9c]
|
|
mov r1, #0
|
|
strh r1, [r3, #0x9e]
|
|
strh r1, [r3, #0xa0]
|
|
strb r1, [r3, #0xa2]
|
|
add r0, r0, #5
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end DseTrackEvent_SetupPanLfo
|
|
|
|
arm_func_start DseTrackEvent_SetupPanLfoEnvelope
|
|
DseTrackEvent_SetupPanLfoEnvelope: ; 0x02072720
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
add r1, r2, r1, lsl #8
|
|
strh r1, [r3, #0x9e]
|
|
ldrb r2, [r0, #2]
|
|
ldrb r1, [r0, #3]
|
|
add r0, r0, #4
|
|
add r1, r2, r1, lsl #8
|
|
strh r1, [r3, #0xa0]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SetupPanLfoEnvelope
|
|
|
|
arm_func_start DseTrackEvent_UsePanLfo
|
|
DseTrackEvent_UsePanLfo: ; 0x02072748
|
|
ldrb r1, [r0]
|
|
add r0, r0, #1
|
|
cmp r1, #2
|
|
moveq r1, #1
|
|
strb r1, [r3, #0x95]
|
|
cmp r1, #0
|
|
moveq r1, #0
|
|
movne r1, #3
|
|
strb r1, [r3, #0x96]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_UsePanLfo
|
|
|
|
arm_func_start DseTrackEvent_SetupLfo
|
|
DseTrackEvent_SetupLfo: ; 0x02072770
|
|
stmdb sp!, {r4, lr}
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb ip, [r3, #0x61]
|
|
add r3, r3, #0x74
|
|
add r1, r2, r1, lsl #8
|
|
mov r1, r1, lsl #0x10
|
|
ldrb r4, [r0, #2]
|
|
ldrb lr, [r0, #3]
|
|
ldrb r2, [r0, #4]
|
|
add r3, r3, ip, lsl #4
|
|
mov r1, r1, asr #0x10
|
|
strb r2, [r3, #3]
|
|
str r1, [r3, #4]
|
|
add r1, r4, lr, lsl #8
|
|
strh r1, [r3, #8]
|
|
mov r1, #0
|
|
strh r1, [r3, #0xa]
|
|
strh r1, [r3, #0xc]
|
|
strb r1, [r3, #0xe]
|
|
add r0, r0, #5
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_SetupLfo
|
|
|
|
arm_func_start DseTrackEvent_SetupLfoEnvelope
|
|
DseTrackEvent_SetupLfoEnvelope: ; 0x020727C8
|
|
ldrb ip, [r3, #0x61]
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
add r3, r3, #0x74
|
|
add r3, r3, ip, lsl #4
|
|
add r1, r2, r1, lsl #8
|
|
strh r1, [r3, #0xa]
|
|
ldrb r2, [r0, #2]
|
|
ldrb r1, [r0, #3]
|
|
add r0, r0, #4
|
|
add r1, r2, r1, lsl #8
|
|
strh r1, [r3, #0xc]
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SetupLfoEnvelope
|
|
|
|
arm_func_start DseTrackEvent_SetLfoParameter
|
|
DseTrackEvent_SetLfoParameter: ; 0x020727FC
|
|
ldrb r1, [r3, #0x61]
|
|
ldrb ip, [r0]
|
|
add r2, r3, #0x74
|
|
add r1, r2, r1, lsl #4
|
|
ldrb r2, [r0, #1]
|
|
cmp ip, #0xa
|
|
addls pc, pc, ip, lsl #2
|
|
b _02072930
|
|
_0207281C: ; jump table
|
|
b _02072930 ; case 0
|
|
b _02072848 ; case 1
|
|
b _02072850 ; case 2
|
|
b _02072858 ; case 3
|
|
b _02072860 ; case 4
|
|
b _02072868 ; case 5
|
|
b _020728E0 ; case 6
|
|
b _020728EC ; case 7
|
|
b _020728FC ; case 8
|
|
b _02072910 ; case 9
|
|
b _02072924 ; case 10
|
|
_02072848:
|
|
strb r2, [r3, #0x61]
|
|
b _02072930
|
|
_02072850:
|
|
strb r2, [r1, #1]
|
|
b _02072930
|
|
_02072858:
|
|
strb r2, [r1, #2]
|
|
b _02072930
|
|
_02072860:
|
|
strb r2, [r1, #3]
|
|
b _02072930
|
|
_02072868:
|
|
ldrb r3, [r1, #2]
|
|
cmp r3, #4
|
|
addls pc, pc, r3, lsl #2
|
|
b _020728CC
|
|
_02072878: ; jump table
|
|
b _020728CC ; case 0
|
|
b _0207288C ; case 1
|
|
b _0207289C ; case 2
|
|
b _020728AC ; case 3
|
|
b _020728BC ; case 4
|
|
_0207288C:
|
|
mov r3, #0xa
|
|
mul r3, r2, r3
|
|
mov r2, r3
|
|
b _020728D8
|
|
_0207289C:
|
|
mvn r3, #0x13
|
|
mul r3, r2, r3
|
|
mov r2, r3
|
|
b _020728D8
|
|
_020728AC:
|
|
mov r3, #0x14
|
|
mul r3, r2, r3
|
|
mov r2, r3
|
|
b _020728D8
|
|
_020728BC:
|
|
mov r3, #0xa
|
|
mul r3, r2, r3
|
|
mov r2, r3
|
|
b _020728D8
|
|
_020728CC:
|
|
mov r3, #0x14
|
|
mul r3, r2, r3
|
|
mov r2, r3
|
|
_020728D8:
|
|
str r2, [r1, #4]
|
|
b _02072930
|
|
_020728E0:
|
|
add r2, r2, r2, lsl #2
|
|
strh r2, [r1, #8]
|
|
b _02072930
|
|
_020728EC:
|
|
mov r3, #0x14
|
|
mul r3, r2, r3
|
|
strh r3, [r1, #0xa]
|
|
b _02072930
|
|
_020728FC:
|
|
ldrh r3, [r1, #0xa]
|
|
and r3, r3, #0xff00
|
|
orr r2, r3, r2
|
|
strh r2, [r1, #0xa]
|
|
b _02072930
|
|
_02072910:
|
|
ldrh r3, [r1, #0xa]
|
|
and r3, r3, #0xff
|
|
orr r2, r3, r2, lsl #8
|
|
strh r2, [r1, #0xa]
|
|
b _02072930
|
|
_02072924:
|
|
mov r3, #0x14
|
|
mul r3, r2, r3
|
|
strh r3, [r1, #0xc]
|
|
_02072930:
|
|
add r0, r0, #2
|
|
bx lr
|
|
arm_func_end DseTrackEvent_SetLfoParameter
|
|
|
|
arm_func_start DseTrackEvent_UseLfo
|
|
DseTrackEvent_UseLfo: ; 0x02072938
|
|
stmdb sp!, {r3, lr}
|
|
ldrb ip, [r0, #1]
|
|
ldrb r2, [r0]
|
|
ldrb lr, [r0, #2]
|
|
add r1, r3, #0x74
|
|
cmp ip, #2
|
|
strb r2, [r3, #0x61]
|
|
add r1, r1, r2, lsl #4
|
|
moveq ip, #1
|
|
strb ip, [r1, #1]
|
|
strb lr, [r1, #2]
|
|
add r0, r0, #3
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DseTrackEvent_UseLfo
|
|
|
|
arm_func_start DseTrackEvent_Signal
|
|
DseTrackEvent_Signal: ; 0x0207296C
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrb r2, [r4]
|
|
mov ip, r1
|
|
mov r1, #8
|
|
strb r2, [ip, #0x16]
|
|
ldr r0, [ip, #0x28]
|
|
ldr r3, [ip, #0xa0]
|
|
ldr ip, [ip, #0x9c]
|
|
blx ip
|
|
add r0, r4, #1
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseTrackEvent_Signal
|
|
|
|
arm_func_start DseTrackEvent_Dummy2Bytes2
|
|
DseTrackEvent_Dummy2Bytes2: ; 0x0207299C
|
|
add r0, r0, #2
|
|
bx lr
|
|
arm_func_end DseTrackEvent_Dummy2Bytes2
|
|
|
|
arm_func_start sub_020729A4
|
|
sub_020729A4: ; 0x020729A4
|
|
ldr r0, _020729B4 ; =_022B9584
|
|
mov r1, #0
|
|
str r1, [r0]
|
|
bx lr
|
|
.align 2, 0
|
|
_020729B4: .word _022B9584
|
|
arm_func_end sub_020729A4
|
|
|
|
arm_func_start sub_020729B8
|
|
sub_020729B8: ; 0x020729B8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
ldr sb, _02072BB4 ; =_022B9584
|
|
ldr r8, [sb]
|
|
ldrb r6, [r8, #0x86]
|
|
cmp r6, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldrb r5, [r8, #0x85]
|
|
mov r1, #0
|
|
cmp r6, #0
|
|
str r1, [sp]
|
|
beq _02072B98
|
|
mov fp, #3
|
|
mov r1, #2
|
|
mov r2, r1
|
|
mov r3, fp
|
|
mov ip, r1
|
|
mov lr, fp
|
|
mov r4, fp
|
|
_02072A04:
|
|
ldrb sl, [r8, #0x88]
|
|
add r7, r8, r5
|
|
add r5, r5, #1
|
|
sub r6, r6, #1
|
|
and r5, r5, #0xff
|
|
cmp r5, #0x80
|
|
moveq r5, #0
|
|
ldrb r7, [r7, #4]
|
|
and r6, r6, #0xff
|
|
cmp sl, #0
|
|
bne _02072B28
|
|
tst r7, #0x80
|
|
bne _02072A4C
|
|
add sl, sl, #1
|
|
strb sl, [r8, #0x88]
|
|
ldr r8, [sb]
|
|
strb r7, [r8, #0x8c]
|
|
b _02072B30
|
|
_02072A4C:
|
|
and sl, r7, #0xf0
|
|
strb sl, [r8, #0x8a]
|
|
and r8, r7, #0xf
|
|
ldr r7, [sb]
|
|
strb r8, [r7, #0x8b]
|
|
ldr r7, [sb]
|
|
ldrb r8, [r7, #0x8a]
|
|
cmp r8, #0xc0
|
|
bgt _02072AA8
|
|
bge _02072AF8
|
|
cmp r8, #0x90
|
|
bgt _02072A8C
|
|
bge _02072AE0
|
|
cmp r8, #0x80
|
|
beq _02072AD8
|
|
b _02072B1C
|
|
_02072A8C:
|
|
cmp r8, #0xa0
|
|
bgt _02072A9C
|
|
beq _02072AE8
|
|
b _02072B1C
|
|
_02072A9C:
|
|
cmp r8, #0xb0
|
|
beq _02072AF0
|
|
b _02072B1C
|
|
_02072AA8:
|
|
cmp r8, #0xe0
|
|
bgt _02072AC0
|
|
bge _02072B08
|
|
cmp r8, #0xd0
|
|
beq _02072B00
|
|
b _02072B1C
|
|
_02072AC0:
|
|
cmp r8, #0xf0
|
|
bgt _02072AD0
|
|
beq _02072B10
|
|
b _02072B1C
|
|
_02072AD0:
|
|
cmp r8, #0xff
|
|
b _02072B1C
|
|
_02072AD8:
|
|
strb r4, [r7, #0x87]
|
|
b _02072B30
|
|
_02072AE0:
|
|
strb lr, [r7, #0x87]
|
|
b _02072B30
|
|
_02072AE8:
|
|
strb ip, [r7, #0x87]
|
|
b _02072B30
|
|
_02072AF0:
|
|
strb r3, [r7, #0x87]
|
|
b _02072B30
|
|
_02072AF8:
|
|
strb r2, [r7, #0x87]
|
|
b _02072B30
|
|
_02072B00:
|
|
strb r1, [r7, #0x87]
|
|
b _02072B30
|
|
_02072B08:
|
|
strb fp, [r7, #0x87]
|
|
b _02072B30
|
|
_02072B10:
|
|
mov r8, #3
|
|
strb r8, [r7, #0x87]
|
|
b _02072B30
|
|
_02072B1C:
|
|
mov r8, #0
|
|
strb r8, [r7, #0x87]
|
|
b _02072B30
|
|
_02072B28:
|
|
add r8, r8, sl
|
|
strb r7, [r8, #0x8b]
|
|
_02072B30:
|
|
ldr r7, [sb]
|
|
ldrb r8, [r7, #0x88]
|
|
add r8, r8, #1
|
|
strb r8, [r7, #0x88]
|
|
ldr r8, [sb]
|
|
ldrb sl, [r8, #0x88]
|
|
ldrb r7, [r8, #0x87]
|
|
cmp sl, r7
|
|
bne _02072B90
|
|
mov r2, #0
|
|
ldr r1, _02072BB4 ; =_022B9584
|
|
strb r2, [r8, #0x88]
|
|
ldr r3, [r1]
|
|
mov r1, #1
|
|
str r1, [sp]
|
|
ldrb r2, [r3, #0x8a]
|
|
ldrb r1, [r3, #0x8b]
|
|
strb r2, [r0]
|
|
strb r1, [r0, #1]
|
|
ldrb r2, [r3, #0x8c]
|
|
ldrb r1, [r3, #0x8d]
|
|
strb r2, [r0, #2]
|
|
strb r1, [r0, #3]
|
|
b _02072B98
|
|
_02072B90:
|
|
cmp r6, #0
|
|
bne _02072A04
|
|
_02072B98:
|
|
ldr r1, _02072BB4 ; =_022B9584
|
|
ldr r0, [sp]
|
|
ldr r2, [r1]
|
|
strb r6, [r2, #0x86]
|
|
ldr r1, [r1]
|
|
strb r5, [r1, #0x85]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_02072BB4: .word _022B9584
|
|
arm_func_end sub_020729B8
|
|
|
|
arm_func_start sub_02072BB8
|
|
sub_02072BB8: ; 0x02072BB8
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0xc
|
|
ldr r0, _02072D94 ; =_022B9584
|
|
ldr r0, [r0]
|
|
ldr r4, [r0]
|
|
cmp r4, #0
|
|
addeq sp, sp, #0xc
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
add r0, sp, #8
|
|
bl sub_020729B8
|
|
cmp r0, #0
|
|
addeq sp, sp, #0xc
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
add sb, r4, #0x10
|
|
mov r6, #0
|
|
ldr r4, _02072D98 ; =_020B0D50
|
|
add r7, sp, #0
|
|
mov r5, #1
|
|
mov r8, r6
|
|
mov fp, #0xc8
|
|
_02072C08:
|
|
ldrb r1, [sp, #9]
|
|
ldrb r0, [sp, #8]
|
|
mla sl, r1, fp, sb
|
|
cmp r0, #0xc0
|
|
bgt _02072C4C
|
|
bge _02072D4C
|
|
cmp r0, #0x90
|
|
bgt _02072C38
|
|
bge _02072CC0
|
|
cmp r0, #0x80
|
|
beq _02072C8C
|
|
b _02072D7C
|
|
_02072C38:
|
|
cmp r0, #0xa0
|
|
ble _02072D7C
|
|
cmp r0, #0xb0
|
|
beq _02072D2C
|
|
b _02072D7C
|
|
_02072C4C:
|
|
cmp r0, #0xf0
|
|
bgt _02072C6C
|
|
bge _02072D7C
|
|
cmp r0, #0xd0
|
|
ble _02072D7C
|
|
cmp r0, #0xe0
|
|
beq _02072D5C
|
|
b _02072D7C
|
|
_02072C6C:
|
|
cmp r0, #0xf7
|
|
ble _02072D7C
|
|
cmp r0, #0xff
|
|
bgt _02072D7C
|
|
cmp r0, #0xfe
|
|
blt _02072D7C
|
|
cmpne r0, #0xff
|
|
b _02072D7C
|
|
_02072C8C:
|
|
ldrb r1, [sp, #0xa]
|
|
ldrb r0, [sp, #0xb]
|
|
str r8, [sp, #4]
|
|
strb r1, [sp, #2]
|
|
strb r0, [sp, #3]
|
|
strb r8, [sp]
|
|
ldrb r0, [sl, #4]
|
|
tst r0, #1
|
|
bne _02072D7C
|
|
mov r0, sl
|
|
mov r1, r7
|
|
bl DseChannel_ReleaseNoteInternal
|
|
b _02072D7C
|
|
_02072CC0:
|
|
ldrb r0, [sp, #0xb]
|
|
ldrb r1, [sp, #0xa]
|
|
str r6, [sp, #4]
|
|
strb r0, [sp, #3]
|
|
strb r1, [sp, #2]
|
|
tst r0, #0xff
|
|
beq _02072D0C
|
|
mov r0, sl
|
|
mov r1, r7
|
|
strb r5, [sp]
|
|
bl DseChannel_ReleaseNote
|
|
mov r0, sl
|
|
mov r1, r7
|
|
bl DseChannel_AllocateNote
|
|
movs r1, r0
|
|
beq _02072D7C
|
|
mov r0, sl
|
|
bl DseVoice_PlayNote
|
|
b _02072D7C
|
|
_02072D0C:
|
|
strb r6, [sp]
|
|
ldrb r0, [sl, #4]
|
|
tst r0, #1
|
|
bne _02072D7C
|
|
mov r0, sl
|
|
mov r1, r7
|
|
bl DseChannel_ReleaseNoteInternal
|
|
b _02072D7C
|
|
_02072D2C:
|
|
ldrb r0, [sp, #0xa]
|
|
ldr r2, [r4, r0, lsl #2]
|
|
cmp r2, #0
|
|
beq _02072D7C
|
|
ldrb r1, [sp, #0xb]
|
|
mov r0, sl
|
|
blx r2
|
|
b _02072D7C
|
|
_02072D4C:
|
|
ldrb r1, [sp, #0xa]
|
|
mov r0, sl
|
|
bl DseChannel_SetInstrument
|
|
b _02072D7C
|
|
_02072D5C:
|
|
ldrb r2, [sp, #0xa]
|
|
ldrb r1, [sp, #0xb]
|
|
mov r0, sl
|
|
add r1, r2, r1, lsl #7
|
|
sub r1, r1, #0x2000
|
|
mov r1, r1, lsl #0x10
|
|
mov r1, r1, asr #0x10
|
|
bl DseChannel_SetKeyBend
|
|
_02072D7C:
|
|
add r0, sp, #8
|
|
bl sub_020729B8
|
|
cmp r0, #0
|
|
bne _02072C08
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_02072D94: .word _022B9584
|
|
_02072D98: .word _020B0D50
|
|
arm_func_end sub_02072BB8
|
|
|
|
arm_func_start sub_02072D9C
|
|
sub_02072D9C: ; 0x02072D9C
|
|
ldrh r2, [r0, #0xe]
|
|
ldr ip, _02072DB8 ; =DseChannel_SetBank
|
|
and r2, r2, #0xff
|
|
add r1, r2, r1, lsl #8
|
|
strh r1, [r0, #0xe]
|
|
ldrh r1, [r0, #0xe]
|
|
bx ip
|
|
.align 2, 0
|
|
_02072DB8: .word DseChannel_SetBank
|
|
arm_func_end sub_02072D9C
|
|
|
|
arm_func_start sub_02072DBC
|
|
sub_02072DBC: ; 0x02072DBC
|
|
ldrh r2, [r0, #0xe]
|
|
ldr ip, _02072DD8 ; =DseChannel_SetBank
|
|
bic r2, r2, #0xff
|
|
add r1, r2, r1
|
|
mov r1, r1, lsl #0x10
|
|
mov r1, r1, lsr #0x10
|
|
bx ip
|
|
.align 2, 0
|
|
_02072DD8: .word DseChannel_SetBank
|
|
arm_func_end sub_02072DBC
|
|
|
|
arm_func_start sub_02072DDC
|
|
sub_02072DDC: ; 0x02072DDC
|
|
mov r1, r1, lsl #0x18
|
|
mov r1, r1, asr #0x18
|
|
ldr ip, _02072DF0 ; =DseChannel_SetLfoConstEnvelopeLevel
|
|
strb r1, [r0, #0x51]
|
|
bx ip
|
|
.align 2, 0
|
|
_02072DF0: .word DseChannel_SetLfoConstEnvelopeLevel
|
|
arm_func_end sub_02072DDC
|
|
|
|
arm_func_start sub_02072DF4
|
|
sub_02072DF4: ; 0x02072DF4
|
|
mov r2, #0xa
|
|
mul r2, r1, r2
|
|
strh r2, [r0, #0x56]
|
|
bx lr
|
|
arm_func_end sub_02072DF4
|
|
|
|
arm_func_start sub_02072E04
|
|
sub_02072E04: ; 0x02072E04
|
|
stmdb sp!, {r4, lr}
|
|
mov r2, r1, lsl #0x10
|
|
str r2, [r0, #0x34]
|
|
str r2, [r0, #0x2c]
|
|
mov r4, #0
|
|
strh r4, [r0, #0x38]
|
|
ldrb r3, [r0, #0x50]
|
|
ldr lr, [r0, #0xc4]
|
|
ldr r2, _02072E88 ; =0x82061029
|
|
mul ip, r1, r3
|
|
ldrsb r1, [lr, #8]
|
|
ldr r3, _02072E8C ; =0x04000208
|
|
mul ip, r1, ip
|
|
smull r1, lr, r2, ip
|
|
add lr, ip, lr
|
|
mov r1, ip, lsr #0x1f
|
|
add lr, r1, lr, asr #13
|
|
strh lr, [r0, #0x18]
|
|
ldrh r2, [r3]
|
|
strh r4, [r3]
|
|
ldr r1, [r0, #0xb4]
|
|
cmp r1, #0
|
|
beq _02072E78
|
|
_02072E60:
|
|
ldrh r0, [r1, #6]
|
|
orr r0, r0, #0x20
|
|
strh r0, [r1, #6]
|
|
ldr r1, [r1, #0x154]
|
|
cmp r1, #0
|
|
bne _02072E60
|
|
_02072E78:
|
|
ldr r1, _02072E8C ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r2, [r1]
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_02072E88: .word 0x82061029
|
|
_02072E8C: .word 0x04000208
|
|
arm_func_end sub_02072E04
|
|
|
|
arm_func_start sub_02072E90
|
|
sub_02072E90: ; 0x02072E90
|
|
mov r1, r1, lsl #0x10
|
|
str r1, [r0, #0x44]
|
|
str r1, [r0, #0x3c]
|
|
mov r2, #0
|
|
ldr r1, _02072EE4 ; =0x04000208
|
|
strh r2, [r0, #0x48]
|
|
ldrh r3, [r1]
|
|
strh r2, [r1]
|
|
ldr r1, [r0, #0xb4]
|
|
cmp r1, #0
|
|
beq _02072ED4
|
|
_02072EBC:
|
|
ldrh r0, [r1, #6]
|
|
orr r0, r0, #0x40
|
|
strh r0, [r1, #6]
|
|
ldr r1, [r1, #0x154]
|
|
cmp r1, #0
|
|
bne _02072EBC
|
|
_02072ED4:
|
|
ldr r1, _02072EE4 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r3, [r1]
|
|
bx lr
|
|
.align 2, 0
|
|
_02072EE4: .word 0x04000208
|
|
arm_func_end sub_02072E90
|
|
|
|
arm_func_start sub_02072EE8
|
|
sub_02072EE8: ; 0x02072EE8
|
|
ldr r2, _02072F30 ; =0x04000208
|
|
strb r1, [r0, #0x50]
|
|
ldrh r3, [r2]
|
|
mov r1, #0
|
|
strh r1, [r2]
|
|
ldr r1, [r0, #0xb4]
|
|
cmp r1, #0
|
|
beq _02072F20
|
|
_02072F08:
|
|
ldrh r0, [r1, #6]
|
|
orr r0, r0, #0x20
|
|
strh r0, [r1, #6]
|
|
ldr r1, [r1, #0x154]
|
|
cmp r1, #0
|
|
bne _02072F08
|
|
_02072F20:
|
|
ldr r1, _02072F30 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r3, [r1]
|
|
bx lr
|
|
.align 2, 0
|
|
_02072F30: .word 0x04000208
|
|
arm_func_end sub_02072EE8
|
|
|
|
arm_func_start sub_02072F34
|
|
sub_02072F34: ; 0x02072F34
|
|
strb r1, [r0, #0x58]
|
|
bx lr
|
|
arm_func_end sub_02072F34
|
|
|
|
arm_func_start sub_02072F3C
|
|
sub_02072F3C: ; 0x02072F3C
|
|
stmdb sp!, {r3, lr}
|
|
cmp r1, #0x40
|
|
ldrb r1, [r0, #4]
|
|
orrhs r1, r1, #1
|
|
strhsb r1, [r0, #4]
|
|
ldmhsia sp!, {r3, pc}
|
|
bic r1, r1, #1
|
|
strb r1, [r0, #4]
|
|
bl DseVoice_ReleaseHeld
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end sub_02072F3C
|
|
|
|
arm_func_start sub_02072F64
|
|
sub_02072F64: ; 0x02072F64
|
|
bx lr
|
|
arm_func_end sub_02072F64
|
|
|
|
arm_func_start sub_02072F68
|
|
sub_02072F68: ; 0x02072F68
|
|
bx lr
|
|
arm_func_end sub_02072F68
|
|
|
|
arm_func_start sub_02072F6C
|
|
sub_02072F6C: ; 0x02072F6C
|
|
bx lr
|
|
arm_func_end sub_02072F6C
|
|
|
|
arm_func_start sub_02072F70
|
|
sub_02072F70: ; 0x02072F70
|
|
bx lr
|
|
arm_func_end sub_02072F70
|
|
|
|
arm_func_start sub_02072F74
|
|
sub_02072F74: ; 0x02072F74
|
|
strb r1, [r0, #0x5c]
|
|
mov r1, #1
|
|
strb r1, [r0, #0x60]
|
|
bx lr
|
|
arm_func_end sub_02072F74
|
|
|
|
arm_func_start sub_02072F84
|
|
sub_02072F84: ; 0x02072F84
|
|
strb r1, [r0, #0x5a]
|
|
mov r1, #0
|
|
strb r1, [r0, #0x60]
|
|
bx lr
|
|
arm_func_end sub_02072F84
|
|
|
|
arm_func_start sub_02072F94
|
|
sub_02072F94: ; 0x02072F94
|
|
strb r1, [r0, #0x5b]
|
|
mov r1, #0
|
|
strb r1, [r0, #0x60]
|
|
bx lr
|
|
arm_func_end sub_02072F94
|
|
|
|
arm_func_start sub_02072FA4
|
|
sub_02072FA4: ; 0x02072FA4
|
|
bx lr
|
|
arm_func_end sub_02072FA4
|
|
|
|
arm_func_start sub_02072FA8
|
|
sub_02072FA8: ; 0x02072FA8
|
|
bx lr
|
|
arm_func_end sub_02072FA8
|
|
|
|
arm_func_start sub_02072FAC
|
|
sub_02072FAC: ; 0x02072FAC
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _02072FD4 ; =_022B9584
|
|
ldr r0, [r0]
|
|
ldr r0, [r0]
|
|
bl DseSynth_StopChannels
|
|
ldr r0, _02072FD4 ; =_022B9584
|
|
ldr r0, [r0]
|
|
ldr r0, [r0]
|
|
bl DseSynth_ClearHeldNotes
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02072FD4: .word _022B9584
|
|
arm_func_end sub_02072FAC
|
|
|
|
arm_func_start sub_02072FD8
|
|
sub_02072FD8: ; 0x02072FD8
|
|
ldr r0, _02072FF4 ; =_022B9584
|
|
mov r1, #0
|
|
ldr r0, [r0]
|
|
ldr ip, _02072FF8 ; =DseSynth_SetBankAndSequence
|
|
mov r2, r1
|
|
ldr r0, [r0]
|
|
bx ip
|
|
.align 2, 0
|
|
_02072FF4: .word _022B9584
|
|
_02072FF8: .word DseSynth_SetBankAndSequence
|
|
arm_func_end sub_02072FD8
|
|
|
|
arm_func_start sub_02072FFC
|
|
sub_02072FFC: ; 0x02072FFC
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r0
|
|
bl DseChannel_DeallocateVoices
|
|
ldr r1, _02073074 ; =0x04000208
|
|
mov r0, #0
|
|
ldrh r5, [r1]
|
|
strh r0, [r1]
|
|
ldr lr, [r4, #0xb8]
|
|
cmp lr, #0
|
|
ldreqh r0, [r1]
|
|
streqh r5, [r1]
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov ip, lr
|
|
mvn r1, #0
|
|
mov r3, r0
|
|
_02073038:
|
|
str r1, [lr, #4]
|
|
strb r3, [ip, #1]
|
|
ldr r0, [ip, #8]
|
|
cmp r0, #0
|
|
movne ip, r0
|
|
bne _02073038
|
|
ldr r0, _02073078 ; =DRIVER_WORK
|
|
ldr r1, _02073074 ; =0x04000208
|
|
ldr r2, [r0, #0x650]
|
|
str r2, [ip, #8]
|
|
str lr, [r0, #0x650]
|
|
str r3, [r4, #0xb8]
|
|
ldrh r0, [r1]
|
|
strh r5, [r1]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02073074: .word 0x04000208
|
|
_02073078: .word DRIVER_WORK
|
|
arm_func_end sub_02072FFC
|
|
|
|
arm_func_start sub_0207307C
|
|
sub_0207307C: ; 0x0207307C
|
|
mov r1, #0
|
|
strb r1, [r0, #7]
|
|
bx lr
|
|
arm_func_end sub_0207307C
|
|
|
|
arm_func_start sub_02073088
|
|
sub_02073088: ; 0x02073088
|
|
mov r1, #1
|
|
strb r1, [r0, #7]
|
|
bx lr
|
|
arm_func_end sub_02073088
|
|
|
|
arm_func_start sub_02073094
|
|
sub_02073094: ; 0x02073094
|
|
ldr ip, _020730A4 ; =SoundEnvelopeParameters_CheckValidity
|
|
strb r1, [r0, #0x72]
|
|
add r0, r0, #0x64
|
|
bx ip
|
|
.align 2, 0
|
|
_020730A4: .word SoundEnvelopeParameters_CheckValidity
|
|
arm_func_end sub_02073094
|
|
|
|
arm_func_start sub_020730A8
|
|
sub_020730A8: ; 0x020730A8
|
|
ldr ip, _020730B8 ; =SoundEnvelopeParameters_CheckValidity
|
|
strb r1, [r0, #0x6d]
|
|
add r0, r0, #0x64
|
|
bx ip
|
|
.align 2, 0
|
|
_020730B8: .word SoundEnvelopeParameters_CheckValidity
|
|
arm_func_end sub_020730A8
|
|
|
|
arm_func_start sub_020730BC
|
|
sub_020730BC: ; 0x020730BC
|
|
ldr ip, _020730CC ; =SoundEnvelopeParameters_CheckValidity
|
|
strb r1, [r0, #0x6e]
|
|
add r0, r0, #0x64
|
|
bx ip
|
|
.align 2, 0
|
|
_020730CC: .word SoundEnvelopeParameters_CheckValidity
|
|
arm_func_end sub_020730BC
|
|
|
|
arm_func_start sub_020730D0
|
|
sub_020730D0: ; 0x020730D0
|
|
ldr ip, _020730E0 ; =SoundEnvelopeParameters_CheckValidity
|
|
strb r1, [r0, #0x71]
|
|
add r0, r0, #0x64
|
|
bx ip
|
|
.align 2, 0
|
|
_020730E0: .word SoundEnvelopeParameters_CheckValidity
|
|
arm_func_end sub_020730D0
|
|
|
|
arm_func_start sub_020730E4
|
|
sub_020730E4: ; 0x020730E4
|
|
ldrb r2, [r0, #0x61]
|
|
add r1, r1, r1, lsl #2
|
|
add r0, r0, r2, lsl #4
|
|
strh r1, [r0, #0x7c]
|
|
bx lr
|
|
arm_func_end sub_020730E4
|
|
|
|
arm_func_start sub_020730F8
|
|
sub_020730F8: ; 0x020730F8
|
|
and r3, r1, #2
|
|
add r2, r0, #0x74
|
|
strb r3, [r0, #0x61]
|
|
add r2, r2, r3, lsl #4
|
|
mov r0, r1, asr #2
|
|
strb r0, [r2, #1]
|
|
add r0, r3, #1
|
|
strb r0, [r2, #2]
|
|
bx lr
|
|
arm_func_end sub_020730F8
|
|
|
|
arm_func_start sub_0207311C
|
|
sub_0207311C: ; 0x0207311C
|
|
ldrb r2, [r0, #0x61]
|
|
add r0, r0, r2, lsl #4
|
|
strb r1, [r0, #0x77]
|
|
bx lr
|
|
arm_func_end sub_0207311C
|
|
|
|
arm_func_start sub_0207312C
|
|
sub_0207312C: ; 0x0207312C
|
|
ldrb r2, [r0, #0x61]
|
|
add r0, r0, #0x74
|
|
add r0, r0, r2, lsl #4
|
|
ldrb r2, [r0, #2]
|
|
cmp r2, #4
|
|
addls pc, pc, r2, lsl #2
|
|
b _020731AC
|
|
_02073148: ; jump table
|
|
b _020731AC ; case 0
|
|
b _0207315C ; case 1
|
|
b _02073170 ; case 2
|
|
b _02073184 ; case 3
|
|
b _02073198 ; case 4
|
|
_0207315C:
|
|
mov r2, #0xa
|
|
mul r2, r1, r2
|
|
mov r1, r2, lsl #0x10
|
|
mov r1, r1, asr #0x10
|
|
b _020731BC
|
|
_02073170:
|
|
mvn r2, #0x13
|
|
mul r2, r1, r2
|
|
mov r1, r2, lsl #0x10
|
|
mov r1, r1, asr #0x10
|
|
b _020731BC
|
|
_02073184:
|
|
mov r2, #0x14
|
|
mul r2, r1, r2
|
|
mov r1, r2, lsl #0x10
|
|
mov r1, r1, asr #0x10
|
|
b _020731BC
|
|
_02073198:
|
|
mov r2, #0xa
|
|
mul r2, r1, r2
|
|
mov r1, r2, lsl #0x10
|
|
mov r1, r1, asr #0x10
|
|
b _020731BC
|
|
_020731AC:
|
|
mov r2, #0x14
|
|
mul r2, r1, r2
|
|
mov r1, r2, lsl #0x10
|
|
mov r1, r1, asr #0x10
|
|
_020731BC:
|
|
str r1, [r0, #4]
|
|
bx lr
|
|
arm_func_end sub_0207312C
|
|
|
|
arm_func_start sub_020731C4
|
|
sub_020731C4: ; 0x020731C4
|
|
mov r2, #0x14
|
|
mul r2, r1, r2
|
|
ldrb r1, [r0, #0x61]
|
|
add r0, r0, r1, lsl #4
|
|
strh r2, [r0, #0x7e]
|
|
bx lr
|
|
arm_func_end sub_020731C4
|
|
|
|
arm_func_start sub_020731DC
|
|
sub_020731DC: ; 0x020731DC
|
|
mov r2, #0x14
|
|
mul r2, r1, r2
|
|
ldrb r1, [r0, #0x61]
|
|
add r0, r0, r1, lsl #4
|
|
strh r2, [r0, #0x80]
|
|
bx lr
|
|
arm_func_end sub_020731DC
|
|
|
|
arm_func_start sub_020731F4
|
|
sub_020731F4: ; 0x020731F4
|
|
strb r1, [r0, #0x59]
|
|
bx lr
|
|
arm_func_end sub_020731F4
|
|
|
|
arm_func_start sub_020731FC
|
|
sub_020731FC: ; 0x020731FC
|
|
bx lr
|
|
arm_func_end sub_020731FC
|
|
|
|
arm_func_start sub_02073200
|
|
sub_02073200: ; 0x02073200
|
|
bx lr
|
|
arm_func_end sub_02073200
|
|
|
|
arm_func_start sub_02073204
|
|
sub_02073204: ; 0x02073204
|
|
bx lr
|
|
arm_func_end sub_02073204
|
|
|
|
arm_func_start DseSynth_Reset
|
|
DseSynth_Reset: ; 0x02073208
|
|
stmdb sp!, {r4, lr}
|
|
ldr r1, _02073274 ; =DRIVER_WORK
|
|
mov r2, #1
|
|
ldrsb r3, [r1, #0x41]
|
|
mov r4, #0
|
|
mov r1, #0x7f
|
|
strb r3, [r0, #2]
|
|
strb r2, [r0, #3]
|
|
strh r4, [r0, #4]
|
|
strb r1, [r0, #6]
|
|
mov r1, #0x40
|
|
strb r1, [r0, #7]
|
|
ldrb ip, [r0, #2]
|
|
ldrsb r1, [r0, #6]
|
|
ldr r2, _02073278 ; =0x81020409
|
|
ldr r3, _0207327C ; =_022B7A30
|
|
smulbb ip, ip, r1
|
|
smull r1, lr, r2, ip
|
|
add lr, ip, lr
|
|
mov r1, ip, lsr #0x1f
|
|
add lr, r1, lr, asr #6
|
|
strb lr, [r0, #8]
|
|
strb r4, [r0, #9]
|
|
strb r4, [r0, #0xa]
|
|
ldrh r1, [r3, #0x2e]
|
|
strb r1, [r0, #0xb]
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_02073274: .word DRIVER_WORK
|
|
_02073278: .word 0x81020409
|
|
_0207327C: .word _022B7A30
|
|
arm_func_end DseSynth_Reset
|
|
|
|
arm_func_start DseSynth_AllocateNew
|
|
DseSynth_AllocateNew: ; 0x02073280
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r0, #0xc8
|
|
mul r0, r5, r0
|
|
mov r2, r1
|
|
add r0, r0, #0x10
|
|
mov r1, #0x10
|
|
bl DseMem_Allocate
|
|
movs r4, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r1, #0
|
|
strb r1, [r4]
|
|
strb r5, [r4, #1]
|
|
str r1, [r4, #0xc]
|
|
bl DseSynth_Reset
|
|
cmp r5, #0
|
|
add r1, r4, #0x10
|
|
mov r2, #0
|
|
ble _02073300
|
|
mov r0, r2
|
|
_020732D4:
|
|
str r0, [r1]
|
|
strb r2, [r1, #5]
|
|
str r0, [r1, #0xb4]
|
|
str r0, [r1, #0xb8]
|
|
str r0, [r1, #0xbc]
|
|
str r0, [r1, #0xc0]
|
|
add r2, r2, #1
|
|
str r4, [r1, #0xc4]
|
|
cmp r2, r5
|
|
add r1, r1, #0xc8
|
|
blt _020732D4
|
|
_02073300:
|
|
ldr r1, _02073348 ; =0x04000208
|
|
mov r0, #0
|
|
ldrh r3, [r1]
|
|
ldr r2, _0207334C ; =_022B7988
|
|
strh r0, [r1]
|
|
ldr r0, [r2]
|
|
cmp r0, #0
|
|
beq _02073330
|
|
_02073320:
|
|
add r2, r0, #0xc
|
|
ldr r0, [r0, #0xc]
|
|
cmp r0, #0
|
|
bne _02073320
|
|
_02073330:
|
|
ldr r1, _02073348 ; =0x04000208
|
|
str r4, [r2]
|
|
ldrh r0, [r1]
|
|
mov r0, r4
|
|
strh r3, [r1]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02073348: .word 0x04000208
|
|
_0207334C: .word _022B7988
|
|
arm_func_end DseSynth_AllocateNew
|
|
|
|
arm_func_start DseSynth_Unload
|
|
DseSynth_Unload: ; 0x02073350
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
bl DseSynth_StopChannels
|
|
ldr r2, _020733B4 ; =0x04000208
|
|
mov r0, r5
|
|
ldrh r4, [r2]
|
|
mov r1, #0
|
|
strh r1, [r2]
|
|
bl DseSynth_ClearHeldNotes
|
|
ldr r1, _020733B8 ; =_022B7988
|
|
b _02073380
|
|
_0207337C:
|
|
add r1, r0, #0xc
|
|
_02073380:
|
|
ldr r0, [r1]
|
|
cmp r0, #0
|
|
cmpne r0, r5
|
|
bne _0207337C
|
|
cmp r0, r5
|
|
ldreq r0, [r5, #0xc]
|
|
ldr r2, _020733B4 ; =0x04000208
|
|
streq r0, [r1]
|
|
ldrh r1, [r2]
|
|
mov r0, r5
|
|
strh r4, [r2]
|
|
bl DseMem_Free
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_020733B4: .word 0x04000208
|
|
_020733B8: .word _022B7988
|
|
arm_func_end DseSynth_Unload
|
|
|
|
arm_func_start DseSynth_ClearHeldNotes
|
|
DseSynth_ClearHeldNotes: ; 0x020733BC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
ldrb r3, [r0, #1]
|
|
add r1, r0, #0x10
|
|
mov r2, #0
|
|
cmp r3, #0
|
|
ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
ldr r7, _02073450 ; =0x04000208
|
|
ldr ip, _02073454 ; =DRIVER_WORK
|
|
mvn r5, #0
|
|
mov r4, r2
|
|
mov r6, r2
|
|
_020733E8:
|
|
ldrh r3, [r7]
|
|
strh r6, [r7]
|
|
ldr sb, [r1, #0xb8]
|
|
cmp sb, #0
|
|
ldreqh lr, [r7]
|
|
streqh r3, [r7]
|
|
beq _02073438
|
|
mov r8, sb
|
|
_02073408:
|
|
str r5, [sb, #4]
|
|
strb r4, [r8, #1]
|
|
ldr lr, [r8, #8]
|
|
cmp lr, #0
|
|
movne r8, lr
|
|
bne _02073408
|
|
ldr lr, [ip, #0x650]
|
|
str lr, [r8, #8]
|
|
str sb, [ip, #0x650]
|
|
str r4, [r1, #0xb8]
|
|
ldrh lr, [r7]
|
|
strh r3, [r7]
|
|
_02073438:
|
|
ldrb r3, [r0, #1]
|
|
add r2, r2, #1
|
|
add r1, r1, #0xc8
|
|
cmp r2, r3
|
|
blt _020733E8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_02073450: .word 0x04000208
|
|
_02073454: .word DRIVER_WORK
|
|
arm_func_end DseSynth_ClearHeldNotes
|
|
|
|
arm_func_start DseSynth_ResetAndSetBankAndSequence
|
|
DseSynth_ResetAndSetBankAndSequence: ; 0x02073458
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, r2
|
|
bl DseSynth_Reset
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, r4
|
|
bl DseSynth_SetBankAndSequence
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end DseSynth_ResetAndSetBankAndSequence
|
|
|
|
arm_func_start DseSynth_StopChannels
|
|
DseSynth_StopChannels: ; 0x02073480
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldrb r5, [r0, #1]
|
|
add r4, r0, #0x10
|
|
cmp r5, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
_02073494:
|
|
mov r0, r4
|
|
bl DseChannel_DeallocateVoices
|
|
subs r5, r5, #1
|
|
add r4, r4, #0xc8
|
|
bne _02073494
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end DseSynth_StopChannels
|
|
|
|
arm_func_start DseSynth_ResetAllVoiceTimersAndVolumes
|
|
DseSynth_ResetAllVoiceTimersAndVolumes: ; 0x020734AC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
ldr r3, _02073500 ; =0x04000208
|
|
mov r2, #0
|
|
ldrh r6, [r3]
|
|
mov r7, r1
|
|
add r4, r0, #0x10
|
|
strh r2, [r3]
|
|
strb r7, [r0, #9]
|
|
ldrb r5, [r0, #1]
|
|
cmp r5, #0
|
|
beq _020734F0
|
|
_020734D8:
|
|
mov r0, r4
|
|
mov r1, r7
|
|
bl DseChannel_ResetTimerAndVolumeForVoices
|
|
subs r5, r5, #1
|
|
add r4, r4, #0xc8
|
|
bne _020734D8
|
|
_020734F0:
|
|
ldr r1, _02073500 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r6, [r1]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_02073500: .word 0x04000208
|
|
arm_func_end DseSynth_ResetAllVoiceTimersAndVolumes
|
|
|
|
arm_func_start DseSynth_RestoreHeldNotes
|
|
DseSynth_RestoreHeldNotes: ; 0x02073504
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
ldr r2, _02073568 ; =0x04000208
|
|
ldrb r6, [r0, #1]
|
|
ldrh r4, [r2]
|
|
mov r1, #0
|
|
cmp r6, #0
|
|
strh r1, [r2]
|
|
add r5, r0, #0x10
|
|
beq _02073558
|
|
_02073528:
|
|
ldr r7, [r5, #0xb8]
|
|
cmp r7, #0
|
|
beq _0207354C
|
|
_02073534:
|
|
mov r0, r5
|
|
mov r1, r7
|
|
bl DseVoice_PlayNote
|
|
ldr r7, [r7, #8]
|
|
cmp r7, #0
|
|
bne _02073534
|
|
_0207354C:
|
|
subs r6, r6, #1
|
|
add r5, r5, #0xc8
|
|
bne _02073528
|
|
_02073558:
|
|
ldr r1, _02073568 ; =0x04000208
|
|
ldrh r0, [r1]
|
|
strh r4, [r1]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_02073568: .word 0x04000208
|
|
arm_func_end DseSynth_RestoreHeldNotes
|
|
|
|
arm_func_start DseSynth_SetGlobalVolumeIndex
|
|
DseSynth_SetGlobalVolumeIndex: ; 0x0207356C
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
ldr r3, _02073644 ; =_022B7370
|
|
ldr r4, _02073648 ; =0x81020409
|
|
ldrsb r5, [r3, r1]
|
|
add r3, r0, #0x10
|
|
mov ip, #0
|
|
strb r5, [r0, #2]
|
|
strb r1, [r0, #3]
|
|
ldrb r5, [r0, #2]
|
|
ldrsb r1, [r0, #6]
|
|
smulbb r5, r5, r1
|
|
smull r1, r6, r4, r5
|
|
add r6, r5, r6
|
|
mov r1, r5, lsr #0x1f
|
|
add r6, r1, r6, asr #6
|
|
strb r6, [r0, #8]
|
|
ldrb r1, [r0, #1]
|
|
cmp r1, #0
|
|
ldmleia sp!, {r4, r5, r6, r7, r8, pc}
|
|
ldr r6, _0207364C ; =0x04000208
|
|
mov r5, ip
|
|
_020735C0:
|
|
ldr r4, [r3, #0x2c]
|
|
ldrb r1, [r3, #0x50]
|
|
mov r4, r4, asr #0x10
|
|
ldrsb lr, [r0, #8]
|
|
mul r1, r4, r1
|
|
mul r7, lr, r1
|
|
ldr r4, _02073650 ; =0x82061029
|
|
mov r1, r7, lsr #0x1f
|
|
smull lr, r8, r4, r7
|
|
add r8, r7, r8
|
|
add r8, r1, r8, asr #13
|
|
strh r8, [r3, #0x18]
|
|
cmp r2, #1
|
|
bne _0207362C
|
|
ldrh r7, [r6]
|
|
strh r5, [r6]
|
|
ldr r4, [r3, #0xb4]
|
|
cmp r4, #0
|
|
beq _02073624
|
|
_0207360C:
|
|
ldrh r1, [r4, #6]
|
|
orr r1, r1, #0x20
|
|
strh r1, [r4, #6]
|
|
ldr r4, [r4, #0x154]
|
|
cmp r4, #0
|
|
bne _0207360C
|
|
_02073624:
|
|
ldrh r1, [r6]
|
|
strh r7, [r6]
|
|
_0207362C:
|
|
ldrb r1, [r0, #1]
|
|
add ip, ip, #1
|
|
add r3, r3, #0xc8
|
|
cmp ip, r1
|
|
blt _020735C0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_02073644: .word _022B7370
|
|
_02073648: .word 0x81020409
|
|
_0207364C: .word 0x04000208
|
|
_02073650: .word 0x82061029
|
|
arm_func_end DseSynth_SetGlobalVolumeIndex
|
|
|
|
arm_func_start DseSynth_SetBend
|
|
DseSynth_SetBend: ; 0x02073654
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
strh r1, [r0, #4]
|
|
ldrb r3, [r0, #1]
|
|
add r1, r0, #0x10
|
|
mov r2, #0
|
|
cmp r3, #0
|
|
ldmleia sp!, {r3, r4, r5, pc}
|
|
ldr lr, _020736E4 ; =0x04000208
|
|
mov ip, r2
|
|
_02073678:
|
|
ldr r3, [r1, #0x1c]
|
|
ldrsh r4, [r1, #0x54]
|
|
mov r3, r3, asr #0x10
|
|
mov r3, r3, lsl #0x10
|
|
ldrsh r5, [r0, #4]
|
|
add r3, r4, r3, asr #16
|
|
add r3, r5, r3
|
|
strh r3, [r1, #0x16]
|
|
ldrh r5, [lr]
|
|
strh ip, [lr]
|
|
ldr r4, [r1, #0xb4]
|
|
cmp r4, #0
|
|
beq _020736C4
|
|
_020736AC:
|
|
ldrh r3, [r4, #6]
|
|
orr r3, r3, #0x10
|
|
strh r3, [r4, #6]
|
|
ldr r4, [r4, #0x154]
|
|
cmp r4, #0
|
|
bne _020736AC
|
|
_020736C4:
|
|
ldrh r3, [lr]
|
|
add r2, r2, #1
|
|
add r1, r1, #0xc8
|
|
strh r5, [lr]
|
|
ldrb r3, [r0, #1]
|
|
cmp r2, r3
|
|
blt _02073678
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_020736E4: .word 0x04000208
|
|
arm_func_end DseSynth_SetBend
|
|
|
|
arm_func_start DseSynth_SetVolume
|
|
DseSynth_SetVolume: ; 0x020736E8
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
strb r1, [r0, #6]
|
|
ldrb r4, [r0, #2]
|
|
ldrsb r2, [r0, #6]
|
|
ldr r3, _020737AC ; =0x81020409
|
|
add r1, r0, #0x10
|
|
smulbb r4, r4, r2
|
|
smull r2, r5, r3, r4
|
|
add r5, r4, r5
|
|
mov r2, r4, lsr #0x1f
|
|
add r5, r2, r5, asr #6
|
|
strb r5, [r0, #8]
|
|
ldrb r3, [r0, #1]
|
|
mov r2, #0
|
|
cmp r3, #0
|
|
ldmleia sp!, {r4, r5, r6, pc}
|
|
ldr r4, _020737B0 ; =0x04000208
|
|
ldr ip, _020737B4 ; =0x82061029
|
|
mov lr, r2
|
|
_02073734:
|
|
ldr r5, [r1, #0x2c]
|
|
ldrb r3, [r1, #0x50]
|
|
mov r5, r5, asr #0x10
|
|
ldrsb r6, [r0, #8]
|
|
mul r3, r5, r3
|
|
mul r5, r6, r3
|
|
smull r3, r6, ip, r5
|
|
add r6, r5, r6
|
|
mov r3, r5, lsr #0x1f
|
|
add r6, r3, r6, asr #13
|
|
strh r6, [r1, #0x18]
|
|
ldrh r6, [r4]
|
|
strh lr, [r4]
|
|
ldr r5, [r1, #0xb4]
|
|
cmp r5, #0
|
|
beq _0207378C
|
|
_02073774:
|
|
ldrh r3, [r5, #6]
|
|
orr r3, r3, #0x20
|
|
strh r3, [r5, #6]
|
|
ldr r5, [r5, #0x154]
|
|
cmp r5, #0
|
|
bne _02073774
|
|
_0207378C:
|
|
ldrh r3, [r4]
|
|
add r2, r2, #1
|
|
add r1, r1, #0xc8
|
|
strh r6, [r4]
|
|
ldrb r3, [r0, #1]
|
|
cmp r2, r3
|
|
blt _02073734
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_020737AC: .word 0x81020409
|
|
_020737B0: .word 0x04000208
|
|
_020737B4: .word 0x82061029
|
|
arm_func_end DseSynth_SetVolume
|
|
|
|
arm_func_start DseSynth_SetPan
|
|
DseSynth_SetPan: ; 0x020737B8
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
strb r1, [r0, #7]
|
|
ldrb r3, [r0, #1]
|
|
add r1, r0, #0x10
|
|
mov r2, #0
|
|
cmp r3, #0
|
|
ldmleia sp!, {r3, r4, r5, pc}
|
|
ldr lr, _02073848 ; =0x04000208
|
|
mov ip, r2
|
|
_020737DC:
|
|
ldr r3, [r1, #0xc4]
|
|
ldr r4, [r1, #0x3c]
|
|
ldrsb r3, [r3, #7]
|
|
mov r4, r4, asr #0x10
|
|
and r4, r4, #0xff
|
|
sub r3, r3, #0x40
|
|
add r3, r4, r3
|
|
strh r3, [r1, #0x1a]
|
|
ldrh r5, [lr]
|
|
strh ip, [lr]
|
|
ldr r4, [r1, #0xb4]
|
|
cmp r4, #0
|
|
beq _02073828
|
|
_02073810:
|
|
ldrh r3, [r4, #6]
|
|
orr r3, r3, #0x40
|
|
strh r3, [r4, #6]
|
|
ldr r4, [r4, #0x154]
|
|
cmp r4, #0
|
|
bne _02073810
|
|
_02073828:
|
|
ldrh r3, [lr]
|
|
add r2, r2, #1
|
|
add r1, r1, #0xc8
|
|
strh r5, [lr]
|
|
ldrb r3, [r0, #1]
|
|
cmp r2, r3
|
|
blt _020737DC
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02073848: .word 0x04000208
|
|
arm_func_end DseSynth_SetPan
|
|
|
|
arm_func_start DseSynth_SetBankAndSequence
|
|
DseSynth_SetBankAndSequence: ; 0x0207384C
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
ldr r3, _020738D8 ; =DRIVER_WORK
|
|
mov sl, r0
|
|
ldrsb r6, [r3, #0x3d]
|
|
mov r7, #0
|
|
mov sb, r1
|
|
strb r7, [r3, #0x3d]
|
|
ldrb r0, [sl, #1]
|
|
mov r8, r2
|
|
add r5, sl, #0x10
|
|
cmp r0, #0
|
|
ble _020738CC
|
|
mov r0, sb, lsl #0x10
|
|
mov r4, r0, lsr #0x10
|
|
_02073884:
|
|
mov r0, r5
|
|
bl DseChannel_DeallocateVoices
|
|
mov r0, r5
|
|
mov r1, r8
|
|
bl DseChannel_Init
|
|
cmp sb, #0
|
|
blt _020738B8
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl DseChannel_SetBank
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl DseChannel_SetInstrument
|
|
_020738B8:
|
|
ldrb r0, [sl, #1]
|
|
add r7, r7, #1
|
|
add r5, r5, #0xc8
|
|
cmp r7, r0
|
|
blt _02073884
|
|
_020738CC:
|
|
ldr r0, _020738D8 ; =DRIVER_WORK
|
|
strb r6, [r0, #0x3d]
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_020738D8: .word DRIVER_WORK
|
|
arm_func_end DseSynth_SetBankAndSequence
|
|
|
|
arm_func_start DseChannel_Init
|
|
DseChannel_Init: ; 0x020738DC
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r0
|
|
str r1, [r4]
|
|
mov r0, #0
|
|
strb r0, [r4, #4]
|
|
strb r0, [r4, #6]
|
|
mov r1, #1
|
|
strb r1, [r4, #7]
|
|
ldr r1, _02073A80 ; =_022B7A30
|
|
strb r0, [r4, #8]
|
|
ldrh r3, [r1, #0x2e]
|
|
ldr r1, _02073A84 ; =DRIVER_WORK
|
|
mov r2, #0x7f
|
|
strb r3, [r4, #9]
|
|
strh r0, [r4, #0xa]
|
|
strb r0, [r4, #0xc]
|
|
strb r0, [r4, #0xd]
|
|
add r1, r1, #0x600
|
|
ldrsb ip, [r1, #0x74]
|
|
ldrsb r3, [r1, #0x94]
|
|
add r3, r3, ip, lsl #8
|
|
strh r3, [r4, #0xe]
|
|
strh r0, [r4, #0x10]
|
|
strh r0, [r4, #0x14]
|
|
str r0, [r4, #0x1c]
|
|
strh r0, [r4, #0x28]
|
|
ldrsb r3, [r1, #0x7b]
|
|
mov r3, r3, lsl #0x10
|
|
str r3, [r4, #0x2c]
|
|
strh r0, [r4, #0x38]
|
|
ldrsb r3, [r1, #0x7e]
|
|
mov r3, r3, lsl #0x10
|
|
str r3, [r4, #0x3c]
|
|
strh r0, [r4, #0x48]
|
|
strh r0, [r4, #0x54]
|
|
ldrsb r3, [r1, #0x7f]
|
|
strb r3, [r4, #0x50]
|
|
ldrsb r1, [r1, #0x75]
|
|
strb r1, [r4, #0x51]
|
|
strh r0, [r4, #0x52]
|
|
strh r0, [r4, #0x56]
|
|
strb r2, [r4, #0x58]
|
|
strb r0, [r4, #0x59]
|
|
strb r0, [r4, #0x5a]
|
|
strb r0, [r4, #0x5b]
|
|
strb r0, [r4, #0x5c]
|
|
strb r0, [r4, #0x5d]
|
|
strb r0, [r4, #0x5e]
|
|
strb r0, [r4, #0x5f]
|
|
strb r0, [r4, #0x60]
|
|
mov r2, r0
|
|
_020739A8:
|
|
add r1, r4, r0, lsl #4
|
|
strb r2, [r1, #0x75]
|
|
add r0, r0, #1
|
|
strb r2, [r1, #0x76]
|
|
cmp r0, #4
|
|
blt _020739A8
|
|
add r0, r4, #0x64
|
|
bl SoundEnvelopeParameters_Reset
|
|
mov r0, #0
|
|
ldr r1, _02073A88 ; =0x04000208
|
|
str r0, [r4, #0xb4]
|
|
ldrh r5, [r1]
|
|
strh r0, [r1]
|
|
ldr lr, [r4, #0xb8]
|
|
cmp lr, #0
|
|
ldreqh r0, [r1]
|
|
streqh r5, [r1]
|
|
beq _02073A34
|
|
mov ip, lr
|
|
mvn r1, #0
|
|
mov r3, r0
|
|
_020739FC:
|
|
str r1, [lr, #4]
|
|
strb r3, [ip, #1]
|
|
ldr r0, [ip, #8]
|
|
cmp r0, #0
|
|
movne ip, r0
|
|
bne _020739FC
|
|
ldr r0, _02073A84 ; =DRIVER_WORK
|
|
ldr r1, _02073A88 ; =0x04000208
|
|
ldr r2, [r0, #0x650]
|
|
str r2, [ip, #8]
|
|
str lr, [r0, #0x650]
|
|
str r3, [r4, #0xb8]
|
|
ldrh r0, [r1]
|
|
strh r5, [r1]
|
|
_02073A34:
|
|
mov r1, #0
|
|
str r1, [r4, #0xbc]
|
|
ldr r0, _02073A84 ; =DRIVER_WORK
|
|
str r1, [r4, #0xc0]
|
|
strh r1, [r4, #0x16]
|
|
add r0, r0, #0x600
|
|
ldrsb r3, [r0, #0x7b]
|
|
ldrsb r0, [r0, #0x7f]
|
|
ldr r1, _02073A8C ; =0x82061029
|
|
mov r2, #0x40
|
|
smulbb r0, r3, r0
|
|
rsb r3, r0, r0, lsl #7
|
|
smull r0, ip, r1, r3
|
|
add ip, r3, ip
|
|
mov r0, r3, lsr #0x1f
|
|
add ip, r0, ip, asr #13
|
|
strh ip, [r4, #0x18]
|
|
strh r2, [r4, #0x1a]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02073A80: .word _022B7A30
|
|
_02073A84: .word DRIVER_WORK
|
|
_02073A88: .word 0x04000208
|
|
_02073A8C: .word 0x82061029
|
|
arm_func_end DseChannel_Init
|
|
|
|
arm_func_start DseChannel_DeallocateVoices
|
|
DseChannel_DeallocateVoices: ; 0x02073A90
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
ldr r6, [r0, #0xb4]
|
|
mov r1, #0
|
|
str r1, [r0, #0xb4]
|
|
cmp r6, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
ldr r8, _02073B10 ; =_022B7A30
|
|
mov r5, r1
|
|
mov r4, r1
|
|
_02073AB4:
|
|
ldr r7, [r6, #0x154]
|
|
add r0, r6, #0x3c
|
|
strh r5, [r6, #4]
|
|
str r5, [r6, #0x158]
|
|
str r5, [r6, #0x154]
|
|
bl SoundEnvelope_Stop
|
|
ldr r0, [r6, #0x14c]
|
|
cmp r7, #0
|
|
and r0, r0, #0xff
|
|
str r0, [r6, #0x14c]
|
|
str r4, [r6]
|
|
strh r4, [r6, #0x18]
|
|
ldrh r2, [r6, #0xa]
|
|
ldrh r1, [r8, #0x32]
|
|
mov r6, r7
|
|
mvn r0, r2
|
|
and r0, r1, r0
|
|
strh r0, [r8, #0x32]
|
|
ldrh r0, [r8, #0x36]
|
|
orr r0, r0, r2
|
|
strh r0, [r8, #0x36]
|
|
bne _02073AB4
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_02073B10: .word _022B7A30
|
|
arm_func_end DseChannel_DeallocateVoices
|
|
|
|
arm_func_start DseChannel_ResetTimerAndVolumeForVoices
|
|
DseChannel_ResetTimerAndVolumeForVoices: ; 0x02073B14
|
|
cmp r1, #1
|
|
bne _02073B5C
|
|
ldrb r1, [r0, #4]
|
|
orr r1, r1, #0x40
|
|
strb r1, [r0, #4]
|
|
ldr r2, [r0, #0xb4]
|
|
cmp r2, #0
|
|
bxeq lr
|
|
mov r1, #0
|
|
_02073B38:
|
|
str r1, [r2, #0x13c]
|
|
str r1, [r2, #0x140]
|
|
ldrh r0, [r2, #6]
|
|
orr r0, r0, #0x30
|
|
strh r0, [r2, #6]
|
|
ldr r2, [r2, #0x154]
|
|
cmp r2, #0
|
|
bne _02073B38
|
|
bx lr
|
|
_02073B5C:
|
|
ldr r2, [r0, #0xb4]
|
|
cmp r2, #0
|
|
beq _02073B80
|
|
_02073B68:
|
|
ldrh r1, [r2, #6]
|
|
orr r1, r1, #0x30
|
|
strh r1, [r2, #6]
|
|
ldr r2, [r2, #0x154]
|
|
cmp r2, #0
|
|
bne _02073B68
|
|
_02073B80:
|
|
ldrb r1, [r0, #4]
|
|
bic r1, r1, #0x40
|
|
strb r1, [r0, #4]
|
|
bx lr
|
|
arm_func_end DseChannel_ResetTimerAndVolumeForVoices
|
|
|
|
arm_func_start DseChannel_SetBank
|
|
DseChannel_SetBank: ; 0x02073B90
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
mov r0, r1
|
|
strh r1, [r4, #0xe]
|
|
bl DseSwd_GetBankById
|
|
str r0, [r4, #0xbc]
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
streq r0, [r4, #0xc0]
|
|
ldmeqia sp!, {r4, pc}
|
|
ldrh r1, [r4, #0x10]
|
|
mov r0, r4
|
|
bl DseChannel_SetInstrument
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseChannel_SetBank
|
|
|
|
arm_func_start DseChannel_SetInstrument
|
|
DseChannel_SetInstrument: ; 0x02073BC8
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r5, r0
|
|
ldr r0, [r5, #0xbc]
|
|
mov r4, r1
|
|
cmp r0, #0
|
|
bne _02073BF0
|
|
mov r0, #0
|
|
str r0, [r5, #0xc0]
|
|
strh r0, [r5, #0x10]
|
|
b _02073C4C
|
|
_02073BF0:
|
|
mov r0, r4, lsl #0x10
|
|
mov r1, r0, asr #0x10
|
|
strh r1, [r5, #0x10]
|
|
ldr r0, [r5, #0xbc]
|
|
bl DseSwd_GetInstrument
|
|
movs lr, r0
|
|
beq _02073C48
|
|
mov r6, #0
|
|
strb r6, [r5, #0x59]
|
|
add r7, lr, #0x10
|
|
add r8, r5, #0x74
|
|
mov ip, r6
|
|
_02073C20:
|
|
ldrb r0, [r7, #1]
|
|
add r6, r6, #1
|
|
cmp r0, #0
|
|
ldmneia r7, {r0, r1, r2, r3}
|
|
stmneia r8, {r0, r1, r2, r3}
|
|
streqb ip, [r8, #1]
|
|
cmp r6, #4
|
|
add r7, r7, #0x10
|
|
add r8, r8, #0x10
|
|
blt _02073C20
|
|
_02073C48:
|
|
str lr, [r5, #0xc0]
|
|
_02073C4C:
|
|
add r0, r5, #0x64
|
|
bl SoundEnvelopeParameters_Reset
|
|
mov r0, r4
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
arm_func_end DseChannel_SetInstrument
|
|
|
|
arm_func_start DseChannel_SetLfoConstEnvelopeLevel
|
|
DseChannel_SetLfoConstEnvelopeLevel: ; 0x02073C5C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r1
|
|
strb r5, [r0, #0x51]
|
|
ldr r4, [r0, #0xb4]
|
|
cmp r4, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
_02073C74:
|
|
mov r1, r5
|
|
add r0, r4, #0x5c
|
|
bl SoundLfoBank_SetConstEnvelopes
|
|
ldr r4, [r4, #0x154]
|
|
cmp r4, #0
|
|
bne _02073C74
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end DseChannel_SetLfoConstEnvelopeLevel
|
|
|
|
arm_func_start DseChannel_SetKeyBend
|
|
DseChannel_SetKeyBend: ; 0x02073C90
|
|
strh r1, [r0, #0x52]
|
|
ldr r2, [r0, #0xb4]
|
|
cmp r2, #0
|
|
bxeq lr
|
|
mov r3, r1, lsl #8
|
|
_02073CA4:
|
|
ldrb r0, [r2, #0xf]
|
|
mul r1, r0, r3
|
|
mov r0, r1, asr #0xc
|
|
add r0, r1, r0, lsr #19
|
|
mov r0, r0, asr #0xd
|
|
strh r0, [r2, #0x10]
|
|
ldrh r0, [r2, #6]
|
|
orr r0, r0, #0x10
|
|
strh r0, [r2, #6]
|
|
ldr r2, [r2, #0x154]
|
|
cmp r2, #0
|
|
bne _02073CA4
|
|
bx lr
|
|
arm_func_end DseChannel_SetKeyBend
|
|
|
|
arm_func_start DseChannel_AllocateNote
|
|
DseChannel_AllocateNote: ; 0x02073CD8
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r0
|
|
ldrb r2, [r5, #0xd]
|
|
mov r4, r1
|
|
cmp r2, #0
|
|
beq _02073D18
|
|
ldrb r0, [r5, #0xc]
|
|
sub r0, r2, r0
|
|
add r6, r0, #1
|
|
bl DseUtil_GetRandomNumber
|
|
mul r1, r6, r0
|
|
mov r0, r1, asr #0xe
|
|
ldrb r2, [r5, #0xc]
|
|
add r0, r1, r0, lsr #17
|
|
add r0, r2, r0, asr #15
|
|
strb r0, [r4, #2]
|
|
_02073D18:
|
|
ldr r1, _02073D64 ; =DRIVER_WORK
|
|
ldr r0, [r1, #0x650]
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldrne r2, [r0, #8]
|
|
strne r2, [r1, #0x650]
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
ldr r3, [r4]
|
|
ldr r2, [r4, #4]
|
|
mov r1, #1
|
|
str r3, [r0]
|
|
str r2, [r0, #4]
|
|
strb r1, [r0, #1]
|
|
ldr r1, [r5, #0xb8]
|
|
str r1, [r0, #8]
|
|
str r0, [r5, #0xb8]
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02073D64: .word DRIVER_WORK
|
|
arm_func_end DseChannel_AllocateNote
|
|
|
|
arm_func_start DseChannel_ReleaseNoteInternal
|
|
DseChannel_ReleaseNoteInternal: ; 0x02073D68
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r7, r0
|
|
ldr r4, [r7, #0xb8]
|
|
mov r6, r1
|
|
cmp r4, #0
|
|
add r5, r7, #0xb8
|
|
beq _02073DE4
|
|
ldrb r1, [r6, #2]
|
|
_02073D88:
|
|
ldrb r0, [r4, #2]
|
|
cmp r0, r1
|
|
bne _02073DD4
|
|
ldr r8, [r7, #0xb4]
|
|
cmp r8, #0
|
|
beq _02073DC8
|
|
_02073DA0:
|
|
ldrb r1, [r8, #0xd]
|
|
ldrb r0, [r6, #2]
|
|
cmp r1, r0
|
|
bne _02073DBC
|
|
mov r0, r7
|
|
mov r1, r8
|
|
bl DseVoice_Release
|
|
_02073DBC:
|
|
ldr r8, [r8, #0x154]
|
|
cmp r8, #0
|
|
bne _02073DA0
|
|
_02073DC8:
|
|
ldr r0, [r4, #8]
|
|
str r0, [r5]
|
|
b _02073DE4
|
|
_02073DD4:
|
|
add r5, r4, #8
|
|
ldr r4, [r4, #8]
|
|
cmp r4, #0
|
|
bne _02073D88
|
|
_02073DE4:
|
|
ldr r0, _02073E0C ; =DRIVER_WORK
|
|
mvn r2, #0
|
|
ldr r3, [r0, #0x650]
|
|
mov r1, #0
|
|
str r3, [r4, #8]
|
|
str r4, [r0, #0x650]
|
|
str r2, [r4, #4]
|
|
mov r0, r4
|
|
strb r1, [r4, #1]
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_02073E0C: .word DRIVER_WORK
|
|
arm_func_end DseChannel_ReleaseNoteInternal
|
|
|
|
arm_func_start DseChannel_ChangeNote
|
|
DseChannel_ChangeNote: ; 0x02073E10
|
|
stmdb sp!, {r4, lr}
|
|
ldr r4, [r0, #0xb8]
|
|
cmp r4, #0
|
|
beq _02073E54
|
|
_02073E20:
|
|
ldrb r3, [r4, #2]
|
|
cmp r3, r2
|
|
bne _02073E48
|
|
ldr lr, [r1]
|
|
ldr ip, [r1, #4]
|
|
mov r3, #1
|
|
str lr, [r4]
|
|
str ip, [r4, #4]
|
|
strb r3, [r4, #1]
|
|
b _02073E54
|
|
_02073E48:
|
|
ldr r4, [r4, #8]
|
|
cmp r4, #0
|
|
bne _02073E20
|
|
_02073E54:
|
|
ldr ip, [r0, #0xb4]
|
|
cmp ip, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
_02073E60:
|
|
ldrb r0, [ip, #0xd]
|
|
cmp r0, r2
|
|
bne _02073E90
|
|
ldrb r0, [r1, #2]
|
|
strb r0, [ip, #0xd]
|
|
ldrb r3, [r1, #2]
|
|
ldrsh r0, [ip, #0x14]
|
|
add r0, r0, r3, lsl #8
|
|
strh r0, [ip, #0x12]
|
|
ldrh r0, [ip, #6]
|
|
orr r0, r0, #0x10
|
|
strh r0, [ip, #6]
|
|
_02073E90:
|
|
ldr ip, [ip, #0x154]
|
|
cmp ip, #0
|
|
bne _02073E60
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseChannel_ChangeNote
|
|
|
|
arm_func_start DseChannel_ReleaseNote
|
|
DseChannel_ReleaseNote: ; 0x02073EA0
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, [r0, #0xb8]
|
|
cmp r2, #0
|
|
ldmeqia sp!, {r3, pc}
|
|
ldrb r3, [r1, #2]
|
|
_02073EB4:
|
|
ldrb r1, [r2, #2]
|
|
cmp r1, r3
|
|
bne _02073ECC
|
|
mov r1, r2
|
|
bl DseChannel_ReleaseNoteInternal
|
|
ldmia sp!, {r3, pc}
|
|
_02073ECC:
|
|
ldr r2, [r2, #8]
|
|
cmp r2, #0
|
|
bne _02073EB4
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end DseChannel_ReleaseNote
|
|
|
|
arm_func_start DseVoice_PlayNote
|
|
DseVoice_PlayNote: ; 0x02073EDC
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0xc
|
|
mov sl, r0
|
|
ldrsh r4, [sl, #0xa]
|
|
mov sb, r1
|
|
cmp r4, #0
|
|
moveq r0, #0
|
|
streq r0, [sp]
|
|
beq _02073F28
|
|
bl DseUtil_GetRandomNumber
|
|
mov r1, r4, lsl #1
|
|
mul r2, r1, r0
|
|
mov r0, r2, asr #0xe
|
|
ldrsh r1, [sl, #0xa]
|
|
add r0, r2, r0, lsr #17
|
|
rsb r0, r1, r0, asr #15
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
str r0, [sp]
|
|
_02073F28:
|
|
ldr r6, [sl, #0xc0]
|
|
cmp r6, #0
|
|
addeq sp, sp, #0xc
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldr r7, [sl, #0xbc]
|
|
mov r5, #0
|
|
_02073F40:
|
|
ldrb r2, [sb, #2]
|
|
ldrsb r3, [sb, #3]
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl DseSwd_GetNextSplitInRange
|
|
movs r5, r0
|
|
addeq sp, sp, #0xc
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldrb r3, [r5, #0x1a]
|
|
ldrb r0, [r7, #0xc]
|
|
ldr r2, [r7, #0x18]
|
|
cmp r3, r0
|
|
movge r3, #0
|
|
add r1, r2, r3, lsl #3
|
|
ldr r2, [r2, r3, lsl #3]
|
|
ldr r1, [r1, #4]
|
|
mov r0, r7
|
|
str r2, [sp, #4]
|
|
str r1, [sp, #8]
|
|
ldrsh r1, [r5, #0x12]
|
|
bl ReadWaviEntry
|
|
movs fp, r0
|
|
beq _02073F40
|
|
ldrb r3, [sl, #5]
|
|
ldrb r2, [r5, #0x1a]
|
|
mov r0, sl
|
|
add r1, sp, #4
|
|
add r8, r2, r3, lsl #8
|
|
ldrb r3, [sp, #7]
|
|
mov r2, r8
|
|
bl DseVoice_Allocate
|
|
movs r4, r0
|
|
beq _02073F40
|
|
mov r0, #0
|
|
strh r0, [r4, #4]
|
|
ldr r0, [sl]
|
|
add fp, fp, #0x10
|
|
str r0, [r4]
|
|
strh r8, [r4, #0x18]
|
|
ldrsh r0, [r5, #0x12]
|
|
add ip, r4, #0x1c
|
|
strb r0, [r4, #0xe]
|
|
ldmia fp!, {r0, r1, r2, r3}
|
|
stmia ip!, {r0, r1, r2, r3}
|
|
ldmia fp, {r0, r1, r2, r3}
|
|
stmia ip, {r0, r1, r2, r3}
|
|
ldr r1, [r4, #0x30]
|
|
ldr r0, [r7, #0x1c]
|
|
add r0, r1, r0
|
|
str r0, [r4, #0x30]
|
|
ldrb r0, [sb, #2]
|
|
strb r0, [r4, #0xd]
|
|
ldrsb r1, [r5, #0x17]
|
|
ldrsh r0, [r5, #0x14]
|
|
add r1, r0, r1, lsl #8
|
|
ldr r0, [sp]
|
|
add r0, r0, r1
|
|
strh r0, [r4, #0x14]
|
|
ldrb r1, [sb, #2]
|
|
ldrsh r0, [r4, #0x14]
|
|
add r0, r0, r1, lsl #8
|
|
strh r0, [r4, #0x12]
|
|
ldrb r0, [r5, #0x19]
|
|
strb r0, [r4, #0x17]
|
|
ldr r0, _02074144 ; =DRIVER_WORK
|
|
ldrb r0, [r0, #0x39]
|
|
cmp r0, #7
|
|
bne _02074084
|
|
ldrb r1, [sl, #0x58]
|
|
ldrb r0, [sb, #3]
|
|
ldrb r2, [r6, #4]
|
|
ldrb r3, [r5, #0x18]
|
|
smulbb r0, r1, r0
|
|
mul r0, r2, r0
|
|
mul r2, r3, r0
|
|
ldr r0, _02074148 ; =0x4186143D
|
|
smull r1, r3, r0, r2
|
|
mov r0, r2, lsr #0x1f
|
|
add r3, r0, r3, asr #19
|
|
strb r3, [r4, #0x16]
|
|
b _020740B0
|
|
_02074084:
|
|
ldrb r1, [sb, #3]
|
|
ldrb r0, [r6, #4]
|
|
ldrb r2, [r5, #0x18]
|
|
smulbb r0, r1, r0
|
|
mul r3, r2, r0
|
|
ldr r0, _0207414C ; =0x82061029
|
|
smull r1, r2, r0, r3
|
|
add r2, r3, r2
|
|
mov r0, r3, lsr #0x1f
|
|
add r2, r0, r2, asr #13
|
|
strb r2, [r4, #0x16]
|
|
_020740B0:
|
|
ldrb r2, [sl, #0x59]
|
|
ldrsh r3, [sl, #0x52]
|
|
add r0, r4, #0x5c
|
|
cmp r2, #0
|
|
ldreqb r2, [r5, #2]
|
|
mov r3, r3, lsl #8
|
|
add r1, sl, #0x74
|
|
mul r8, r2, r3
|
|
mov r3, r8, asr #0xc
|
|
add r3, r8, r3, lsr #19
|
|
mov r3, r3, asr #0xd
|
|
strh r3, [r4, #0x10]
|
|
strb r2, [r4, #0xf]
|
|
ldrh r2, [r4, #6]
|
|
orr r2, r2, #0xff0
|
|
strh r2, [r4, #6]
|
|
ldrsb r2, [sl, #0x51]
|
|
bl SoundLfoBank_Set
|
|
add r0, r5, #0x20
|
|
add r8, r4, #0x3c
|
|
ldmia r0, {r0, r1, r2, r3}
|
|
stmia r8, {r0, r1, r2, r3}
|
|
mov r0, #1
|
|
strb r0, [r4, #0x3c]
|
|
ldrb r0, [sl, #0x64]
|
|
cmp r0, #0
|
|
beq _02074128
|
|
mov r0, r8
|
|
add r1, sl, #0x64
|
|
bl SoundEnvelope_SetParameters
|
|
_02074128:
|
|
mov r1, r4
|
|
mov r0, sl
|
|
ldrb r2, [sp, #7]
|
|
bl DseVoice_Start
|
|
b _02073F40
|
|
_0207413C:
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_02074144: .word DRIVER_WORK
|
|
_02074148: .word 0x4186143D
|
|
_0207414C: .word 0x82061029
|
|
arm_func_end DseVoice_PlayNote
|
|
|
|
arm_func_start DseVoice_ReleaseNote
|
|
DseVoice_ReleaseNote: ; 0x02074150
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
ldr r4, [r6, #0xb4]
|
|
mov r5, r1
|
|
cmp r4, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
_02074168:
|
|
ldrb r1, [r4, #0xd]
|
|
ldrb r0, [r5, #2]
|
|
cmp r1, r0
|
|
bne _02074184
|
|
mov r0, r6
|
|
mov r1, r4
|
|
bl DseVoice_Release
|
|
_02074184:
|
|
ldr r4, [r4, #0x154]
|
|
cmp r4, #0
|
|
bne _02074168
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end DseVoice_ReleaseNote
|
|
|
|
arm_func_start DseVoice_UpdateParameters
|
|
DseVoice_UpdateParameters: ; 0x02074194
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
ldr fp, _0207431C ; =_022B7A30
|
|
ldr r7, _02074320 ; =_022B7A6C
|
|
ldrh r0, [fp, #0x2e]
|
|
mov sb, #0
|
|
cmp r0, #0
|
|
ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldr r6, _02074324 ; =_020B1310
|
|
ldr r5, _02074328 ; =_020B1394
|
|
ldr r4, _0207432C ; =0x00FFB0FF
|
|
_020741BC:
|
|
ldr r8, [r7, #0x158]
|
|
cmp r8, #0
|
|
beq _02074304
|
|
ldrh sl, [r7, #6]
|
|
cmp sl, #0
|
|
beq _02074300
|
|
tst sl, #0x10
|
|
beq _02074264
|
|
ldrh r2, [r8, #0x16]
|
|
ldrsh r1, [r7, #0x12]
|
|
ldrsh r3, [r7, #0x10]
|
|
ldrsh r0, [r7, #0x5e]
|
|
add r1, r2, r1
|
|
add r1, r3, r1
|
|
add r0, r0, r1
|
|
mov r0, r0, lsl #0x10
|
|
mov r1, r0, lsr #0x10
|
|
mov r0, r1, asr #8
|
|
and r0, r0, #0x7f
|
|
ldrb r0, [r6, r0]
|
|
and r2, r1, #0xff
|
|
mov r1, r0, lsl #0x1c
|
|
add r1, r2, r1, lsr #20
|
|
mov r1, r1, lsl #1
|
|
mov r0, r0, asr #4
|
|
ldrh r1, [r5, r1]
|
|
rsbs r0, r0, #4
|
|
movpl r1, r1, lsr r0
|
|
rsbmi r0, r0, #0
|
|
movmi r1, r1, lsl r0
|
|
ldrb r0, [r7, #0x1f]
|
|
cmp r0, #3
|
|
mov r0, r4
|
|
blo _0207425C
|
|
mov r2, r1, asr #3
|
|
add r1, r1, r2, lsr #28
|
|
mov r1, r1, asr #4
|
|
bl _s32_div_f
|
|
str r0, [r7, #0x13c]
|
|
b _02074264
|
|
_0207425C:
|
|
bl _s32_div_f
|
|
str r0, [r7, #0x13c]
|
|
_02074264:
|
|
tst sl, #0x20
|
|
beq _020742C4
|
|
ldrb r1, [r7, #0x16]
|
|
ldrsh r0, [r7, #0x60]
|
|
add r1, r1, r0, asr #6
|
|
cmp r1, #0x7f
|
|
movgt r1, #0x7f
|
|
bgt _0207428C
|
|
cmp r1, #0
|
|
movlt r1, #0
|
|
_0207428C:
|
|
ldrh r0, [r8, #0x18]
|
|
ldrb r2, [r7, #0x14c]
|
|
mul r1, r0, r1
|
|
mul r3, r2, r1
|
|
ldr r0, _02074330 ; =0x828CBFBF
|
|
smull r1, r2, r0, r3
|
|
add r2, r3, r2
|
|
mov r0, r3, lsr #0x1f
|
|
add r2, r0, r2, asr #12
|
|
mul r1, r2, r2
|
|
mov r0, r1, asr #8
|
|
add r0, r1, r0, lsr #23
|
|
mov r0, r0, asr #9
|
|
str r0, [r7, #0x140]
|
|
_020742C4:
|
|
tst sl, #0x40
|
|
beq _02074300
|
|
ldrsb r1, [r7, #0x17]
|
|
ldrsh r2, [r8, #0x1a]
|
|
ldrsh r0, [r7, #0x62]
|
|
sub r1, r1, #0x40
|
|
add r1, r2, r1
|
|
adds r1, r1, r0, asr #6
|
|
ldr r0, _02074334 ; =_022B8330
|
|
movmi r1, #0
|
|
cmp r1, #0x7f
|
|
ldr r0, [r0, #0xed4]
|
|
movgt r1, #0x7f
|
|
ldrb r0, [r0, r1]
|
|
str r0, [r7, #0x144]
|
|
_02074300:
|
|
strh sl, [r7, #6]
|
|
_02074304:
|
|
ldrh r0, [fp, #0x2e]
|
|
add sb, sb, #1
|
|
add r7, r7, #0x15c
|
|
cmp sb, r0
|
|
blt _020741BC
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0207431C: .word _022B7A30
|
|
_02074320: .word _022B7A6C
|
|
_02074324: .word _020B1310
|
|
_02074328: .word _020B1394
|
|
_0207432C: .word 0x00FFB0FF
|
|
_02074330: .word 0x828CBFBF
|
|
_02074334: .word _022B8330
|
|
arm_func_end DseVoice_UpdateParameters
|
|
|
|
arm_func_start DseVoice_ResetAll
|
|
DseVoice_ResetAll: ; 0x02074338
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
ldr sl, _020743D0 ; =_022B7A30
|
|
mov r8, #0
|
|
ldrh r0, [sl, #0x2e]
|
|
cmp r0, #0
|
|
ble _020743C0
|
|
ldr sb, _020743D4 ; =_022B7A6C
|
|
mov r7, r8
|
|
mov r6, #1
|
|
mov r5, #0x40
|
|
mov r4, r8
|
|
_02074364:
|
|
strh r7, [sb, #4]
|
|
strh r7, [sb, #6]
|
|
mov r0, r6, lsl r8
|
|
strh r8, [sb, #8]
|
|
strh r0, [sb, #0xa]
|
|
str r7, [sb]
|
|
str r7, [sb, #0x14c]
|
|
strb r7, [sb, #0xd]
|
|
strb r7, [sb, #0xe]
|
|
strh r7, [sb, #0x12]
|
|
strb r7, [sb, #0x16]
|
|
add r0, sb, #0x3c
|
|
strb r5, [sb, #0x17]
|
|
bl SoundEnvelope_Reset
|
|
add r0, sb, #0x5c
|
|
bl SoundLfoBank_Reset
|
|
str r4, [sb, #0x154]
|
|
str r4, [sb, #0x158]
|
|
ldrh r0, [sl, #0x2e]
|
|
add r8, r8, #1
|
|
add sb, sb, #0x15c
|
|
cmp r8, r0
|
|
blt _02074364
|
|
_020743C0:
|
|
ldr r0, _020743D8 ; =DRIVER_WORK
|
|
mov r1, #0
|
|
str r1, [r0, #0x654]
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_020743D0: .word _022B7A30
|
|
_020743D4: .word _022B7A6C
|
|
_020743D8: .word DRIVER_WORK
|
|
arm_func_end DseVoice_ResetAll
|
|
|
|
arm_func_start DseVoice_ResetHW
|
|
DseVoice_ResetHW: ; 0x020743DC
|
|
stmdb sp!, {r3, lr}
|
|
cmp r0, #0
|
|
ble _02074414
|
|
ldr r1, _0207447C ; =_022B7A30
|
|
mov r2, #0x10
|
|
strh r2, [r1, #0x2c]
|
|
cmp r0, #0x10
|
|
movgt r0, r2, lsl #0x10
|
|
ldr r2, _0207447C ; =_022B7A30
|
|
movgt r0, r0, asr #0x10
|
|
strh r0, [r2, #0x2e]
|
|
ldr r1, _02074480 ; =_022B8330
|
|
mov r0, #0
|
|
strb r0, [r1, #0xd0c]
|
|
_02074414:
|
|
ldr r2, _0207447C ; =_022B7A30
|
|
mov r0, #0
|
|
strh r0, [r2, #0x32]
|
|
strh r0, [r2, #0x34]
|
|
ldr r1, _02074484 ; =DRIVER_WORK
|
|
strh r0, [r2, #0x36]
|
|
strb r0, [r1, #0x738]
|
|
strb r0, [r1, #0x739]
|
|
ldr ip, _02074480 ; =_022B8330
|
|
strh r0, [r2, #0x30]
|
|
str r0, [ip, #0xcfc]
|
|
str r0, [ip, #0xd00]
|
|
sub r2, r0, #1
|
|
str r2, [ip, #0xd04]
|
|
ldrsh lr, [r1, #0x28]
|
|
mov r1, r0
|
|
mov r2, r0
|
|
mov r3, r0
|
|
str lr, [ip, #0xd08]
|
|
bl sub_0207C8B8
|
|
ldr r0, _02074488 ; =0x0000FFFF
|
|
mov r3, #0
|
|
mov r1, r0
|
|
mov r2, r0
|
|
bl sub_0207C8E0
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0207447C: .word _022B7A30
|
|
_02074480: .word _022B8330
|
|
_02074484: .word DRIVER_WORK
|
|
_02074488: .word 0x0000FFFF
|
|
arm_func_end DseVoice_ResetHW
|
|
|
|
arm_func_start UpdateChannels
|
|
UpdateChannels: ; 0x0207448C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
ldr sb, _02074570 ; =_022B7A30
|
|
mov r7, #0
|
|
ldrh r0, [sb, #0x2e]
|
|
mov r6, r7
|
|
ldr r5, _02074574 ; =_022B7A6C
|
|
cmp r0, #0
|
|
ble _0207452C
|
|
mov r4, #2
|
|
_020744B0:
|
|
add r0, r5, #0x3c
|
|
bl SoundEnvelope_Tick
|
|
ldrsb r1, [r5, #0x5a]
|
|
mov r8, r0
|
|
cmp r1, #1
|
|
bne _02074514
|
|
add r0, r5, #0x5c
|
|
bl SoundLfoBank_Tick
|
|
ldrh r1, [r5, #6]
|
|
orr r0, r1, r0
|
|
strh r0, [r5, #6]
|
|
ldrb r0, [r5, #0x58]
|
|
cmp r0, #8
|
|
bne _020744F8
|
|
strb r4, [r5, #0x58]
|
|
ldrh r0, [r5, #6]
|
|
orr r0, r0, #2
|
|
strh r0, [r5, #6]
|
|
_020744F8:
|
|
ldrb r0, [r5, #0x14c]
|
|
cmp r0, r8
|
|
ldrneh r0, [r5, #6]
|
|
orrne r0, r0, #0x20
|
|
strneh r0, [r5, #6]
|
|
cmp r8, #0
|
|
addgt r7, r7, #1
|
|
_02074514:
|
|
strb r8, [r5, #0x14c]
|
|
ldrh r0, [sb, #0x2e]
|
|
add r6, r6, #1
|
|
add r5, r5, #0x15c
|
|
cmp r6, r0
|
|
blt _020744B0
|
|
_0207452C:
|
|
ldr r0, _02074578 ; =_022B8330
|
|
ldr r1, [r0, #0xd04]
|
|
cmp r1, #0
|
|
movlt r1, #0
|
|
strlt r1, [r0, #0xd00]
|
|
ldr r0, _02074578 ; =_022B8330
|
|
str r7, [r0, #0xcfc]
|
|
ldr r1, [r0, #0xd00]
|
|
cmp r1, r7
|
|
strlt r7, [r0, #0xd00]
|
|
movlt r1, #0x64
|
|
strlt r1, [r0, #0xd04]
|
|
ldr r0, _02074578 ; =_022B8330
|
|
ldr r1, [r0, #0xd04]
|
|
sub r1, r1, #1
|
|
str r1, [r0, #0xd04]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_02074570: .word _022B7A30
|
|
_02074574: .word _022B7A6C
|
|
_02074578: .word _022B8330
|
|
arm_func_end UpdateChannels
|
|
|
|
arm_func_start DseVoice_Cleanup
|
|
DseVoice_Cleanup: ; 0x0207457C
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
ldr r6, _02074610 ; =_022B7A6C
|
|
bl sub_0207D470
|
|
ldr r4, _02074614 ; =_022B7A30
|
|
mov r0, r0, lsl #0x10
|
|
ldrh r2, [r4, #0x30]
|
|
ldrh r1, [r4, #0x2e]
|
|
mov r7, #0
|
|
orr r0, r2, r0, lsr #16
|
|
mov r0, r0, lsl #0x10
|
|
mov r8, r0, lsr #0x10
|
|
cmp r1, #0
|
|
ldmleia sp!, {r4, r5, r6, r7, r8, pc}
|
|
mov r5, r7
|
|
_020745B4:
|
|
ldrsb r0, [r6, #0x5a]
|
|
cmp r0, #1
|
|
bne _020745DC
|
|
tst r8, #1
|
|
bne _020745F0
|
|
add r0, r6, #0x3c
|
|
bl SoundEnvelope_Stop2
|
|
add r0, r6, #0x100
|
|
strh r5, [r0, #0x4c]
|
|
b _020745F0
|
|
_020745DC:
|
|
and r0, r8, #1
|
|
cmp r0, #1
|
|
bne _020745F0
|
|
mov r0, r6
|
|
bl DseVoice_FlagForDeactivation
|
|
_020745F0:
|
|
ldrh r1, [r4, #0x2e]
|
|
mov r0, r8, lsl #0xf
|
|
add r7, r7, #1
|
|
cmp r7, r1
|
|
mov r8, r0, lsr #0x10
|
|
add r6, r6, #0x15c
|
|
blt _020745B4
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_02074610: .word _022B7A6C
|
|
_02074614: .word _022B7A30
|
|
arm_func_end DseVoice_Cleanup
|
|
|
|
arm_func_start DseVoice_Allocate
|
|
DseVoice_Allocate: ; 0x02074618
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
ldr r4, _02074774 ; =_022B7A30
|
|
mov r3, r3, lsl #0x10
|
|
ldrh r5, [r4, #0x2e]
|
|
add r3, r3, #0xff
|
|
add r8, r3, #0x100
|
|
ldrb r4, [r1, #5]
|
|
sub r5, r5, #1
|
|
ldrb r3, [r0, #7]
|
|
cmp r4, r5
|
|
movgt r4, r5
|
|
ldrb r7, [r1, #4]
|
|
mov r6, #0
|
|
cmp r3, #0
|
|
beq _02074660
|
|
cmp r3, #1
|
|
beq _0207466C
|
|
b _0207476C
|
|
_02074660:
|
|
ldr r6, [r0, #0xb4]
|
|
cmp r6, #0
|
|
bne _0207476C
|
|
_0207466C:
|
|
ldrb r3, [r1]
|
|
cmp r3, #0
|
|
beq _02074708
|
|
ldr r5, _02074778 ; =_022B7A6C
|
|
mov r3, #0x15c
|
|
mla r3, r7, r3, r5
|
|
mov ip, r7
|
|
mov lr, r4
|
|
mov r5, r8
|
|
cmp r7, r4
|
|
mov r6, #0
|
|
bgt _020746E4
|
|
ldr r0, [r0]
|
|
_020746A0:
|
|
ldr sb, [r3]
|
|
cmp sb, r0
|
|
ldreqh sb, [r3, #0x18]
|
|
cmpeq sb, r2
|
|
bne _020746D4
|
|
ldr sb, [r3, #0x14c]
|
|
add r6, r6, #1
|
|
cmp r5, sb
|
|
movhi r5, sb
|
|
ldrb sb, [r1, #2]
|
|
movhi lr, ip
|
|
cmp r6, sb
|
|
bge _020746E4
|
|
_020746D4:
|
|
add ip, ip, #1
|
|
cmp ip, r4
|
|
add r3, r3, #0x15c
|
|
ble _020746A0
|
|
_020746E4:
|
|
ldrb r0, [r1, #2]
|
|
cmp r6, r0
|
|
blt _02074708
|
|
ldr r1, _02074778 ; =_022B7A6C
|
|
mov r0, #0x15c
|
|
mla r6, lr, r0, r1
|
|
mov r0, r6
|
|
bl DseVoice_Deallocate
|
|
b _0207476C
|
|
_02074708:
|
|
cmp r7, r4
|
|
add r2, r4, #1
|
|
bgt _0207474C
|
|
ldr r1, _0207477C ; =DRIVER_WORK
|
|
mov r0, #0x15c
|
|
mla r1, r7, r0, r1
|
|
_02074720:
|
|
ldr r0, [r1, #0x888]
|
|
cmp r8, r0
|
|
bls _0207473C
|
|
mov r2, r7
|
|
cmp r0, #0
|
|
beq _0207474C
|
|
mov r8, r0
|
|
_0207473C:
|
|
add r7, r7, #1
|
|
cmp r7, r4
|
|
add r1, r1, #0x15c
|
|
ble _02074720
|
|
_0207474C:
|
|
cmp r2, r4
|
|
movgt r6, #0
|
|
bgt _0207476C
|
|
ldr r1, _02074778 ; =_022B7A6C
|
|
mov r0, #0x15c
|
|
mla r6, r2, r0, r1
|
|
mov r0, r6
|
|
bl DseVoice_Deallocate
|
|
_0207476C:
|
|
mov r0, r6
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_02074774: .word _022B7A30
|
|
_02074778: .word _022B7A6C
|
|
_0207477C: .word DRIVER_WORK
|
|
arm_func_end DseVoice_Allocate
|
|
|
|
arm_func_start DseVoice_Start
|
|
DseVoice_Start: ; 0x02074780
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
ldrh r3, [r4, #6]
|
|
mov r1, r2, lsl #0x10
|
|
add r1, r1, #0xff
|
|
orr r2, r3, #1
|
|
bic r2, r2, #2
|
|
strh r2, [r4, #6]
|
|
ldr r2, [r4, #0x14c]
|
|
add r1, r1, #0x100
|
|
orr r1, r2, r1
|
|
mov r5, r0
|
|
str r1, [r4, #0x14c]
|
|
add r0, r4, #0x3c
|
|
bl UpdateTrackVolumeEnvelopes
|
|
ldr r0, [r4, #0x158]
|
|
cmp r0, r5
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldr r0, [r5, #0xb4]
|
|
str r0, [r4, #0x154]
|
|
str r4, [r5, #0xb4]
|
|
str r5, [r4, #0x158]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end DseVoice_Start
|
|
|
|
arm_func_start DseVoice_ReleaseHeld
|
|
DseVoice_ReleaseHeld: ; 0x020747DC
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
mov r7, r0
|
|
ldrb r0, [r7, #4]
|
|
tst r0, #3
|
|
ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
ldr r4, [r7, #0xb8]
|
|
add r6, r7, #0xb8
|
|
cmp r4, #0
|
|
beq _0207484C
|
|
ldr r8, _02074858 ; =DRIVER_WORK
|
|
mvn sl, #0
|
|
mov sb, #0
|
|
_0207480C:
|
|
ldmib r4, {r0, r5}
|
|
cmp r0, #0
|
|
strgt r4, [r6]
|
|
addgt r6, r4, #8
|
|
bgt _02074840
|
|
mov r0, r7
|
|
mov r1, r4
|
|
bl DseChannel_ReleaseNoteInternal
|
|
ldr r0, [r8, #0x650]
|
|
str r0, [r4, #8]
|
|
str r4, [r8, #0x650]
|
|
str sl, [r4, #4]
|
|
strb sb, [r4, #1]
|
|
_02074840:
|
|
mov r4, r5
|
|
cmp r5, #0
|
|
bne _0207480C
|
|
_0207484C:
|
|
mov r0, #0
|
|
str r0, [r6]
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_02074858: .word DRIVER_WORK
|
|
arm_func_end DseVoice_ReleaseHeld
|
|
|
|
arm_func_start DseVoice_Release
|
|
DseVoice_Release: ; 0x0207485C
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r1
|
|
ldrh r1, [r4, #4]
|
|
orr r1, r1, #2
|
|
strh r1, [r4, #4]
|
|
ldrb r0, [r0, #4]
|
|
tst r0, #1
|
|
ldmneia sp!, {r4, pc}
|
|
ldr r1, [r4, #0x14c]
|
|
add r0, r4, #0x3c
|
|
and r1, r1, #0xff
|
|
str r1, [r4, #0x14c]
|
|
bl SoundEnvelope_Release
|
|
ldrh r0, [r4, #6]
|
|
bic r0, r0, #1
|
|
strh r0, [r4, #6]
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end DseVoice_Release
|
|
|
|
arm_func_start DseVoice_Deallocate
|
|
DseVoice_Deallocate: ; 0x020748A0
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldr r1, [r4, #0x158]
|
|
cmp r1, #0
|
|
beq _02074948
|
|
ldr r2, [r1, #0xb4]
|
|
cmp r2, r4
|
|
ldreq r0, [r4, #0x154]
|
|
streq r0, [r1, #0xb4]
|
|
beq _020748F0
|
|
cmp r2, #0
|
|
beq _020748F0
|
|
_020748D0:
|
|
ldr r0, [r2, #0x154]
|
|
cmp r0, r4
|
|
ldreq r0, [r4, #0x154]
|
|
streq r0, [r2, #0x154]
|
|
beq _020748F0
|
|
mov r2, r0
|
|
cmp r0, #0
|
|
bne _020748D0
|
|
_020748F0:
|
|
mov r0, #0
|
|
strh r0, [r4, #4]
|
|
str r0, [r4, #0x158]
|
|
str r0, [r4, #0x154]
|
|
add r0, r4, #0x3c
|
|
bl SoundEnvelope_Stop
|
|
ldr r1, [r4, #0x14c]
|
|
mov r0, #0
|
|
and r1, r1, #0xff
|
|
str r1, [r4, #0x14c]
|
|
str r0, [r4]
|
|
strh r0, [r4, #0x18]
|
|
ldr r1, _020749A0 ; =_022B7A30
|
|
ldrh r0, [r4, #0xa]
|
|
ldrh r3, [r1, #0x32]
|
|
mvn r2, r0
|
|
and r2, r3, r2
|
|
strh r2, [r1, #0x32]
|
|
ldrh r2, [r1, #0x36]
|
|
orr r2, r2, r0
|
|
strh r2, [r1, #0x36]
|
|
ldmia sp!, {r4, pc}
|
|
_02074948:
|
|
mov r0, #0
|
|
strh r0, [r4, #4]
|
|
str r0, [r4, #0x158]
|
|
str r0, [r4, #0x154]
|
|
add r0, r4, #0x3c
|
|
bl SoundEnvelope_Stop
|
|
ldr r1, [r4, #0x14c]
|
|
mov r0, #0
|
|
and r1, r1, #0xff
|
|
str r1, [r4, #0x14c]
|
|
str r0, [r4]
|
|
strh r0, [r4, #0x18]
|
|
ldr r1, _020749A0 ; =_022B7A30
|
|
ldrh r0, [r4, #0xa]
|
|
ldrh r3, [r1, #0x32]
|
|
mvn r2, r0
|
|
and r2, r3, r2
|
|
strh r2, [r1, #0x32]
|
|
ldrh r2, [r1, #0x36]
|
|
orr r2, r2, r0
|
|
strh r2, [r1, #0x36]
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_020749A0: .word _022B7A30
|
|
arm_func_end DseVoice_Deallocate
|
|
|
|
arm_func_start DseVoice_FlagForActivation
|
|
DseVoice_FlagForActivation: ; 0x020749A4
|
|
mov r1, #0xff0
|
|
strh r1, [r0, #6]
|
|
ldr r2, [r0, #0x14c]
|
|
ldr r1, _020749F0 ; =_022B7A30
|
|
orr r2, r2, #0xff
|
|
orr r2, r2, #0x100
|
|
str r2, [r0, #0x14c]
|
|
ldrh r3, [r0, #0xa]
|
|
ldrh r0, [r1, #0x34]
|
|
mvn r2, r3
|
|
and r0, r0, r2
|
|
strh r0, [r1, #0x34]
|
|
ldrh r0, [r1, #0x36]
|
|
and r0, r0, r2
|
|
strh r0, [r1, #0x36]
|
|
ldrh r0, [r1, #0x32]
|
|
orr r0, r0, r3
|
|
strh r0, [r1, #0x32]
|
|
bx lr
|
|
.align 2, 0
|
|
_020749F0: .word _022B7A30
|
|
arm_func_end DseVoice_FlagForActivation
|
|
|
|
arm_func_start DseVoice_FlagForDeactivation
|
|
DseVoice_FlagForDeactivation: ; 0x020749F4
|
|
ldr r2, [r0, #0x14c]
|
|
ldr r1, _02074A28 ; =_022B7A30
|
|
bic r2, r2, #0xff00
|
|
str r2, [r0, #0x14c]
|
|
ldrh r3, [r0, #0xa]
|
|
ldrh r2, [r1, #0x32]
|
|
mvn r0, r3
|
|
and r0, r2, r0
|
|
strh r0, [r1, #0x32]
|
|
ldrh r0, [r1, #0x34]
|
|
orr r0, r0, r3
|
|
strh r0, [r1, #0x34]
|
|
bx lr
|
|
.align 2, 0
|
|
_02074A28: .word _022B7A30
|
|
arm_func_end DseVoice_FlagForDeactivation
|
|
|
|
arm_func_start DseVoice_CountNumActiveInChannel
|
|
DseVoice_CountNumActiveInChannel: ; 0x02074A2C
|
|
ldr r2, [r0, #0xb4]
|
|
mov r0, #0
|
|
cmp r2, #0
|
|
bxeq lr
|
|
_02074A3C:
|
|
ldrb r1, [r2, #0x14c]
|
|
ldr r2, [r2, #0x154]
|
|
cmp r1, #0
|
|
addne r0, r0, #1
|
|
cmp r2, #0
|
|
bne _02074A3C
|
|
bx lr
|
|
arm_func_end DseVoice_CountNumActiveInChannel
|
|
|
|
arm_func_start DseVoice_UpdateHardware
|
|
DseVoice_UpdateHardware: ; 0x02074A58
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x18
|
|
ldr r4, _02074C64 ; =_022B7A30
|
|
ldr r7, _02074C68 ; =_022B7A6C
|
|
ldrh r0, [r4, #0x2e]
|
|
mov r8, #0
|
|
cmp r0, #0
|
|
ble _02074BC8
|
|
mov fp, #2
|
|
mov sl, #1
|
|
mov r6, r8
|
|
mov r5, r8
|
|
_02074A88:
|
|
ldrh sb, [r7, #6]
|
|
cmp sb, #0
|
|
beq _02074BB4
|
|
tst sb, #1
|
|
beq _02074B5C
|
|
ldrsb r0, [r7, #0x21]
|
|
ldrb r1, [r7, #0x1f]
|
|
cmp r0, #0
|
|
movne r3, sl
|
|
moveq r3, fp
|
|
cmp r1, #4
|
|
addls pc, pc, r1, lsl #2
|
|
b _02074B50
|
|
_02074ABC: ; jump table
|
|
b _02074AD0 ; case 0
|
|
b _02074AD0 ; case 1
|
|
b _02074AD0 ; case 2
|
|
b _02074B0C ; case 3
|
|
b _02074B34 ; case 4
|
|
_02074AD0:
|
|
ldr r0, [r7, #0x34]
|
|
str r0, [sp]
|
|
ldr r0, [r7, #0x38]
|
|
str r0, [sp, #4]
|
|
ldr r0, [r7, #0x140]
|
|
str r0, [sp, #8]
|
|
str r6, [sp, #0xc]
|
|
ldr r0, [r7, #0x13c]
|
|
str r0, [sp, #0x10]
|
|
ldr r0, [r7, #0x144]
|
|
str r0, [sp, #0x14]
|
|
ldrh r0, [r7, #8]
|
|
ldr r2, [r7, #0x30]
|
|
bl sub_0207CA6C
|
|
b _02074B50
|
|
_02074B0C:
|
|
ldr r0, [r7, #0x13c]
|
|
mov r3, #0
|
|
str r0, [sp]
|
|
ldr r0, [r7, #0x144]
|
|
str r0, [sp, #4]
|
|
ldrh r0, [r7, #8]
|
|
ldrb r1, [r7, #0x25]
|
|
ldr r2, [r7, #0x140]
|
|
bl sub_0207CAB8
|
|
b _02074B50
|
|
_02074B34:
|
|
ldr r0, [r7, #0x144]
|
|
mov r2, #0
|
|
str r0, [sp]
|
|
ldrh r0, [r7, #8]
|
|
ldr r1, [r7, #0x140]
|
|
ldr r3, [r7, #0x13c]
|
|
bl sub_0207CAE0
|
|
_02074B50:
|
|
mov r0, r7
|
|
bl DseVoice_FlagForActivation
|
|
b _02074BB0
|
|
_02074B5C:
|
|
tst sb, #2
|
|
beq _02074B70
|
|
mov r0, r7
|
|
bl DseVoice_FlagForDeactivation
|
|
mov sb, #0
|
|
_02074B70:
|
|
tst sb, #0x10
|
|
beq _02074B84
|
|
ldrh r0, [r7, #0xa]
|
|
ldr r1, [r7, #0x13c]
|
|
bl sub_0207CA04
|
|
_02074B84:
|
|
tst sb, #0x20
|
|
beq _02074B9C
|
|
ldrh r0, [r7, #0xa]
|
|
ldr r1, [r7, #0x140]
|
|
mov r2, #0
|
|
bl sub_0207CA24
|
|
_02074B9C:
|
|
tst sb, #0x40
|
|
beq _02074BB0
|
|
ldrh r0, [r7, #0xa]
|
|
ldr r1, [r7, #0x144]
|
|
bl sub_0207CA4C
|
|
_02074BB0:
|
|
strh r5, [r7, #6]
|
|
_02074BB4:
|
|
ldrh r0, [r4, #0x2e]
|
|
add r8, r8, #1
|
|
add r7, r7, #0x15c
|
|
cmp r8, r0
|
|
blt _02074A88
|
|
_02074BC8:
|
|
ldr r1, _02074C64 ; =_022B7A30
|
|
ldr r2, _02074C6C ; =DRIVER_WORK
|
|
ldrh r0, [r1, #0x32]
|
|
strh r0, [r1, #0x30]
|
|
ldrb r1, [r2, #0x73a]
|
|
ldrb r2, [r2, #0x738]
|
|
orr r3, r0, r1
|
|
orrs r3, r2, r3
|
|
beq _02074C0C
|
|
mov r3, #0
|
|
bl sub_0207C8B8
|
|
ldr r1, _02074C6C ; =DRIVER_WORK
|
|
mov r2, #0
|
|
strb r2, [r1, #0x738]
|
|
ldr r0, _02074C64 ; =_022B7A30
|
|
strb r2, [r1, #0x73a]
|
|
strh r2, [r0, #0x32]
|
|
_02074C0C:
|
|
ldr r1, _02074C64 ; =_022B7A30
|
|
ldr r0, _02074C6C ; =DRIVER_WORK
|
|
ldrh r4, [r1, #0x34]
|
|
ldrh r3, [r1, #0x36]
|
|
ldrb r1, [r0, #0x73b]
|
|
ldrb r2, [r0, #0x739]
|
|
orr r0, r4, r3
|
|
orr r3, r1, r0
|
|
orrs r3, r2, r3
|
|
addeq sp, sp, #0x18
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r3, #0
|
|
bl sub_0207C8E0
|
|
ldr r1, _02074C6C ; =DRIVER_WORK
|
|
mov r2, #0
|
|
strb r2, [r1, #0x739]
|
|
ldr r0, _02074C64 ; =_022B7A30
|
|
strb r2, [r1, #0x73b]
|
|
strh r2, [r0, #0x36]
|
|
strh r2, [r0, #0x34]
|
|
add sp, sp, #0x18
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_02074C64: .word _022B7A30
|
|
_02074C68: .word _022B7A6C
|
|
_02074C6C: .word DRIVER_WORK
|
|
arm_func_end DseVoice_UpdateHardware
|