pokeheartgold/lib/asm/libVCT.s
2023-01-27 23:42:00 +01:00

5505 lines
104 KiB
ArmAsm

.include "asm/macros.inc"
.include "libVCT.inc"
.include "global.inc"
.bss
_021D6040:
.space 0x10
sAdpcmState: ; 0x021D6050
.space 0x1C
sAudioSession: ; 0x021D606C
.space 0xC
sStream: ; 0x021D6078
.space 0x1BC
_021D6234: ; 0x021D6234
.space 0x44C
sSendInfo: ; 0x021D6680
.space 0x8D8
_021D6F58: ; 0x021D6F58
.space 0x8
_021D6F60: ; 0x021D6F60
.space 0xC
_021D6F6C: ; 0x021D6F6C
.space 0xC
_021D6F78: ; 0x021D6F78
.space 0xC
_021D6F84: ; 0x021D6F84
.space 0xC
_021D6F90: ; 0x021D6F90
.space 0x24
_021D6FB4: ; 0x021D6FB4
.space 0x18
_021D6FCC: ; 0x021D6FCC
.space 0x18
_021D6FE4: ; 0x021D6FE4
.space 0x8
_021D6FEC: ; 0x021D6FEC
.space 0xC
E2scales: ; 0x021D6FF8
.space 0x10
_021D7008: ; 0x021D7008
.space 0x14
sH: ; 0x021D701C
.space 0x18
sTap: ; 0x021D7034
.space 0x18
sSpkBuffer: ; 0x021D704C
.space 0x440
sDelayLine: ; 0x021D748C
.space 0x1000
_021D848C: ; 0x021D848C
.space 0xC
__vct: ; 0x021D8498
.space 0x18
.text
arm_func_start vct_decode_adpcm_32
vct_decode_adpcm_32: ; 0x020B03F0
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov r6, #0
cmp r2, #0
ldmlsia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r4, #0x8000
ldr lr, _020B0538 ; =0x00007FFF
ldr ip, _020B053C ; =cAdpcmIndexTable4
ldr r5, _020B0540 ; =cAdpcmStepSizeTable
rsb r4, r4, #0
_020B0414:
ldrb r7, [r3, #2]
ldrb sl, [r0]
ldrsh r8, [r3]
mov sb, r7, lsl #1
ldrsh fp, [r5, sb]
and sl, sl, #0xf
tst sl, #4
mov sb, fp, asr #3
addne sb, sb, fp
tst sl, #2
addne sb, sb, fp, asr #1
tst sl, #1
addne sb, sb, fp, asr #2
tst sl, #8
beq _020B0460
sub r8, r8, sb
cmp r8, r4
movlt r8, r4
b _020B046C
_020B0460:
add r8, r8, sb
cmp r8, lr
movgt r8, lr
_020B046C:
ldrsb sb, [ip, sl]
adds r7, r7, sb
movmi r7, #0
bmi _020B0484
cmp r7, #0x58
movgt r7, #0x58
_020B0484:
mov r8, r8, lsl #0x10
mov r8, r8, asr #0x10
strh r8, [r3]
strb r7, [r3, #2]
strh r8, [r1]
ldrb r7, [r3, #2]
ldrb sl, [r0]
ldrsh r8, [r3]
mov sb, r7, lsl #1
ldrsh fp, [r5, sb]
mov sl, sl, asr #4
and sl, sl, #0xf
mov sb, fp, asr #3
tst sl, #4
addne sb, sb, fp
tst sl, #2
addne sb, sb, fp, asr #1
tst sl, #1
addne sb, sb, fp, asr #2
tst sl, #8
beq _020B04E8
sub r8, r8, sb
cmp r8, r4
movlt r8, r4
b _020B04F4
_020B04E8:
add r8, r8, sb
cmp r8, lr
movgt r8, lr
_020B04F4:
ldrsb sb, [ip, sl]
adds r7, r7, sb
movmi r7, #0
bmi _020B050C
cmp r7, #0x58
movgt r7, #0x58
_020B050C:
mov r8, r8, lsl #0x10
mov r8, r8, asr #0x10
strh r8, [r3]
strb r7, [r3, #2]
add r6, r6, #1
strh r8, [r1, #2]
cmp r6, r2
add r1, r1, #4
add r0, r0, #1
blo _020B0414
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_020B0538: .word 0x00007FFF
_020B053C: .word cAdpcmIndexTable4
_020B0540: .word cAdpcmStepSizeTable
arm_func_end vct_decode_adpcm_32
arm_func_start vct_encode_adpcm_32
vct_encode_adpcm_32: ; 0x020B0544
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
movs r8, r2, lsr #1
mov r4, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov ip, #0x8000
rsb ip, ip, #0
ldr lr, _020B06C8 ; =cAdpcmStepSizeTable
mov r2, ip, lsr #0x11
_020B0564:
ldrb r6, [r3, #2]
ldrsh r7, [r3]
ldrsh r5, [r1]
mov sb, r6, lsl #1
ldrsh sb, [lr, sb]
subs sl, r5, r7
movmi r5, #8
rsbmi sl, sl, #0
movpl r5, #0
cmp sl, sb
orrge r5, r5, #4
subge sl, sl, sb
cmp sl, sb, asr #1
orrge r5, r5, #2
subge sl, sl, sb, asr #1
cmp sl, sb, asr #2
orrge r5, r5, #1
mov sl, sb, asr #3
tst r5, #4
addne sl, sl, sb
tst r5, #2
addne sl, sl, sb, asr #1
tst r5, #1
addne sl, sl, sb, asr #2
tst r5, #8
rsbne sl, sl, #0
add sb, r7, sl
ldr r7, _020B06CC ; =cAdpcmIndexTable4
cmp sb, ip
movlt sb, ip
cmp sb, ip, lsr #17
ldrsb r7, [r7, r5]
movgt sb, r2
adds r6, r6, r7
movmi r6, #0
bmi _020B05FC
cmp r6, #0x58
movgt r6, #0x58
_020B05FC:
strh sb, [r3]
strb r6, [r3, #2]
and r7, r6, #0xff
ldrsh r6, [r1, #2]
ldrsh sb, [r3]
mov sl, r7, lsl #1
ldrsh sl, [lr, sl]
subs fp, r6, sb
movmi r6, #8
rsbmi fp, fp, #0
movpl r6, #0
cmp fp, sl
orrge r6, r6, #4
subge fp, fp, sl
cmp fp, sl, asr #1
orrge r6, r6, #2
subge fp, fp, sl, asr #1
cmp fp, sl, asr #2
orrge r6, r6, #1
mov fp, sl, asr #3
tst r6, #4
addne fp, fp, sl
tst r6, #2
addne fp, fp, sl, asr #1
tst r6, #1
addne fp, fp, sl, asr #2
tst r6, #8
rsbne fp, fp, #0
add sl, sb, fp
ldr sb, _020B06CC ; =cAdpcmIndexTable4
cmp sl, ip
movlt sl, ip
cmp sl, ip, lsr #17
ldrsb sb, [sb, r6]
movgt sl, r2
and r5, r5, #0xff
adds r7, r7, sb
add r1, r1, #4
movmi r7, #0
bmi _020B06A4
cmp r7, #0x58
movgt r7, #0x58
_020B06A4:
strh sl, [r3]
strb r7, [r3, #2]
and r6, r6, #0xff
orr r5, r5, r6, lsl #4
strb r5, [r0], #1
add r4, r4, #1
cmp r4, r8
blo _020B0564
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_020B06C8: .word cAdpcmStepSizeTable
_020B06CC: .word cAdpcmIndexTable4
arm_func_end vct_encode_adpcm_32
arm_func_start vct_decode_adpcm_24
vct_decode_adpcm_24: ; 0x020B06D0
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x10
ldr r5, _020B0B54 ; =0xAAAAAAAB
mov r4, #0
str r4, [sp, #0xc]
umull r5, r4, r2, r5
movs r2, r4, lsr #1
str r2, [sp]
addeq sp, sp, #0x10
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r4, #0x8000
ldr lr, _020B0B58 ; =0x00007FFF
ldr r5, _020B0B5C ; =cAdpcmStepSizeTable
rsb r4, r4, #0
_020B0708:
ldrb r7, [r3, #2]
ldrb fp, [r0]
ldrb r2, [r0, #1]
mov r6, r7, lsl #1
ldrsh r6, [r5, r6]
mov sb, fp, asr #5
tst sb, #2
str r6, [sp, #8]
ldrne sl, [sp, #8]
mov r6, r6, asr #2
addne r6, r6, sl
tst sb, #1
ldrne sl, [sp, #8]
ldrb ip, [r0, #2]
addne r6, r6, sl, asr #1
ldrsh r8, [r3]
tst sb, #4
beq _020B0760
sub r8, r8, r6
cmp r8, r4
movlt r8, r4
b _020B076C
_020B0760:
add r8, r8, r6
cmp r8, lr
movgt r8, lr
_020B076C:
ldr r6, _020B0B60 ; =cAdpcmIndexTable3
ldrsb r6, [r6, sb]
adds r7, r7, r6
movmi r7, #0
bmi _020B0788
cmp r7, #0x58
movgt r7, #0x58
_020B0788:
mov r6, r8, lsl #0x10
mov r6, r6, asr #0x10
strh r6, [r3]
strb r7, [r3, #2]
strh r6, [r1]
ldrb r7, [r3, #2]
mov sb, fp, asr #2
tst sb, #2
mov r6, r7, lsl #1
ldrsh r6, [r5, r6]
ldrsh r8, [r3]
str r6, [sp, #4]
ldrne sl, [sp, #4]
mov r6, r6, asr #2
addne r6, r6, sl
tst sb, #1
ldrne sl, [sp, #4]
addne r6, r6, sl, asr #1
tst sb, #4
beq _020B07E8
sub r8, r8, r6
cmp r8, r4
movlt r8, r4
b _020B07F4
_020B07E8:
add r8, r8, r6
cmp r8, lr
movgt r8, lr
_020B07F4:
ldr r6, _020B0B60 ; =cAdpcmIndexTable3
and sb, sb, #7
ldrsb r6, [r6, sb]
adds r7, r7, r6
movmi r7, #0
bmi _020B0814
cmp r7, #0x58
movgt r7, #0x58
_020B0814:
mov r6, r8, lsl #0x10
mov r6, r6, asr #0x10
strh r6, [r3]
strb r7, [r3, #2]
strh r6, [r1, #2]
ldrb r6, [r3, #2]
mov r8, fp, lsl #1
and r8, r8, #7
mov sb, r6, lsl #1
ldrsh sl, [r5, sb]
orr r8, r8, r2, asr #7
tst r8, #2
mov sb, sl, asr #2
addne sb, sb, sl
tst r8, #1
addne sb, sb, sl, asr #1
ldrsh r7, [r3]
tst r8, #4
beq _020B0870
sub r7, r7, sb
cmp r7, r4
movlt r7, r4
b _020B087C
_020B0870:
add r7, r7, sb
cmp r7, lr
movgt r7, lr
_020B087C:
ldr sb, _020B0B60 ; =cAdpcmIndexTable3
ldrsb r8, [sb, r8]
adds r6, r6, r8
movmi r6, #0
bmi _020B0898
cmp r6, #0x58
movgt r6, #0x58
_020B0898:
mov r7, r7, lsl #0x10
mov r7, r7, asr #0x10
strh r7, [r3]
strb r6, [r3, #2]
strh r7, [r1, #4]
ldrb r6, [r3, #2]
mov r8, r2, asr #4
tst r8, #2
mov sb, r6, lsl #1
ldrsh sl, [r5, sb]
ldrsh r7, [r3]
mov sb, sl, asr #2
addne sb, sb, sl
tst r8, #1
addne sb, sb, sl, asr #1
tst r8, #4
beq _020B08EC
sub r7, r7, sb
cmp r7, r4
movlt r7, r4
b _020B08F8
_020B08EC:
add r7, r7, sb
cmp r7, lr
movgt r7, lr
_020B08F8:
and sb, r8, #7
ldr r8, _020B0B60 ; =cAdpcmIndexTable3
ldrsb r8, [r8, sb]
adds r6, r6, r8
movmi r6, #0
bmi _020B0918
cmp r6, #0x58
movgt r6, #0x58
_020B0918:
mov r7, r7, lsl #0x10
mov r7, r7, asr #0x10
strh r7, [r3]
strb r6, [r3, #2]
strh r7, [r1, #6]
ldrb r6, [r3, #2]
mov r8, r2, asr #1
tst r8, #2
mov sb, r6, lsl #1
ldrsh sl, [r5, sb]
ldrsh r7, [r3]
mov sb, sl, asr #2
addne sb, sb, sl
tst r8, #1
addne sb, sb, sl, asr #1
tst r8, #4
beq _020B096C
sub r7, r7, sb
cmp r7, r4
movlt r7, r4
b _020B0978
_020B096C:
add r7, r7, sb
cmp r7, lr
movgt r7, lr
_020B0978:
and sb, r8, #7
ldr r8, _020B0B60 ; =cAdpcmIndexTable3
ldrsb r8, [r8, sb]
adds r6, r6, r8
movmi r6, #0
bmi _020B0998
cmp r6, #0x58
movgt r6, #0x58
_020B0998:
mov r7, r7, lsl #0x10
mov r8, r7, asr #0x10
strh r8, [r3]
mov r2, r2, lsl #2
strb r6, [r3, #2]
and r2, r2, #7
strh r8, [r1, #8]
orr r7, r2, ip, asr #6
ldrb r2, [r3, #2]
tst r7, #2
ldrsh r6, [r3]
mov r8, r2, lsl #1
ldrsh sb, [r5, r8]
mov r8, sb, asr #2
addne r8, r8, sb
tst r7, #1
addne r8, r8, sb, asr #1
tst r7, #4
beq _020B09F4
sub r6, r6, r8
cmp r6, r4
movlt r6, r4
b _020B0A00
_020B09F4:
add r6, r6, r8
cmp r6, lr
movgt r6, lr
_020B0A00:
ldr r8, _020B0B60 ; =cAdpcmIndexTable3
ldrsb r7, [r8, r7]
adds r2, r2, r7
movmi r2, #0
bmi _020B0A1C
cmp r2, #0x58
movgt r2, #0x58
_020B0A1C:
mov r6, r6, lsl #0x10
mov r6, r6, asr #0x10
strh r6, [r3]
strb r2, [r3, #2]
strh r6, [r1, #0xa]
ldrb r2, [r3, #2]
mov sb, ip, asr #3
tst sb, #2
mov r7, r2, lsl #1
ldrsh r8, [r5, r7]
ldrsh r6, [r3]
mov r7, r8, asr #2
addne r7, r7, r8
tst sb, #1
addne r7, r7, r8, asr #1
tst sb, #4
beq _020B0A70
sub r6, r6, r7
cmp r6, r4
movlt r6, r4
b _020B0A7C
_020B0A70:
add r6, r6, r7
cmp r6, lr
movgt r6, lr
_020B0A7C:
ldr r7, _020B0B60 ; =cAdpcmIndexTable3
and r8, sb, #7
ldrsb r7, [r7, r8]
adds r2, r2, r7
movmi r2, #0
bmi _020B0A9C
cmp r2, #0x58
movgt r2, #0x58
_020B0A9C:
mov r6, r6, lsl #0x10
mov r6, r6, asr #0x10
strh r6, [r3]
strb r2, [r3, #2]
strh r6, [r1, #0xc]
ldrb r2, [r3, #2]
tst ip, #2
ldrsh r6, [r3]
mov r7, r2, lsl #1
ldrsh r8, [r5, r7]
mov r7, r8, asr #2
addne r7, r7, r8
tst ip, #1
addne r7, r7, r8, asr #1
tst ip, #4
beq _020B0AEC
sub r6, r6, r7
cmp r6, r4
movlt r6, r4
b _020B0AF8
_020B0AEC:
add r6, r6, r7
cmp r6, lr
movgt r6, lr
_020B0AF8:
ldr r7, _020B0B60 ; =cAdpcmIndexTable3
and r8, ip, #7
ldrsb r7, [r7, r8]
adds r2, r2, r7
movmi r2, #0
bmi _020B0B18
cmp r2, #0x58
movgt r2, #0x58
_020B0B18:
mov r6, r6, lsl #0x10
mov r6, r6, asr #0x10
strh r6, [r3]
strb r2, [r3, #2]
ldr r2, [sp, #0xc]
strh r6, [r1, #0xe]
add r6, r2, #1
ldr r2, [sp]
add r0, r0, #3
add r1, r1, #0x10
str r6, [sp, #0xc]
cmp r6, r2
blo _020B0708
add sp, sp, #0x10
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_020B0B54: .word 0xAAAAAAAB
_020B0B58: .word 0x00007FFF
_020B0B5C: .word cAdpcmStepSizeTable
_020B0B60: .word cAdpcmIndexTable3
arm_func_end vct_decode_adpcm_24
arm_func_start vct_encode_adpcm_24
vct_encode_adpcm_24: ; 0x020B0B64
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #8
movs r2, r2, lsr #3
str r2, [sp]
mov r2, #0
str r2, [sp, #4]
addeq sp, sp, #8
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r6, #0x8000
rsb r6, r6, #0
ldr r7, _020B1068 ; =cAdpcmStepSizeTable
ldr r4, _020B106C ; =cAdpcmIndexTable3
mov r5, r6, lsr #0x11
_020B0B98:
ldrsh r2, [r3]
ldrsh sb, [r1]
ldrb r8, [r3, #2]
subs fp, sb, r2
mov sb, r8, lsl #1
movmi sl, #4
ldrsh sb, [r7, sb]
rsbmi fp, fp, #0
movpl sl, #0
cmp fp, sb
orrge sl, sl, #2
subge fp, fp, sb
cmp fp, sb, asr #1
orrge sl, sl, #1
mov fp, sb, asr #2
tst sl, #2
addne fp, fp, sb
tst sl, #1
addne fp, fp, sb, asr #1
tst sl, #4
rsbne fp, fp, #0
add sb, r2, fp
cmp sb, r6
movlt sb, r6
cmp sb, r6, lsr #17
ldrsb r2, [r4, sl]
movgt sb, r5
adds r8, r8, r2
movmi r8, #0
bmi _020B0C18
cmp r8, #0x58
movgt r8, #0x58
_020B0C18:
strh sb, [r3]
strb r8, [r3, #2]
and r2, sl, #0xff
and sb, r8, #0xff
mov fp, sb, lsl #1
ldrsh sl, [r3]
ldrsh r8, [r1, #2]
ldrsh fp, [r7, fp]
mov r2, r2, lsl #5
subs ip, r8, sl
movmi r8, #4
rsbmi ip, ip, #0
movpl r8, #0
cmp ip, fp
orrge r8, r8, #2
subge ip, ip, fp
cmp ip, fp, asr #1
orrge r8, r8, #1
mov ip, fp, asr #2
tst r8, #2
addne ip, ip, fp
tst r8, #1
addne ip, ip, fp, asr #1
tst r8, #4
rsbne ip, ip, #0
add fp, sl, ip
cmp fp, r6
movlt fp, r6
cmp fp, r6, lsr #17
ldrsb sl, [r4, r8]
movgt fp, r5
and r2, r2, #0xff
adds sb, sb, sl
movmi sb, #0
bmi _020B0CAC
cmp sb, #0x58
movgt sb, #0x58
_020B0CAC:
strh fp, [r3]
strb sb, [r3, #2]
and r8, r8, #0xff
orr r2, r2, r8, lsl #2
and sb, sb, #0xff
mov fp, sb, lsl #1
ldrsh sl, [r3]
ldrsh r8, [r1, #4]
ldrsh fp, [r7, fp]
and r2, r2, #0xff
subs ip, r8, sl
movmi r8, #4
rsbmi ip, ip, #0
movpl r8, #0
cmp ip, fp
orrge r8, r8, #2
subge ip, ip, fp
cmp ip, fp, asr #1
orrge r8, r8, #1
mov ip, fp, asr #2
tst r8, #2
addne ip, ip, fp
tst r8, #1
addne ip, ip, fp, asr #1
tst r8, #4
rsbne ip, ip, #0
add fp, sl, ip
cmp fp, r6
movlt fp, r6
cmp fp, r6, lsr #17
ldrsb sl, [r4, r8]
movgt fp, r5
adds sb, sb, sl
movmi sb, #0
bmi _020B0D40
cmp sb, #0x58
movgt sb, #0x58
_020B0D40:
strh fp, [r3]
and lr, r8, #0xff
strb sb, [r3, #2]
orr r2, r2, lr, asr #1
strb r2, [r0]
ldrb sb, [r3, #2]
ldrsh r8, [r3]
ldrsh r2, [r1, #6]
mov sl, sb, lsl #1
ldrsh sl, [r7, sl]
subs fp, r2, r8
movmi r2, #4
rsbmi fp, fp, #0
movpl r2, #0
cmp fp, sl
orrge r2, r2, #2
subge fp, fp, sl
cmp fp, sl, asr #1
orrge r2, r2, #1
mov fp, sl, asr #2
tst r2, #2
addne fp, fp, sl
tst r2, #1
addne fp, fp, sl, asr #1
tst r2, #4
rsbne fp, fp, #0
add sl, r8, fp
cmp sl, r6
movlt sl, r6
cmp sl, r6, lsr #17
ldrsb r8, [r4, r2]
movgt sl, r5
adds sb, sb, r8
movmi sb, #0
bmi _020B0DD4
cmp sb, #0x58
movgt sb, #0x58
_020B0DD4:
strh sl, [r3]
and r2, r2, #0xff
mov r2, r2, lsl #4
strb sb, [r3, #2]
and r8, r2, #0xff
and ip, sb, #0xff
ldrsh r2, [r3]
ldrsh sb, [r1, #8]
subs fp, sb, r2
mov sb, ip, lsl #1
movmi sl, #4
ldrsh sb, [r7, sb]
rsbmi fp, fp, #0
movpl sl, #0
cmp fp, sb
orrge sl, sl, #2
subge fp, fp, sb
cmp fp, sb, asr #1
orrge sl, sl, #1
mov fp, sb, asr #2
tst sl, #2
addne fp, fp, sb
tst sl, #1
addne fp, fp, sb, asr #1
tst sl, #4
rsbne fp, fp, #0
add sb, r2, fp
cmp sb, r6
movlt sb, r6
cmp sb, r6, lsr #17
ldrsb r2, [r4, sl]
movgt sb, r5
adds ip, ip, r2
movmi ip, #0
bmi _020B0E68
cmp ip, #0x58
movgt ip, #0x58
_020B0E68:
strh sb, [r3]
strb ip, [r3, #2]
and r2, sl, #0xff
orr r2, r8, r2, lsl #1
and r8, r2, #0xff
ldrsh r2, [r3]
ldrsh sb, [r1, #0xa]
and ip, ip, #0xff
subs fp, sb, r2
mov sb, ip, lsl #1
movmi sl, #4
ldrsh sb, [r7, sb]
rsbmi fp, fp, #0
movpl sl, #0
cmp fp, sb
orrge sl, sl, #2
subge fp, fp, sb
cmp fp, sb, asr #1
orrge sl, sl, #1
mov fp, sb, asr #2
tst sl, #2
addne fp, fp, sb
tst sl, #1
addne fp, fp, sb, asr #1
tst sl, #4
rsbne fp, fp, #0
add r2, r2, fp
cmp r2, r6
movlt r2, r6
cmp r2, r6, lsr #17
ldrsb sb, [r4, sl]
movgt r2, r5
adds ip, ip, sb
movmi ip, #0
bmi _020B0EFC
cmp ip, #0x58
movgt ip, #0x58
_020B0EFC:
strh r2, [r3]
orr r8, r8, lr, lsl #7
and r2, sl, #0xff
strb ip, [r3, #2]
orr r8, r8, r2, asr #2
strb r8, [r0, #1]
ldrb sb, [r3, #2]
ldrsh sl, [r3]
ldrsh r8, [r1, #0xc]
mov fp, sb, lsl #1
ldrsh fp, [r7, fp]
subs ip, r8, sl
movmi r8, #4
rsbmi ip, ip, #0
movpl r8, #0
cmp ip, fp
orrge r8, r8, #2
subge ip, ip, fp
cmp ip, fp, asr #1
orrge r8, r8, #1
mov ip, fp, asr #2
tst r8, #2
addne ip, ip, fp
tst r8, #1
addne ip, ip, fp, asr #1
tst r8, #4
rsbne ip, ip, #0
add fp, sl, ip
cmp fp, r6
movlt fp, r6
cmp fp, r6, lsr #17
ldrsb sl, [r4, r8]
movgt fp, r5
adds sb, sb, sl
movmi sb, #0
bmi _020B0F94
cmp sb, #0x58
movgt sb, #0x58
_020B0F94:
strh fp, [r3]
and r8, r8, #0xff
mov r8, r8, lsl #3
strb sb, [r3, #2]
and ip, r8, #0xff
and sl, sb, #0xff
ldrsh r8, [r1, #0xe]
ldrsh fp, [r3]
mov lr, sl, lsl #1
ldrsh lr, [r7, lr]
subs sb, r8, fp
movmi r8, #4
rsbmi sb, sb, #0
movpl r8, #0
cmp sb, lr
orrge r8, r8, #2
subge sb, sb, lr
cmp sb, lr, asr #1
orrge r8, r8, #1
mov sb, lr, asr #2
tst r8, #2
addne sb, sb, lr
tst r8, #1
addne sb, sb, lr, asr #1
tst r8, #4
rsbne sb, sb, #0
add fp, fp, sb
cmp fp, r6
movlt fp, r6
cmp fp, r6, lsr #17
ldrsb sb, [r4, r8]
movgt fp, r5
add r1, r1, #0x10
adds sl, sl, sb
movmi sl, #0
bmi _020B102C
cmp sl, #0x58
movgt sl, #0x58
_020B102C:
and r8, r8, #0xff
strh fp, [r3]
orr r8, ip, r8
strb sl, [r3, #2]
orr r2, r8, r2, lsl #6
strb r2, [r0, #2]
ldr r2, [sp, #4]
add r0, r0, #3
add r8, r2, #1
ldr r2, [sp]
str r8, [sp, #4]
cmp r8, r2
blo _020B0B98
add sp, sp, #8
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_020B1068: .word cAdpcmStepSizeTable
_020B106C: .word cAdpcmIndexTable3
arm_func_end vct_encode_adpcm_24
arm_func_start vct_decode_adpcm_16
vct_decode_adpcm_16: ; 0x020B1070
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov r7, #0
cmp r2, #0
ldmlsia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r4, #0x8000
ldr lr, _020B127C ; =0x00007FFF
ldr ip, _020B1280 ; =cAdpcmIndexTable2
ldr r6, _020B1284 ; =cAdpcmStepSizeTable
rsb r4, r4, #0
mov r5, r7
_020B1098:
ldrb sl, [r0]
ldrb r8, [r3, #2]
ldrsh sb, [r3]
and fp, sl, #3
mov sl, r8, lsl #1
ldrsh sl, [r6, sl]
tst fp, #1
moveq sl, r5
tst fp, #2
beq _020B10D0
sub sb, sb, sl
cmp sb, r4
movlt sb, r4
b _020B10DC
_020B10D0:
add sb, sb, sl
cmp sb, lr
movgt sb, lr
_020B10DC:
ldrsb sl, [ip, fp]
adds r8, r8, sl
movmi r8, #0
bmi _020B10F4
cmp r8, #0x58
movgt r8, #0x58
_020B10F4:
mov sb, sb, lsl #0x10
mov sb, sb, asr #0x10
strh sb, [r3]
strb r8, [r3, #2]
strh sb, [r1]
ldrb sl, [r0]
ldrb r8, [r3, #2]
ldrsh sb, [r3]
mov sl, sl, asr #2
and fp, sl, #3
mov sl, r8, lsl #1
ldrsh sl, [r6, sl]
tst fp, #1
moveq sl, #0
tst fp, #2
beq _020B1144
sub sb, sb, sl
cmp sb, r4
movlt sb, r4
b _020B1150
_020B1144:
add sb, sb, sl
cmp sb, lr
movgt sb, lr
_020B1150:
ldrsb sl, [ip, fp]
adds r8, r8, sl
movmi r8, #0
bmi _020B1168
cmp r8, #0x58
movgt r8, #0x58
_020B1168:
mov sb, sb, lsl #0x10
mov sb, sb, asr #0x10
strh sb, [r3]
strb r8, [r3, #2]
strh sb, [r1, #2]
ldrb sl, [r0]
ldrb r8, [r3, #2]
ldrsh sb, [r3]
mov sl, sl, asr #4
and fp, sl, #3
mov sl, r8, lsl #1
ldrsh sl, [r6, sl]
tst fp, #1
moveq sl, #0
tst fp, #2
beq _020B11B8
sub sb, sb, sl
cmp sb, r4
movlt sb, r4
b _020B11C4
_020B11B8:
add sb, sb, sl
cmp sb, lr
movgt sb, lr
_020B11C4:
ldrsb sl, [ip, fp]
adds r8, r8, sl
movmi r8, #0
bmi _020B11DC
cmp r8, #0x58
movgt r8, #0x58
_020B11DC:
mov sb, sb, lsl #0x10
mov sb, sb, asr #0x10
strh sb, [r3]
strb r8, [r3, #2]
strh sb, [r1, #4]
ldrb sl, [r0]
ldrb r8, [r3, #2]
ldrsh sb, [r3]
mov sl, sl, asr #6
and fp, sl, #3
mov sl, r8, lsl #1
ldrsh sl, [r6, sl]
tst fp, #1
moveq sl, #0
tst fp, #2
beq _020B122C
sub sb, sb, sl
cmp sb, r4
movlt sb, r4
b _020B1238
_020B122C:
add sb, sb, sl
cmp sb, lr
movgt sb, lr
_020B1238:
ldrsb sl, [ip, fp]
adds r8, r8, sl
movmi r8, #0
bmi _020B1250
cmp r8, #0x58
movgt r8, #0x58
_020B1250:
mov sb, sb, lsl #0x10
mov sb, sb, asr #0x10
strh sb, [r3]
strb r8, [r3, #2]
add r7, r7, #1
strh sb, [r1, #6]
add r1, r1, #8
add r0, r0, #1
cmp r7, r2
blo _020B1098
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_020B127C: .word 0x00007FFF
_020B1280: .word cAdpcmIndexTable2
_020B1284: .word cAdpcmStepSizeTable
arm_func_end vct_decode_adpcm_16
arm_func_start vct_encode_adpcm_16
vct_encode_adpcm_16: ; 0x020B1288
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
movs r2, r2, lsr #2
mov fp, #0
str r2, [sp]
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r4, #0x8000
rsb r4, r4, #0
ldr r5, _020B14B0 ; =cAdpcmStepSizeTable
ldr ip, _020B14B4 ; =cAdpcmIndexTable2
mov lr, r4, lsr #0x11
_020B12B0:
ldrb r7, [r3, #2]
ldrsh r6, [r3]
ldrsh r2, [r1]
mov r8, r7, lsl #1
ldrsh r8, [r5, r8]
subs sb, r2, r6
movmi r2, #2
rsbmi sb, sb, #0
movpl r2, #0
cmp sb, r8
orrge r2, r2, #1
tst r2, #1
moveq r8, #0
tst r2, #2
rsbne r8, r8, #0
add r8, r6, r8
cmp r8, r4
movlt r8, r4
cmp r8, r4, lsr #17
ldrsb r6, [ip, r2]
movgt r8, lr
adds r7, r7, r6
movmi r7, #0
bmi _020B1318
cmp r7, #0x58
movgt r7, #0x58
_020B1318:
strh r8, [r3]
strb r7, [r3, #2]
and r6, r2, #0xff
ldrsh sl, [r3]
ldrsh r2, [r1, #2]
and sb, r7, #0xff
subs r8, r2, sl
mov r2, sb, lsl #1
movmi r7, #2
ldrsh r2, [r5, r2]
rsbmi r8, r8, #0
movpl r7, #0
cmp r8, r2
orrge r7, r7, #1
tst r7, #1
moveq r2, #0
tst r7, #2
rsbne r2, r2, #0
add r8, sl, r2
cmp r8, r4
movlt r8, r4
cmp r8, r4, lsr #17
ldrsb r2, [ip, r7]
movgt r8, lr
adds sb, sb, r2
movmi sb, #0
bmi _020B138C
cmp sb, #0x58
movgt sb, #0x58
_020B138C:
strh r8, [r3]
strb sb, [r3, #2]
and r2, r7, #0xff
orr r2, r6, r2, lsl #2
and r6, r2, #0xff
ldrsh sl, [r3]
ldrsh r2, [r1, #4]
and sb, sb, #0xff
subs r8, r2, sl
mov r2, sb, lsl #1
movmi r7, #2
ldrsh r2, [r5, r2]
rsbmi r8, r8, #0
movpl r7, #0
cmp r8, r2
orrge r7, r7, #1
tst r7, #1
moveq r2, #0
tst r7, #2
rsbne r2, r2, #0
add r8, sl, r2
cmp r8, r4
movlt r8, r4
cmp r8, r4, lsr #17
ldrsb r2, [ip, r7]
movgt r8, lr
adds sb, sb, r2
movmi sb, #0
bmi _020B1408
cmp sb, #0x58
movgt sb, #0x58
_020B1408:
strh r8, [r3]
strb sb, [r3, #2]
and r2, r7, #0xff
orr r2, r6, r2, lsl #4
and r6, r2, #0xff
ldrsh r2, [r1, #6]
ldrsh sl, [r3]
and sb, sb, #0xff
add r1, r1, #8
subs r8, r2, sl
mov r2, sb, lsl #1
movmi r7, #2
ldrsh r2, [r5, r2]
rsbmi r8, r8, #0
movpl r7, #0
cmp r8, r2
orrge r7, r7, #1
tst r7, #1
moveq r2, #0
tst r7, #2
rsbne r2, r2, #0
add r8, sl, r2
cmp r8, r4
movlt r8, r4
cmp r8, r4, lsr #17
ldrsb r2, [ip, r7]
movgt r8, lr
adds sb, sb, r2
movmi sb, #0
bmi _020B1488
cmp sb, #0x58
movgt sb, #0x58
_020B1488:
strh r8, [r3]
and r2, r7, #0xff
strb sb, [r3, #2]
orr r2, r6, r2, lsl #6
strb r2, [r0], #1
ldr r2, [sp]
add fp, fp, #1
cmp fp, r2
blo _020B12B0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_020B14B0: .word cAdpcmStepSizeTable
_020B14B4: .word cAdpcmIndexTable2
arm_func_end vct_encode_adpcm_16
arm_func_start vct_decode_adpcm
vct_decode_adpcm: ; 0x020B14B8
stmdb sp!, {r3, lr}
ldrsh ip, [r0]
cmp r3, #2
strh ip, [sp]
ldrb ip, [r0, #2]
strb ip, [sp, #2]
beq _020B14E8
cmp r3, #3
beq _020B14FC
cmp r3, #4
beq _020B1510
ldmia sp!, {r3, pc}
_020B14E8:
add r3, sp, #0
add r0, r0, #4
sub r2, r2, #4
bl vct_decode_adpcm_16
ldmia sp!, {r3, pc}
_020B14FC:
add r3, sp, #0
add r0, r0, #4
sub r2, r2, #4
bl vct_decode_adpcm_24
ldmia sp!, {r3, pc}
_020B1510:
add r3, sp, #0
add r0, r0, #4
sub r2, r2, #4
bl vct_decode_adpcm_32
ldmia sp!, {r3, pc}
arm_func_end vct_decode_adpcm
arm_func_start vct_encode_adpcm
vct_encode_adpcm: ; 0x020B1524
stmdb sp!, {r4, lr}
ldrsh r4, [r3]
ldr ip, [sp, #8]
mov lr, #0
strh r4, [r0]
ldrb r4, [r3, #2]
cmp ip, #2
strb r4, [r0, #2]
strb lr, [r0, #3]
beq _020B1560
cmp ip, #3
beq _020B156C
cmp ip, #4
beq _020B1578
ldmia sp!, {r4, pc}
_020B1560:
add r0, r0, #4
bl vct_encode_adpcm_16
ldmia sp!, {r4, pc}
_020B156C:
add r0, r0, #4
bl vct_encode_adpcm_24
ldmia sp!, {r4, pc}
_020B1578:
add r0, r0, #4
bl vct_encode_adpcm_32
ldmia sp!, {r4, pc}
arm_func_end vct_encode_adpcm
arm_func_start vct_init_audio
vct_init_audio: ; 0x020B1584
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
bl OS_GetTickLo
ldr r2, _020B1668 ; =_021D6040
ldr r1, _020B166C ; =sEnableVAD
mov r3, #1
str r3, [r1]
strh r0, [r2]
mov r1, #0
str r1, [r2, #0x20]
ldr r0, _020B1670 ; =__vct
str r1, [r2, #4]
ldr r0, [r0, #0x10]
ldr r3, _020B1674 ; =sCodecInfo
cmp r0, #1
streq r1, [r2, #0x1c]
movne r0, #4
strne r0, [r2, #0x1c]
ldr r1, _020B1668 ; =_021D6040
mov r0, #0x440
str r0, [r1, #0x24]
ldr r5, [r1, #0x1c]
mov r0, #0x44
add r2, r3, r5, lsl #1
ldrb r4, [r2, #1]
ldrb r3, [r3, r5, lsl #1]
mov r2, #0
mla r0, r3, r0, r4
add r0, r0, #0xc
str r0, [r1, #0xc]
str r2, [r1, #0xf00]
str r2, [r1, #0xf04]
str r2, [r1, #0xf0c]
str r2, [r1, #0xf08]
str r2, [r1, #0xf10]
str r2, [r1, #0xf14]
bl vct_init_vad
mov sb, #0
mov r8, sb
ldr r7, _020B1678 ; =sAudioSession
ldr r6, _020B167C ; =sStream
mvn r5, #0
mov r4, #0x94
b _020B1650
_020B1630:
mov r0, sb
str r8, [r7, sb, lsl #2]
bl vct_init_audio_queue
mla r0, sb, r4, r6
mov r1, sb
mov r2, r5
bl vct_init_stream
add sb, sb, #1
_020B1650:
cmp sb, #3
blo _020B1630
bl vct_init_decoder
bl InitFIRFilter
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_020B1668: .word _021D6040
_020B166C: .word sEnableVAD
_020B1670: .word __vct
_020B1674: .word sCodecInfo
_020B1678: .word sAudioSession
_020B167C: .word sStream
arm_func_end vct_init_audio
arm_func_start vct_finish_audio
vct_finish_audio: ; 0x020B1680
ldr r0, _020B1690 ; =_021D6040
mov r1, #0
str r1, [r0, #0x20]
bx lr
.align 2, 0
_020B1690: .word _021D6040
arm_func_end vct_finish_audio
arm_func_start VCT_StartStreaming
VCT_StartStreaming: ; 0x020B1694
stmdb sp!, {r3, r4, r5, lr}
movs r5, r0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
ldr r0, _020B17C0 ; =_021D6040
ldr r0, [r0, #0x20]
cmp r0, #3
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
ldr r0, [r5, #0xc]
cmp r0, #2
cmpne r0, #3
movne r0, #0
ldmneia sp!, {r3, r4, r5, pc}
mov r4, #0
ldr r1, _020B17C4 ; =sAudioSession
b _020B16EC
_020B16D8:
ldr r0, [r1, r4, lsl #2]
cmp r0, r5
moveq r0, #1
ldmeqia sp!, {r3, r4, r5, pc}
add r4, r4, #1
_020B16EC:
cmp r4, #3
blo _020B16D8
mov r4, #0
ldr r1, _020B17C4 ; =sAudioSession
b _020B1714
_020B1700:
ldr r0, [r1, r4, lsl #2]
cmp r0, #0
streq r5, [r1, r4, lsl #2]
beq _020B171C
add r4, r4, #1
_020B1714:
cmp r4, #3
blo _020B1700
_020B171C:
ldr r1, _020B17C0 ; =_021D6040
ldr r2, _020B17C8 ; =sStream
ldr r3, [r1, #0x20]
mov r0, #0x94
add r3, r3, #1
str r3, [r1, #0x20]
ldr ip, [r1, #4]
ldr r3, [r5, #8]
mla r0, r4, r0, r2
orr r2, ip, r3
str r2, [r1, #4]
ldrb r2, [r5, #5]
mov r1, r4
bl vct_init_stream
mov r0, r4
bl vct_init_audio_queue
ldr r0, [r5, #0xc]
cmp r0, #2
movne r0, #1
ldmneia sp!, {r3, r4, r5, pc}
ldr r0, _020B17C0 ; =_021D6040
ldr r0, [r0, #0x20]
cmp r0, #1
bne _020B17B8
bl VCT_ResetVAD
bl OS_GetTickLo
ldr r1, _020B17C0 ; =_021D6040
mov r2, #0
strh r0, [r1]
strh r2, [r1, #0x10]
strb r2, [r1, #0x12]
mov r0, #1
str r0, [r1, #0x14]
str r2, [r1, #0xf00]
str r2, [r1, #0xf04]
str r2, [r1, #0xf0c]
str r2, [r1, #0xf08]
str r2, [r1, #0xf10]
str r2, [r1, #0xf14]
_020B17B8:
mov r0, #1
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_020B17C0: .word _021D6040
_020B17C4: .word sAudioSession
_020B17C8: .word sStream
arm_func_end VCT_StartStreaming
arm_func_start VCT_StopStreaming
VCT_StopStreaming: ; 0x020B17CC
stmdb sp!, {r3, r4, r5, lr}
ldr ip, _020B1874 ; =sAudioSession
mov r5, r0
mov r4, #0
_020B17DC:
ldr r0, [ip, r4, lsl #2]
cmp r0, r5
bne _020B183C
ldr r1, _020B1878 ; =sStream
mov r0, #0x94
mla r0, r4, r0, r1
ldr r1, _020B187C ; =_021D6040
mov r3, #0
ldr r2, [r1, #0x20]
str r3, [ip, r4, lsl #2]
sub r2, r2, #1
str r2, [r1, #0x20]
bl vct_reset_stream
mov r0, r4
bl vct_flush_audio_queue
mov r0, r4
bl vct_flush_decoder
ldr r0, _020B187C ; =_021D6040
ldr r1, [r5, #8]
ldr r2, [r0, #4]
mvn r1, r1
and r1, r2, r1
str r1, [r0, #4]
b _020B1848
_020B183C:
add r4, r4, #1
cmp r4, #3
blo _020B17DC
_020B1848:
ldr r0, _020B187C ; =_021D6040
ldr r1, [r0, #0x20]
cmp r1, #0
ldmneia sp!, {r3, r4, r5, pc}
mov r1, #1
str r1, [r0, #0x14]
bl VCT_ResetVAD
ldr r0, _020B187C ; =_021D6040
mov r1, #0
str r1, [r0, #4]
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_020B1874: .word sAudioSession
_020B1878: .word sStream
_020B187C: .word _021D6040
arm_func_end VCT_StopStreaming
arm_func_start VCT_SendAudio
VCT_SendAudio: ; 0x020B1880
stmdb sp!, {r4, lr}
ldr r3, _020B1980 ; =_021D6040
mov r2, r1
ldr r1, [r3, #0x24]
mov ip, #0
cmp r2, r1
movne r0, ip
ldmneia sp!, {r4, pc}
ldr r1, [r3, #0x20]
cmp r1, #0
moveq r0, ip
ldmeqia sp!, {r4, pc}
mov r4, ip
ldr r3, _020B1984 ; =sAudioSession
b _020B18DC
_020B18BC:
ldr r1, [r3, r4, lsl #2]
cmp r1, #0
beq _020B18D8
ldr r1, [r1, #0xc]
cmp r1, #2
moveq ip, #1
beq _020B18E4
_020B18D8:
add r4, r4, #1
_020B18DC:
cmp r4, #3
blo _020B18BC
_020B18E4:
cmp ip, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
ldr r1, _020B1980 ; =_021D6040
ldr ip, _020B1988 ; =sSendInfo
ldr r1, [r1, #0xf04]
ldr r3, _020B198C ; =0x5F564354
tst r1, #1
ldr r1, _020B1980 ; =_021D6040
movne r4, #0
moveq r4, #0x460
ldr r1, [r1, #0x1c]
str r3, [ip, r4]
cmp r1, #2
add r4, ip, r4
blt _020B1930
add r1, r4, #0x10
bl MIi_CpuCopyFast
b _020B1938
_020B1930:
add r1, r4, #0xc
bl MIi_CpuCopyFast
_020B1938:
ldr r0, _020B1980 ; =_021D6040
mov r1, #0x40
ldrh r2, [r0]
strb r1, [r4, #4]
add r1, r2, #1
strh r1, [r0]
strh r2, [r4, #6]
bl OS_GetTick
mov r2, #0x40
mov r3, #0
bl _ll_udiv
str r0, [r4, #8]
ldr r1, _020B1980 ; =_021D6040
mov r0, #1
ldr r2, [r1, #0xf04]
add r2, r2, #1
str r2, [r1, #0xf04]
ldmia sp!, {r4, pc}
.align 2, 0
_020B1980: .word _021D6040
_020B1984: .word sAudioSession
_020B1988: .word sSendInfo
_020B198C: .word 0x5F564354
arm_func_end VCT_SendAudio
arm_func_start VCTi_ReceiveAudioData
VCTi_ReceiveAudioData: ; 0x020B1990
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #8
ldr r4, _020B1BD4 ; =sStream
mov sl, r2
mov r2, #0x94
mla r6, sl, r2, r4
str r0, [sp]
mov r0, sl
str r1, [sp, #4]
mov fp, r3
mov r7, #1
bl vct_count_audio_queue
movs r4, r0
beq _020B1BB0
_020B19C8:
bl OS_GetTick
mov r8, r0
mov r0, sl
mov sb, r1
bl vct_top_audio_queue
movs r5, r0
beq _020B1B98
ldr r1, [r5, #0x46c]
adds r3, r8, #0x34
ldr r0, [r5, #0x470]
adc r2, sb, #0
cmp r0, r2
cmpeq r1, r3
bls _020B1A7C
ldr r0, [r5, #0x45c]
cmp r0, #0
bne _020B1A70
ldr r0, [r6, #0x3c]
cmp r0, #0
beq _020B1A70
ldr r0, [r6, #0x20]
ldr r1, [sp]
add r0, r0, #1
str r0, [r6, #0x20]
ldr r0, [r6, #0x3c]
ldr r2, [sp, #4]
ldr r0, [r0, #0x474]
bl MIi_CpuCopyFast
ldr r0, [r6, #0x3c]
bl vct_free_packet_buffer
mov r0, #0
str r0, [r6, #0x3c]
cmp fp, #0
beq _020B1A64
ldrb r0, [r5, #0x10]
ldr r2, [fp]
mov r1, #1
orr r0, r2, r1, lsl r0
str r0, [fp]
_020B1A64:
add sp, sp, #8
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_020B1A70:
add sp, sp, #8
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_020B1A7C:
ldr r2, _020B1BD8 ; =0x00008B4C
adds r2, r1, r2
adc r0, r0, #0
cmp sb, r0
cmpeq r8, r2
bls _020B1ABC
ldr r2, [r5, #0x18]
mov r0, r6
mov r1, r5
str r2, [r6, #0x58]
bl vct_save_previous_buffer
mov r4, r0
mov r0, sl
bl vct_top_audio_queue
mov r7, #0
b _020B1BA8
_020B1ABC:
ldr r1, [r6, #0x58]
ldr r2, [r5, #0x18]
add r0, r1, #1
cmp r0, r2
cmpne r1, #0
beq _020B1AF0
cmp r1, r2
bhi _020B1AF0
ldr r0, [r5, #0x45c]
cmp r0, #0
ldreq r0, [r6, #0x14]
addeq r0, r0, #1
streq r0, [r6, #0x14]
_020B1AF0:
ldr r0, [r5, #0x18]
cmp r7, #0
str r0, [r6, #0x58]
ldrne r0, [r6, #0x70]
cmpne r0, #0
beq _020B1B30
mov r0, r6
mov r1, r5
bl vct_save_previous_buffer
mov r4, r0
mov r0, sl
bl vct_top_audio_queue
ldr r0, [r6, #0x70]
sub r0, r0, #1
str r0, [r6, #0x70]
b _020B1BA8
_020B1B30:
ldr r1, [r5, #0x464]
ldr r0, [r6, #0x28]
subs r1, r8, r1
sub r0, r1, r0
sub r0, r0, r1
str r1, [r6, #0x28]
add r0, r1, r0, lsr #4
str r0, [r6, #0x2c]
str r0, [r6]
ldr r0, [r5, #0x474]
ldr r1, [sp]
ldr r2, [sp, #4]
bl MIi_CpuCopyFast
mov r0, r6
mov r1, r5
bl vct_save_previous_buffer
cmp fp, #0
beq _020B1B8C
ldrb r0, [r5, #0x10]
ldr r2, [fp]
mov r1, #1
orr r0, r2, r1, lsl r0
str r0, [fp]
_020B1B8C:
add sp, sp, #8
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_020B1B98:
add sp, sp, #8
str r4, [r6, #8]
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_020B1BA8:
cmp r4, #0
bne _020B19C8
_020B1BB0:
ldr r0, [r6, #0x3c]
cmp r0, #0
beq _020B1BC8
bl vct_free_packet_buffer
mov r0, #0
str r0, [r6, #0x3c]
_020B1BC8:
mov r0, #0
add sp, sp, #8
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_020B1BD4: .word sStream
_020B1BD8: .word 0x00008B4C
arm_func_end VCTi_ReceiveAudioData
arm_func_start VCT_ReceiveAudio
VCT_ReceiveAudio: ; 0x020B1BDC
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
movs r5, r2
mov r7, r0
movne r0, #0
strne r0, [r5]
ldr r0, _020B1CF0 ; =_021D6040
mov r6, r1
ldr r1, [r0, #0x24]
mov r4, #0
cmp r6, r1
bne _020B1CB8
ldr r0, [r0, #0x20]
cmp r0, #0
beq _020B1CB8
mov r8, r4
_020B1C18:
mov r0, r7
mov r1, r6
mov r2, r8
mov r3, r5
bl VCTi_ReceiveAudioData
cmp r0, #1
moveq r4, #1
beq _020B1C44
add r8, r8, #1
cmp r8, #3
blo _020B1C18
_020B1C44:
cmp r4, #0
beq _020B1CA4
add sb, r8, #1
cmp sb, #3
moveq r4, #1
beq _020B1CCC
bhs _020B1CCC
ldr r8, _020B1CF4 ; =_021D6234
_020B1C64:
mov r0, r8
mov r1, r6
mov r2, sb
mov r3, r5
bl VCTi_ReceiveAudioData
cmp r0, #1
bne _020B1C94
mov r0, r7
mov r1, r8
mov r2, r7
mov r3, r6
bl vct_mix_audio
_020B1C94:
add sb, sb, #1
cmp sb, #3
blo _020B1C64
b _020B1CCC
_020B1CA4:
mov r1, r7
mov r2, r6
mov r0, #0
bl MIi_CpuClearFast
b _020B1CCC
_020B1CB8:
mov r1, r7
mov r2, r6
mov r0, #0
bl MIi_CpuClearFast
mov r4, #0
_020B1CCC:
ldr r0, _020B1CF0 ; =_021D6040
ldr r0, [r0, #0x18]
cmp r0, #0
beq _020B1CE8
mov r0, r7
mov r1, r6
bl vct_set_speaker_samples
_020B1CE8:
mov r0, r4
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_020B1CF0: .word _021D6040
_020B1CF4: .word _021D6234
arm_func_end VCT_ReceiveAudio
arm_func_start VCT_SetCodec
VCT_SetCodec: ; 0x020B1CF8
cmp r0, #5
movge r0, #0
bxge lr
ldr r1, _020B1D5C ; =__vct
ldr r1, [r1, #0x10]
cmp r1, #1
beq _020B1D20
cmp r0, #1
movls r0, #0
bxls lr
_020B1D20:
ldr r2, _020B1D60 ; =sCodecInfo + 1
ldr r1, _020B1D64 ; =sCodecInfo
ldrb ip, [r2, r0, lsl #1]
ldrb r3, [r1, r0, lsl #1]
mov r1, #0x44
ldr r2, _020B1D68 ; =_021D6040
mla r1, r3, r1, ip
add r1, r1, #0xc
str r1, [r2, #0xc]
str r0, [r2, #0x1c]
mov r0, #0
strh r0, [r2, #0x10]
strb r0, [r2, #0x12]
mov r0, #1
bx lr
.align 2, 0
_020B1D5C: .word __vct
_020B1D60: .word sCodecInfo + 1
_020B1D64: .word sCodecInfo
_020B1D68: .word _021D6040
arm_func_end VCT_SetCodec
arm_func_start VCT_EnableVAD
VCT_EnableVAD: ; 0x020B1D6C
stmdb sp!, {r4, lr}
ldr r1, _020B1D94 ; =sEnableVAD
mov r4, r0
str r4, [r1]
bl VCT_ResetVAD
cmp r4, #0
ldreq r0, _020B1D98 ; =_021D6040
moveq r1, #1
streq r1, [r0, #8]
ldmia sp!, {r4, pc}
.align 2, 0
_020B1D94: .word sEnableVAD
_020B1D98: .word _021D6040
arm_func_end VCT_EnableVAD
arm_func_start VCT_EnableEchoCancel
VCT_EnableEchoCancel: ; 0x020B1D9C
ldr r1, _020B1DA8 ; =_021D6040
str r0, [r1, #0x18]
bx lr
.align 2, 0
_020B1DA8: .word _021D6040
arm_func_end VCT_EnableEchoCancel
arm_func_start vct_prepare_send_buffer
vct_prepare_send_buffer: ; 0x020B1DAC
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
sub sp, sp, #4
ldr r0, _020B200C ; =_021D6040
ldr r2, [r0, #0xf04]
ldr r1, [r0, #0xf00]
ldr r8, [r0, #0x1c]
sub r1, r2, r1
cmp r1, #1
subhi r1, r2, #1
strhi r1, [r0, #0xf00]
movhi r1, #1
cmp r1, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, pc}
ldr r0, _020B200C ; =_021D6040
ldr r0, [r0, #0xf00]
tst r0, #1
movne r1, #0
moveq r1, #0x460
ldr r0, _020B2010 ; =sSendInfo
cmp r8, #2
add r5, r0, r1
ldr r1, _020B200C ; =_021D6040
add r4, r5, #0xc
addge r4, r4, #4
ldr r1, [r1, #0x24]
mov r0, r4
bl HPFFilter
ldr r1, _020B2014 ; =0x040002B0
mov r2, #0
mov r6, r0
strh r2, [r1]
str r6, [r1, #8]
_020B1E34:
ldrh r0, [r1]
tst r0, #0x8000
bne _020B1E34
ldr r0, _020B200C ; =_021D6040
ldr r2, _020B2018 ; =0x040002B4
ldr r1, [r0, #0x18]
ldr r7, [r2]
cmp r1, #0
beq _020B1E68
ldr r1, [r0, #0x24]
mov r0, r4
mov r2, r7
bl vct_process_fir
_020B1E68:
ldr r0, _020B201C ; =sEnableVAD
strb r8, [r5, #5]
ldr r0, [r0]
cmp r0, #0
beq _020B1ED8
mov r0, r6
mov r1, r7
mov r2, #0
bl VCTi_GetVADStatus
ldr r1, _020B200C ; =_021D6040
cmp r0, #0
str r0, [r1, #0x28]
beq _020B1EB4
cmp r0, #1
beq _020B1ECC
cmp r0, #3
moveq r0, #0x41
streqb r0, [r5, #4]
b _020B1ED8
_020B1EB4:
ldr r2, [r1, #0xf00]
add sp, sp, #4
add r2, r2, #1
str r2, [r1, #0xf00]
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
_020B1ECC:
ldrb r0, [r5, #5]
orr r0, r0, #0x80
strb r0, [r5, #5]
_020B1ED8:
ldr r0, _020B201C ; =sEnableVAD
ldr r0, [r0]
cmp r0, #0
bne _020B1F0C
ldr r0, _020B200C ; =_021D6040
ldr r1, [r0, #8]
cmp r1, #0
beq _020B1F0C
ldrb r2, [r5, #5]
mov r1, #0
str r1, [r0, #8]
orr r0, r2, #0x80
strb r0, [r5, #5]
_020B1F0C:
ldr r0, _020B200C ; =_021D6040
ldr r1, [r0, #0x14]
cmp r1, #0
beq _020B1F30
ldrb r2, [r5, #5]
mov r1, #0
str r1, [r0, #0x14]
orr r0, r2, #0x80
strb r0, [r5, #5]
_020B1F30:
cmp r8, #2
blt _020B1F78
ldrb r0, [r5, #5]
tst r0, #0x80
beq _020B1F54
ldr r0, _020B200C ; =_021D6040
mov r1, #0
strh r1, [r0, #0x10]
strb r1, [r0, #0x12]
_020B1F54:
ldr r0, _020B200C ; =_021D6040
str r8, [sp]
ldr r2, [r0, #0x24]
ldr r3, _020B2020 ; =sAdpcmState
mov r1, r4
sub r0, r4, #4
mov r2, r2, lsr #1
bl vct_encode_adpcm
b _020B1FBC
_020B1F78:
cmp r8, #1
bne _020B1F9C
ldr r1, _020B200C ; =_021D6040
mov r0, r4
ldr r2, [r1, #0x24]
mov r1, r4
mov r2, r2, lsr #1
bl vct_encode_g711_ulaw
b _020B1FBC
_020B1F9C:
cmp r8, #0
bne _020B1FBC
ldr r1, _020B200C ; =_021D6040
mov r0, r4
ldr r2, [r1, #0x24]
mov r1, r4
mov r2, r2, lsr #1
bl vct_encode_8bit_raw
_020B1FBC:
ldr r1, _020B200C ; =_021D6040
ldr r0, _020B2024 ; =__vct
ldr r3, [r1, #4]
mov r2, #1
str r3, [r1, #0xf0c]
ldrb r0, [r0]
mvn r0, r2, lsl r0
and r0, r3, r0
str r0, [r1, #0xf0c]
bl MATH_CountPopulation
sub r0, r0, #1
ldr r1, _020B200C ; =_021D6040
cmp r0, #7
str r0, [r1, #0xf14]
movgt r0, #0
movle r2, #0
movle r0, r5
strle r2, [r1, #0xf10]
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
.align 2, 0
_020B200C: .word _021D6040
_020B2010: .word sSendInfo
_020B2014: .word 0x040002B0
_020B2018: .word 0x040002B4
_020B201C: .word sEnableVAD
_020B2020: .word sAdpcmState
_020B2024: .word __vct
arm_func_end vct_prepare_send_buffer
arm_func_start vct_handle_audio
vct_handle_audio: ; 0x020B2028
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
ldr r4, _020B2204 ; =_021D6040
mov sl, r0
ldr r0, [r4, #0x20]
ldr r7, [sp, #0x28]
mov sb, r1
mov r8, r2
mov fp, r3
mov r5, #0
cmp r0, #0
moveq r0, r5
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r1, _020B2208 ; =sStream
mov r2, r5
_020B2060:
ldr r0, [r1, #0x38]
cmp sl, r0
bne _020B207C
ldr r1, _020B2208 ; =sStream
mov r0, #0x94
mla r5, r2, r0, r1
b _020B208C
_020B207C:
add r2, r2, #1
cmp r2, #3
add r1, r1, #0x94
blo _020B2060
_020B208C:
cmp r5, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldrb r0, [sb, #4]
cmp r0, #0x41
bne _020B20C0
ldrh r2, [sb, #6]
mov r0, #0
mov r1, #1
str r2, [r5, #0x30]
str r0, [r5, #0x4c]
str r1, [r5, #0x6c]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_020B20C0:
cmp r0, #0x40
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldrb r0, [sb, #5]
and r6, r0, #0x7f
cmp r6, #5
str r6, [r5, #0x24]
movge r0, #0
ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r1, _020B220C ; =sCodecInfo + 1
ldr r0, _020B2210 ; =sCodecInfo
ldrb r2, [r1, r6, lsl #1]
ldrb r1, [r0, r6, lsl #1]
mov r0, #0x44
mla r0, r1, r0, r2
add r0, r0, #0xc
cmp r8, r0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
cmp sl, #0
movne r0, #1
movne r1, r0, lsl sl
ldr r0, _020B2204 ; =_021D6040
moveq r1, #1
ldr r0, [r0, #4]
tst r0, r1
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
bl vct_alloc_packet_buffer
movs r4, r0
bne _020B2174
ldr r0, [r5, #0x34]
bl vct_flush_audio_queue
ldr r0, [r5, #0x34]
bl vct_flush_decoder
bl vct_alloc_packet_buffer
movs r4, r0
bne _020B2168
bl vct_flush_all_audio_queue
bl vct_flush_all_decoder
bl vct_alloc_packet_buffer
mov r4, r0
_020B2168:
cmp r4, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_020B2174:
add r0, r4, #0x5c
add r0, r0, #0x400
sub r2, r8, #0xc
sub r1, r0, r2
add r0, sb, #0xc
str r1, [sp]
bl MI_CpuCopy8
ldr r0, [r5, #0x34]
sub r1, r8, #0xc
strb r0, [r4, #0x11]
ldr r0, [sp]
str r6, [r4, #0xc]
str r0, [r4, #0x474]
str r1, [r4, #0x14]
str fp, [r4, #0x464]
str r7, [r4, #0x468]
strb sl, [r4, #0x10]
ldrb r2, [sb, #5]
mov r0, r5
mov r1, r4
and r2, r2, #0x80
str r2, [r4, #0x45c]
ldr r2, [sb, #8]
str r2, [r4, #0x460]
ldrh r2, [sb, #6]
str r2, [r4, #0x18]
bl vct_calc_jitter_and_skew
cmp r0, #0
mov r0, r4
bne _020B21F8
bl vct_free_packet_buffer
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_020B21F8:
bl vct_insert_decoder
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_020B2204: .word _021D6040
_020B2208: .word sStream
_020B220C: .word sCodecInfo + 1
_020B2210: .word sCodecInfo
arm_func_end vct_handle_audio
arm_func_start vct_decode_audio_buffer
vct_decode_audio_buffer: ; 0x020B2214
stmdb sp!, {r4, r5, r6, r7, r8, lr}
bl vct_top_decoder
movs r4, r0
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
bl OS_DisableInterrupts
ldrb r6, [r4, #0x11]
mov r7, r0
mov r0, r6
bl vct_count_decoder_queue
mov r5, r0
cmp r5, #0
mov r4, #0
ble _020B22D4
_020B224C:
mov r0, r6
bl vct_get_packet_from_decoder
mov r8, r0
ldr r3, [r8, #0xc]
cmp r3, #2
blt _020B2278
ldr r0, [r8, #0x474]
ldr r2, [r8, #0x14]
add r1, r8, #0x1c
bl vct_decode_adpcm
b _020B229C
_020B2278:
cmp r3, #1
ldr r0, [r8, #0x474]
ldr r2, [r8, #0x14]
bne _020B2294
add r1, r8, #0x1c
bl vct_decode_g711_ulaw
b _020B229C
_020B2294:
add r1, r8, #0x1c
bl vct_decode_8bit_raw
_020B229C:
add r1, r8, #0x1c
mov r0, r8
str r1, [r8, #0x474]
bl vct_remove_packet_from_decoder
ldrb r1, [r8, #0x11]
mov r0, r8
bl vct_insert_audio_queue
cmp r0, #0
bge _020B22C8
mov r0, r8
bl vct_free_packet_buffer
_020B22C8:
add r4, r4, #1
cmp r4, r5
blt _020B224C
_020B22D4:
mov r0, r7
bl OS_RestoreInterrupts
mov r0, r5
ldmia sp!, {r4, r5, r6, r7, r8, pc}
arm_func_end vct_decode_audio_buffer
arm_func_start vct_flush_send_buffer
vct_flush_send_buffer: ; 0x020B22E4
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r1, _020B23E4 ; =_021D6040
ldr r0, [r1, #0x20]
cmp r0, #0
moveq r0, #1
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
ldr r0, [r1, #0xf08]
cmp r0, #0
bne _020B232C
bl vct_prepare_send_buffer
ldr r1, _020B23E4 ; =_021D6040
cmp r0, #0
str r0, [r1, #0xf08]
ldrne r0, [r1, #0x18]
cmpne r0, #0
movne r0, #0
moveq r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_020B232C:
ldr r0, _020B23E8 ; =__vct
mov r5, #1
ldr r0, [r0, #0x10]
cmp r0, #2
bne _020B2360
ldr r3, [r1, #0xf10]
ldr r0, _020B23EC ; =sTransceiverBalance
add r2, r3, #1
str r2, [r1, #0xf10]
ldr r1, [r1, #0xf14]
add r1, r1, r1, lsl #1
add r0, r0, r1
ldrb r5, [r3, r0]
_020B2360:
mov r4, #0
mov r7, #0x80000000
ldr r6, _020B23E4 ; =_021D6040
b _020B23D4
_020B2370:
ldr r1, [r6, #0xf0c]
mov r2, r1
clz r2, r2
cmp r2, #0x20
beq _020B23DC
mvn r0, r7, lsr r2
and r0, r1, r0
str r0, [r6, #0xf0c]
rsb r0, r2, #0x1f
ldr r1, [r6, #0xf08]
ldr r2, [r6, #0xc]
and r0, r0, #0xff
bl DWC_SendUnreliable
ldr r0, [r6, #0xf0c]
cmp r0, #0
bne _020B23D0
ldr r0, _020B23E4 ; =_021D6040
mov r1, #0
ldr r2, [r0, #0xf00]
add r2, r2, #1
str r2, [r0, #0xf00]
str r1, [r0, #0xf08]
str r1, [r0, #0xf0c]
b _020B23DC
_020B23D0:
add r4, r4, #1
_020B23D4:
cmp r4, r5
blt _020B2370
_020B23DC:
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_020B23E4: .word _021D6040
_020B23E8: .word __vct
_020B23EC: .word sTransceiverBalance
arm_func_end vct_flush_send_buffer
arm_func_start vct_init_decoder
vct_init_decoder: ; 0x020B23F0
stmdb sp!, {r3, lr}
bl OS_DisableInterrupts
mov r3, #0
ldr r1, _020B2428 ; =_021D6F58
mov r2, r3
str r3, [r1, #4]
str r3, [r1]
ldr r1, _020B242C ; =_021D6F60
_020B2410:
str r2, [r1, r3, lsl #2]
add r3, r3, #1
cmp r3, #3
blt _020B2410
bl OS_RestoreInterrupts
ldmia sp!, {r3, pc}
.align 2, 0
_020B2428: .word _021D6F58
_020B242C: .word _021D6F60
arm_func_end vct_init_decoder
arm_func_start vct_flush_decoder
vct_flush_decoder: ; 0x020B2430
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
bl OS_DisableInterrupts
mov r4, r0
mov r0, r6
bl vct_get_packet_from_decoder
movs r5, r0
beq _020B2470
_020B2450:
mov r0, r5
bl vct_remove_packet_from_decoder
mov r0, r5
bl vct_free_packet_buffer
mov r0, r6
bl vct_get_packet_from_decoder
movs r5, r0
bne _020B2450
_020B2470:
ldr r1, _020B2488 ; =_021D6F60
mov r2, #0
mov r0, r4
str r2, [r1, r6, lsl #2]
bl OS_RestoreInterrupts
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_020B2488: .word _021D6F60
arm_func_end vct_flush_decoder
arm_func_start vct_flush_all_decoder
vct_flush_all_decoder: ; 0x020B248C
stmdb sp!, {r3, r4, r5, lr}
bl OS_DisableInterrupts
ldr r1, _020B24F0 ; =_021D6F58
mov r4, r0
ldr r5, [r1]
cmp r5, #0
beq _020B24BC
_020B24A8:
mov r0, r5
ldr r5, [r5, #8]
bl vct_free_packet_buffer
cmp r5, #0
bne _020B24A8
_020B24BC:
ldr r0, _020B24F0 ; =_021D6F58
mov r2, #0
str r2, [r0]
str r2, [r0, #4]
ldr r0, _020B24F4 ; =_021D6F60
mov r1, r2
_020B24D4:
str r1, [r0, r2, lsl #2]
add r2, r2, #1
cmp r2, #3
blt _020B24D4
mov r0, r4
bl OS_RestoreInterrupts
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_020B24F0: .word _021D6F58
_020B24F4: .word _021D6F60
arm_func_end vct_flush_all_decoder
arm_func_start vct_insert_decoder
vct_insert_decoder: ; 0x020B24F8
stmdb sp!, {r4, lr}
mov r4, r0
bl OS_DisableInterrupts
ldr r1, _020B2578 ; =_021D6F58
ldr r2, [r1]
cmp r2, #0
bne _020B2534
str r4, [r1]
mov r3, #0
str r3, [r4, #4]
ldr r2, [r1]
str r3, [r2, #8]
ldr r2, [r1]
str r2, [r1, #4]
b _020B2550
_020B2534:
ldr r3, [r1, #4]
mov r2, #0
str r3, [r4, #4]
str r2, [r4, #8]
ldr r2, [r1, #4]
str r4, [r2, #8]
str r4, [r1, #4]
_020B2550:
ldrb r2, [r4, #0x11]
ldr r3, _020B257C ; =_021D6F60
ldr r1, [r3, r2, lsl #2]
add r1, r1, #1
str r1, [r3, r2, lsl #2]
bl OS_RestoreInterrupts
ldrb r1, [r4, #0x11]
ldr r0, _020B257C ; =_021D6F60
ldr r0, [r0, r1, lsl #2]
ldmia sp!, {r4, pc}
.align 2, 0
_020B2578: .word _021D6F58
_020B257C: .word _021D6F60
arm_func_end vct_insert_decoder
arm_func_start vct_top_decoder
vct_top_decoder: ; 0x020B2580
ldr r0, _020B258C ; =_021D6F58
ldr r0, [r0]
bx lr
.align 2, 0
_020B258C: .word _021D6F58
arm_func_end vct_top_decoder
arm_func_start vct_count_decoder_queue
vct_count_decoder_queue: ; 0x020B2590
ldr r1, _020B259C ; =_021D6F60
ldr r0, [r1, r0, lsl #2]
bx lr
.align 2, 0
_020B259C: .word _021D6F60
arm_func_end vct_count_decoder_queue
arm_func_start vct_get_packet_from_decoder
vct_get_packet_from_decoder: ; 0x020B25A0
stmdb sp!, {r3, r4, r5, lr}
ldr r1, _020B25EC ; =_021D6F58
mov r5, r0
ldr r4, [r1]
bl OS_DisableInterrupts
cmp r4, #0
beq _020B25E0
_020B25BC:
ldrb r1, [r4, #0x11]
cmp r1, r5
bne _020B25D4
bl OS_RestoreInterrupts
mov r0, r4
ldmia sp!, {r3, r4, r5, pc}
_020B25D4:
ldr r4, [r4, #8]
cmp r4, #0
bne _020B25BC
_020B25E0:
bl OS_RestoreInterrupts
mov r0, #0
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_020B25EC: .word _021D6F58
arm_func_end vct_get_packet_from_decoder
arm_func_start vct_remove_packet_from_decoder
vct_remove_packet_from_decoder: ; 0x020B25F0
stmdb sp!, {r4, lr}
mov r4, r0
bl OS_DisableInterrupts
ldr r2, [r4, #4]
cmp r2, #0
ldrne r1, [r4, #8]
strne r1, [r2, #8]
bne _020B2628
ldr r2, [r4, #8]
ldr r1, _020B267C ; =_021D6F58
cmp r2, #0
str r2, [r1]
movne r1, #0
strne r1, [r2, #4]
_020B2628:
ldr r2, [r4, #8]
cmp r2, #0
ldrne r1, [r4, #4]
strne r1, [r2, #4]
bne _020B2654
ldr r2, [r4, #4]
ldr r1, _020B267C ; =_021D6F58
cmp r2, #0
str r2, [r1, #4]
movne r1, #0
strne r1, [r2, #8]
_020B2654:
ldrb r2, [r4, #0x11]
ldr r3, _020B2680 ; =_021D6F60
ldr r1, [r3, r2, lsl #2]
sub r1, r1, #1
str r1, [r3, r2, lsl #2]
bl OS_RestoreInterrupts
ldrb r1, [r4, #0x11]
ldr r0, _020B2680 ; =_021D6F60
ldr r0, [r0, r1, lsl #2]
ldmia sp!, {r4, pc}
.align 2, 0
_020B267C: .word _021D6F58
_020B2680: .word _021D6F60
arm_func_end vct_remove_packet_from_decoder
arm_func_start vct_encode_g711_ulaw
vct_encode_g711_ulaw: ; 0x020B2684
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov r7, #0
cmp r2, #0
ldmlsia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr ip, _020B2728 ; =0x00001FDF
ldr r3, _020B272C ; =ulaw_segment
mov lr, #0xff
mov r4, #0x7f
_020B26A4:
mov r5, r7, lsl #1
ldrsh r5, [r1, r5]
mov fp, r3
movs sl, r5, asr #2
movmi r6, r4
ldr r5, _020B2728 ; =0x00001FDF
rsbmi sl, sl, #0
movpl r6, lr
cmp sl, r5
movgt sl, ip
mov r5, #0
add sb, sl, #0x21
_020B26D4:
ldr r8, [fp], #4
cmp sb, r8
ble _020B26F0
add r5, r5, #1
cmp r5, #8
blt _020B26D4
mov r5, #8
_020B26F0:
cmp r5, #8
eorge r5, r6, #0x7f
bge _020B2714
add sb, sl, #0x21
add r8, r5, #1
mov r8, sb, asr r8
and r8, r8, #0xf
orr r5, r8, r5, lsl #4
eor r5, r5, r6
_020B2714:
strb r5, [r0, r7]
add r7, r7, #1
cmp r7, r2
blo _020B26A4
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_020B2728: .word 0x00001FDF
_020B272C: .word ulaw_segment
arm_func_end vct_encode_g711_ulaw
arm_func_start vct_decode_g711_ulaw
vct_decode_g711_ulaw: ; 0x020B2730
stmdb sp!, {r4, lr}
mov r4, #0
cmp r2, #0
ldmlsia sp!, {r4, pc}
_020B2740:
ldrb r3, [r0, r4]
mvn lr, r3
mov r3, lr, lsl #0x1c
mov ip, r3, lsr #0x19
and r3, lr, #0x70
add ip, ip, #0x84
mov r3, r3, asr #4
mov r3, ip, lsl r3
tst lr, #0x80
rsbne ip, r3, #0x84
subeq ip, r3, #0x84
mov r3, r4, lsl #1
add r4, r4, #1
strh ip, [r1, r3]
cmp r4, r2
blo _020B2740
ldmia sp!, {r4, pc}
arm_func_end vct_decode_g711_ulaw
arm_func_start vct_encode_8bit_raw
vct_encode_8bit_raw: ; 0x020B2784
cmp r2, #0
mov ip, #0
bxls lr
_020B2790:
mov r3, ip, lsl #1
ldrsh r3, [r1, r3]
mov r3, r3, asr #8
strb r3, [r0, ip]
add ip, ip, #1
cmp ip, r2
blo _020B2790
bx lr
arm_func_end vct_encode_8bit_raw
arm_func_start vct_decode_8bit_raw
vct_decode_8bit_raw: ; 0x020B27B0
stmdb sp!, {r3, lr}
cmp r2, #0
mov lr, #0
ldmlsia sp!, {r3, pc}
_020B27C0:
ldrsb ip, [r0, lr]
mov r3, lr, lsl #1
add lr, lr, #1
mov ip, ip, lsl #8
strh ip, [r1, r3]
cmp lr, r2
blo _020B27C0
ldmia sp!, {r3, pc}
arm_func_end vct_decode_8bit_raw
arm_func_start vct_init_audio_queue
vct_init_audio_queue: ; 0x020B27E0
stmdb sp!, {r4, lr}
mov r4, r0
bl OS_DisableInterrupts
ldr r3, _020B2810 ; =_021D6F84
mov ip, #0
ldr r1, _020B2814 ; =_021D6F78
ldr r2, _020B2818 ; =_021D6F6C
str ip, [r3, r4, lsl #2]
str ip, [r2, r4, lsl #2]
str ip, [r1, r4, lsl #2]
bl OS_RestoreInterrupts
ldmia sp!, {r4, pc}
.align 2, 0
_020B2810: .word _021D6F84
_020B2814: .word _021D6F78
_020B2818: .word _021D6F6C
arm_func_end vct_init_audio_queue
arm_func_start vct_flush_audio_queue
vct_flush_audio_queue: ; 0x020B281C
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r5, r0
bl OS_DisableInterrupts
ldr r7, _020B2880 ; =_021D6F6C
mov r4, r0
ldr r0, [r7, r5, lsl #2]
cmp r0, #0
beq _020B2860
mov r6, #0
_020B2840:
ldr r1, [r0, #8]
str r1, [r7, r5, lsl #2]
cmp r1, #0
strne r6, [r1, #4]
bl vct_free_packet_buffer
ldr r0, [r7, r5, lsl #2]
cmp r0, #0
bne _020B2840
_020B2860:
ldr r2, _020B2884 ; =_021D6F84
mov r3, #0
ldr r1, _020B2888 ; =_021D6F78
mov r0, r4
str r3, [r2, r5, lsl #2]
str r3, [r1, r5, lsl #2]
bl OS_RestoreInterrupts
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_020B2880: .word _021D6F6C
_020B2884: .word _021D6F84
_020B2888: .word _021D6F78
arm_func_end vct_flush_audio_queue
arm_func_start vct_flush_all_audio_queue
vct_flush_all_audio_queue: ; 0x020B288C
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bl OS_DisableInterrupts
mov r6, #0
mov r5, r0
mov sl, r6
ldr r4, _020B2900 ; =_021D6F6C
mov sb, r6
ldr r8, _020B2904 ; =_021D6F84
ldr r7, _020B2908 ; =_021D6F78
b _020B28EC
_020B28B4:
ldr r0, [r4, r6, lsl #2]
cmp r0, #0
beq _020B28E0
_020B28C0:
ldr r1, [r0, #8]
str r1, [r4, r6, lsl #2]
cmp r1, #0
strne sl, [r1, #4]
bl vct_free_packet_buffer
ldr r0, [r4, r6, lsl #2]
cmp r0, #0
bne _020B28C0
_020B28E0:
str sb, [r8, r6, lsl #2]
str sb, [r7, r6, lsl #2]
add r6, r6, #1
_020B28EC:
cmp r6, #3
blt _020B28B4
mov r0, r5
bl OS_RestoreInterrupts
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_020B2900: .word _021D6F6C
_020B2904: .word _021D6F84
_020B2908: .word _021D6F78
arm_func_end vct_flush_all_audio_queue
arm_func_start vct_insert_audio_queue
vct_insert_audio_queue: ; 0x020B290C
stmdb sp!, {r3, r4, r5, lr}
movs r5, r0
mov r4, r1
mvneq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
cmp r4, #3
mvnhs r0, #0
ldmhsia sp!, {r3, r4, r5, pc}
bl OS_DisableInterrupts
ldr ip, _020B2A00 ; =_021D6F6C
ldr r1, [ip, r4, lsl #2]
cmp r1, #0
bne _020B2964
str r5, [ip, r4, lsl #2]
mov r3, #0
str r3, [r5, #4]
ldr r2, [ip, r4, lsl #2]
ldr r1, _020B2A04 ; =_021D6F84
str r3, [r2, #8]
ldr r2, [ip, r4, lsl #2]
str r2, [r1, r4, lsl #2]
b _020B29E0
_020B2964:
ldr r1, _020B2A04 ; =_021D6F84
ldr r3, [r1, r4, lsl #2]
cmp r3, #0
beq _020B29C0
ldr r2, [r5, #0x18]
_020B2978:
ldr r1, [r3, #0x18]
cmp r1, r2
bhs _020B29B4
str r3, [r5, #4]
ldr r1, [r3, #8]
ldr r2, _020B2A04 ; =_021D6F84
str r1, [r5, #8]
str r5, [r3, #8]
ldr r1, [r5, #8]
cmp r1, #0
strne r5, [r1, #4]
ldr r1, [r2, r4, lsl #2]
cmp r3, r1
streq r5, [r2, r4, lsl #2]
b _020B29E0
_020B29B4:
ldr r3, [r3, #4]
cmp r3, #0
bne _020B2978
_020B29C0:
mov r1, #0
ldr r2, _020B2A00 ; =_021D6F6C
str r1, [r5, #4]
ldr r1, [r2, r4, lsl #2]
str r1, [r5, #8]
ldr r1, [r2, r4, lsl #2]
str r5, [r1, #4]
str r5, [r2, r4, lsl #2]
_020B29E0:
ldr r2, _020B2A08 ; =_021D6F78
ldr r1, [r2, r4, lsl #2]
add r1, r1, #1
str r1, [r2, r4, lsl #2]
bl OS_RestoreInterrupts
ldr r0, _020B2A08 ; =_021D6F78
ldr r0, [r0, r4, lsl #2]
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_020B2A00: .word _021D6F6C
_020B2A04: .word _021D6F84
_020B2A08: .word _021D6F78
arm_func_end vct_insert_audio_queue
arm_func_start vct_top_audio_queue
vct_top_audio_queue: ; 0x020B2A0C
stmdb sp!, {r4, lr}
mov r4, r0
bl OS_DisableInterrupts
ldr r1, _020B2A44 ; =_021D6F6C
ldr r1, [r1, r4, lsl #2]
cmp r1, #0
beq _020B2A38
bl OS_RestoreInterrupts
ldr r0, _020B2A44 ; =_021D6F6C
ldr r0, [r0, r4, lsl #2]
ldmia sp!, {r4, pc}
_020B2A38:
bl OS_RestoreInterrupts
mov r0, #0
ldmia sp!, {r4, pc}
.align 2, 0
_020B2A44: .word _021D6F6C
arm_func_end vct_top_audio_queue
arm_func_start vct_pop_audio_queue
vct_pop_audio_queue: ; 0x020B2A48
stmdb sp!, {r4, lr}
mov r4, r0
bl OS_DisableInterrupts
ldr ip, _020B2AA4 ; =_021D6F6C
ldr r1, [ip, r4, lsl #2]
cmp r1, #0
beq _020B2A94
ldr r2, _020B2AA8 ; =_021D6F78
ldr r3, [r1, #8]
ldr r1, [r2, r4, lsl #2]
str r3, [ip, r4, lsl #2]
sub r1, r1, #1
str r1, [r2, r4, lsl #2]
cmp r3, #0
movne r1, #0
strne r1, [r3, #4]
ldreq r1, _020B2AAC ; =_021D6F84
moveq r2, #0
streq r2, [r1, r4, lsl #2]
_020B2A94:
bl OS_RestoreInterrupts
ldr r0, _020B2AA8 ; =_021D6F78
ldr r0, [r0, r4, lsl #2]
ldmia sp!, {r4, pc}
.align 2, 0
_020B2AA4: .word _021D6F6C
_020B2AA8: .word _021D6F78
_020B2AAC: .word _021D6F84
arm_func_end vct_pop_audio_queue
arm_func_start vct_count_audio_queue
vct_count_audio_queue: ; 0x020B2AB0
ldr r1, _020B2ABC ; =_021D6F78
ldr r0, [r1, r0, lsl #2]
bx lr
.align 2, 0
_020B2ABC: .word _021D6F78
arm_func_end vct_count_audio_queue
arm_func_start vct_init_stream
vct_init_stream: ; 0x020B2AC0
stmdb sp!, {r4, r5, r6, lr}
mov r5, r1
mov r4, r2
mov r1, #0
mov r2, #0x28
mov r6, r0
bl MI_CpuFill8
ldr r0, _020B2B48 ; =0x000134DF
mov r1, #0
str r0, [r6, #4]
str r1, [r6, #0x28]
str r1, [r6, #0x2c]
str r5, [r6, #0x34]
str r4, [r6, #0x38]
str r1, [r6, #0x7c]
str r1, [r6, #0x80]
str r1, [r6, #0x84]
str r1, [r6, #0x88]
str r0, [r6, #0x8c]
str r1, [r6, #0x90]
str r1, [r6, #0x4c]
str r1, [r6, #0x44]
str r1, [r6, #0x48]
str r1, [r6, #0x6c]
str r1, [r6, #0x70]
str r1, [r6, #0x50]
str r1, [r6, #0x54]
str r1, [r6, #0x58]
mov r0, #1
str r0, [r6, #0x5c]
str r1, [r6, #0x3c]
str r1, [r6, #0x40]
str r1, [r6, #0x30]
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_020B2B48: .word 0x000134DF
arm_func_end vct_init_stream
arm_func_start vct_reset_stream
vct_reset_stream: ; 0x020B2B4C
stmdb sp!, {r4, lr}
mov r4, r0
ldr r0, [r4, #0x3c]
cmp r0, #0
beq _020B2B6C
bl vct_free_packet_buffer
mov r0, #0
str r0, [r4, #0x3c]
_020B2B6C:
mvn r0, #0
str r0, [r4, #0x38]
ldmia sp!, {r4, pc}
arm_func_end vct_reset_stream
arm_func_start vct_save_previous_buffer
vct_save_previous_buffer: ; 0x020B2B78
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
ldr r0, [r5, #0x3c]
mov r4, r1
cmp r0, #0
beq _020B2B94
bl vct_free_packet_buffer
_020B2B94:
str r4, [r5, #0x3c]
ldr r0, [r5, #0x34]
bl vct_pop_audio_queue
ldmia sp!, {r3, r4, r5, pc}
arm_func_end vct_save_previous_buffer
arm_func_start vct_init_sequence
vct_init_sequence: ; 0x020B2BA4
ldr r2, _020B2BC0 ; =0x00010001
strh r1, [r0, #0x68]
str r2, [r0, #0x64]
mov r1, #0
str r1, [r0, #0x60]
str r1, [r0, #0x5c]
bx lr
.align 2, 0
_020B2BC0: .word 0x00010001
arm_func_end vct_init_sequence
arm_func_start vct_update_sequence
vct_update_sequence: ; 0x020B2BC4
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
ldrh ip, [r6, #0x68]
mov r4, r2
ldr r3, _020B2C94 ; =0x00000BB8
sub r2, r4, ip
mov r2, r2, lsl #0x10
mov r5, r1
cmp r3, r2, lsr #16
mov r2, r2, lsr #0x10
bls _020B2C08
cmp r4, ip
ldrlo r0, [r6, #0x60]
addlo r0, r0, #0x10000
strlo r0, [r6, #0x60]
strh r4, [r6, #0x68]
b _020B2C80
_020B2C08:
ldr r1, _020B2C98 ; =0x0000FF9C
cmp r2, r1
bhi _020B2C54
ldr r1, [r6, #0x64]
cmp r4, r1
bne _020B2C3C
mov r1, r4
bl vct_init_sequence
sub r0, r4, #1
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
str r0, [r6, #0x54]
b _020B2C80
_020B2C3C:
add r0, r4, #1
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
str r0, [r6, #0x64]
mov r0, #0
ldmia sp!, {r4, r5, r6, pc}
_020B2C54:
ldr r0, [r6, #0x54]
ldr r1, [r6, #0x60]
add r0, r0, #0x39c
add r1, r4, r1
add r0, r0, #0xfc00
cmp r1, r0
bls _020B2C80
sub r0, r1, #0x10000
str r0, [r5, #0x18]
mov r0, #1
ldmia sp!, {r4, r5, r6, pc}
_020B2C80:
ldr r1, [r6, #0x60]
mov r0, #1
add r1, r4, r1
str r1, [r5, #0x18]
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_020B2C94: .word 0x00000BB8
_020B2C98: .word 0x0000FF9C
arm_func_end vct_update_sequence
arm_func_start vct_calc_jitter_and_skew
vct_calc_jitter_and_skew: ; 0x020B2C9C
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
ldr r2, [r7, #0x5c]
mov r6, r1
cmp r2, #0
mov r5, #0
beq _020B2CCC
ldr r1, [r6, #0x18]
mov r1, r1, lsl #0x10
mov r1, r1, lsr #0x10
bl vct_init_sequence
b _020B2D64
_020B2CCC:
ldr r2, [r6, #0x18]
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
bl vct_update_sequence
cmp r0, #0
bne _020B2CF8
ldr r1, [r7, #0x14]
mov r0, r5
add r1, r1, #1
str r1, [r7, #0x14]
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_020B2CF8:
ldr r0, [r6, #0x18]
str r0, [r7, #0x10]
ldr r1, [r6, #0x18]
ldr r2, [r7, #0x54]
cmp r2, r1
bne _020B2D24
ldr r1, [r7, #0x14]
mov r0, r5
add r1, r1, #1
str r1, [r7, #0x14]
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_020B2D24:
add r0, r2, #1
cmp r0, r1
beq _020B2D64
ldr r0, [r6, #0x45c]
cmp r0, #0
bne _020B2D64
subs r0, r1, r2
rsbmi r0, r0, #0
cmp r0, #0x64
strgt r1, [r7, #0x54]
movgt r0, #0
ldmgtia sp!, {r3, r4, r5, r6, r7, pc}
cmp r2, r1
ldrhi r0, [r7, #0x1c]
addhi r0, r0, #1
strhi r0, [r7, #0x1c]
_020B2D64:
ldr r0, [r6, #0x18]
str r0, [r7, #0x54]
ldr r0, [r7, #0x4c]
cmp r0, #0
bne _020B2D9C
ldr r1, [r6, #0x460]
add r0, r6, #0x64
str r1, [r7, #0x4c]
add r1, r0, #0x400
add r0, r7, #0x44
ldmia r1, {r2, r3}
stmia r0, {r2, r3}
mov r0, #0
str r0, [r7, #0x6c]
_020B2D9C:
ldr r2, [r6, #0x460]
ldr r0, [r7, #0x4c]
ldr r3, [r6, #0x464]
ldr r1, [r7, #0x44]
sub r0, r2, r0
ldr r2, [r7, #0x80]
mov r0, r0, lsl #6
subs r1, r3, r1
subs r4, r0, r1
cmp r2, #0
beq _020B2DD4
ldr r1, [r6, #0x45c]
cmp r1, #0
beq _020B2DDC
_020B2DD4:
str r4, [r7, #0x80]
b _020B2E50
_020B2DDC:
str r4, [r7, #0x80]
subs r1, r4, r2
ldr r2, [r7, #0x7c]
rsbmi r1, r1, #0
add r2, r2, #0x318
add r2, r2, #0x8800
mov ip, r2, lsl #1
ldr r3, _020B302C ; =0x0000CC8D
mov r2, #0
adds r3, ip, r3
mov lr, r1, asr #0x1f
adc r2, r2, ip, asr #31
cmp lr, r2
cmpeq r1, r3
bls _020B2E30
ldr ip, _020B3030 ; =0x75CA82CB
mov r2, r1, lsr #0x1f
smull r3, lr, ip, r1
add lr, r2, lr, asr #14
add r2, lr, #2
str r2, [r7, #0x84]
_020B2E30:
ldr r2, [r7, #0x84]
cmp r2, #0
bgt _020B2E50
ldr r2, [r7, #0x7c]
sub r1, r1, r2
add r1, r2, r1, asr #4
str r1, [r7, #0x7c]
str r1, [r7, #0x18]
_020B2E50:
ldr r2, [r7, #0x44]
ldr r3, [r7, #4]
ldr r1, [r7, #0x48]
adds r2, r0, r2
adc r0, r1, #0
adds r1, r3, r2
str r1, [r6, #0x46c]
adc r0, r0, #0
str r0, [r6, #0x470]
bl OS_GetTick
ldr ip, [r6, #0x46c]
ldr r2, _020B3034 ; =0x00008B18
ldr lr, [r6, #0x470]
adds r6, ip, r2
adc r3, lr, #0
cmp r3, r1
mov r3, #0
cmpeq r6, r0
movlo r0, r3
ldmloia sp!, {r3, r4, r5, r6, r7, pc}
ldr r6, _020B3038 ; =0x0007FD88
adds r6, r0, r6
adc r0, r1, r3
cmp lr, r0
cmpeq ip, r6
movhi r0, r3
ldmhiia sp!, {r3, r4, r5, r6, r7, pc}
ldr r0, [r7, #0x84]
cmp r0, #0
bgt _020B3018
ldr r0, [r7, #0x7c]
ldr r6, _020B3030 ; =0x75CA82CB
add ip, r0, r0, lsl #1
smull r1, r0, r6, ip
ldr r6, [r7, #0x8c]
mov r1, ip, lsr #0x1f
cmp ip, r6
add r0, r1, r0, asr #14
bls _020B2F24
add r1, r0, #1
mul r6, r1, r2
mul r1, r0, r2
add r0, r6, #0xdf
add r2, r0, #0x13400
ldr r0, _020B303C ; =0xFFFF2F5C
add r1, r1, #0xdf
str r2, [r7, #0x8c]
add r0, r2, r0
str r0, [r7, #0x88]
add r0, r1, #0x13400
str r0, [r7, #4]
str r3, [r7, #0x90]
b _020B2F84
_020B2F24:
ldr r1, [r7, #0x88]
cmp ip, r1
bge _020B2F84
ldr r1, [r7, #0x90]
add r1, r1, #1
str r1, [r7, #0x90]
cmp r1, #0x46
bls _020B2F84
add r1, r0, #1
mul ip, r1, r2
add r1, ip, #0xdf
add r1, r1, #0x13400
ldr r6, _020B3040 ; =0xFFFFBA74
str r1, [r7, #0x8c]
ldr r1, _020B3034 ; =0x00008B18
mlas r2, r0, r2, r6
str r2, [r7, #0x88]
mul r1, r0, r1
add r0, r1, #0xdf
strmi r3, [r7, #0x88]
add r0, r0, #0x13400
mov r2, #0
str r0, [r7, #4]
str r2, [r7, #0x90]
_020B2F84:
ldr r1, [r7, #4]
ldr r0, _020B3044 ; =0x00068520
cmp r1, r0
strhi r0, [r7, #4]
ldr r0, [r7, #0x6c]
cmp r0, #0x10
bhs _020B2FB4
add r0, r0, #1
str r0, [r7, #0x6c]
str r4, [r7, #0x74]
str r4, [r7, #0x78]
b _020B2FD0
_020B2FB4:
ldr r0, [r7, #0x74]
rsb r0, r0, r0, lsl #5
add r1, r4, r0
mov r0, r1, asr #4
add r0, r1, r0, lsr #27
mov r0, r0, asr #5
str r0, [r7, #0x74]
_020B2FD0:
ldr r2, [r7, #0x78]
ldr r1, [r7, #0x74]
ldr r0, _020B3048 ; =0x00008701
sub r1, r2, r1
cmp r1, r0
mvn r0, #0x8700
movgt r5, #1
str r1, [r7, #0xc]
cmp r1, r0
bge _020B3008
ldr r1, [r7, #0x70]
add r5, r0, #0x8700
add r0, r1, #1
str r0, [r7, #0x70]
_020B3008:
cmp r5, #0
movne r0, #0
strne r0, [r7, #0x6c]
strne r0, [r7, #0x4c]
_020B3018:
ldr r1, [r7, #0x84]
mov r0, #1
sub r1, r1, #1
str r1, [r7, #0x84]
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_020B302C: .word 0x0000CC8D
_020B3030: .word 0x75CA82CB
_020B3034: .word 0x00008B18
_020B3038: .word 0x0007FD88
_020B303C: .word 0xFFFF2F5C
_020B3040: .word 0xFFFFBA74
_020B3044: .word 0x00068520
_020B3048: .word 0x00008701
arm_func_end vct_calc_jitter_and_skew
arm_func_start VCT_CreateSession
VCT_CreateSession: ; 0x020B304C
stmdb sp!, {r3, lr}
ldr r1, _020B3070 ; =__vct
ldr r1, [r1, #0x10]
cmp r1, #0
cmpne r1, #2
moveq r0, #0
ldmeqia sp!, {r3, pc}
bl vct_create_session_impl
ldmia sp!, {r3, pc}
.align 2, 0
_020B3070: .word __vct
arm_func_end VCT_CreateSession
arm_func_start VCT_DeleteSession
VCT_DeleteSession: ; 0x020B3074
stmdb sp!, {r3, lr}
ldr r2, _020B3124 ; =_021D6F90
mov ip, #0
cmp r0, #0
ldr lr, [r2, #0x14]
moveq r0, ip
ldmeqia sp!, {r3, pc}
ldr r1, _020B3128 ; =__vct
ldr r1, [r1, #0x10]
cmp r1, #2
bne _020B30B4
ldr r1, _020B312C ; =_021D6FCC
cmp r0, r1
streq ip, [r2, #0x3c]
mov r0, #1
ldmia sp!, {r3, pc}
_020B30B4:
cmp lr, #0
beq _020B311C
_020B30BC:
cmp lr, r0
bne _020B310C
mov r3, #0
str r3, [r0]
cmp ip, #0
ldrne r1, [r0, #0x14]
strne r1, [ip, #0x14]
bne _020B30F4
ldr r2, [lr, #0x14]
cmp r2, #0
ldrne r1, _020B3124 ; =_021D6F90
strne r2, [r1, #0x14]
ldreq r1, _020B3124 ; =_021D6F90
streq r3, [r1, #0x14]
_020B30F4:
ldr r1, _020B3124 ; =_021D6F90
ldr r2, [r1, #0x10]
str r2, [r0, #0x14]
str r0, [r1, #0x10]
mov r0, #1
ldmia sp!, {r3, pc}
_020B310C:
mov ip, lr
ldr lr, [lr, #0x14]
cmp lr, #0
bne _020B30BC
_020B311C:
mov r0, #0
ldmia sp!, {r3, pc}
.align 2, 0
_020B3124: .word _021D6F90
_020B3128: .word __vct
_020B312C: .word _021D6FCC
arm_func_end VCT_DeleteSession
arm_func_start vct_build_request_data
vct_build_request_data: ; 0x020B3130
stmdb sp!, {r4, r5, r6, lr}
movs r5, r0
mov r4, r1
mov r6, r2
mvneq r0, #0
ldmeqia sp!, {r4, r5, r6, pc}
cmp r3, #0x10
mvnlo r0, #0
ldmloia sp!, {r4, r5, r6, pc}
ldr r1, _020B31DC ; =__vct
ldr r1, [r1, #0xc]
cmp r1, #1
mvneq r0, #2
ldmeqia sp!, {r4, r5, r6, pc}
cmp r4, #0
blt _020B3178
cmp r4, #5
blt _020B3180
_020B3178:
mvn r0, #2
ldmia sp!, {r4, r5, r6, pc}
_020B3180:
mov r3, #0xff
mov r1, r6
and r2, r4, #0xff
strb r3, [r6, #4]
bl vct_build_ssp_header
mov r0, r5
mov r1, r6
bl vct_check_send_state
cmp r0, #0
mvneq r0, #2
ldmeqia sp!, {r4, r5, r6, pc}
ldr r0, _020B31DC ; =__vct
ldr r0, [r0, #0x10]
cmp r0, #1
cmpeq r4, #0
bne _020B31D4
mov r0, r5
bl vct_check_multisession
cmp r0, #0
mvneq r0, #2
ldmeqia sp!, {r4, r5, r6, pc}
_020B31D4:
mov r0, #0
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_020B31DC: .word __vct
arm_func_end vct_build_request_data
arm_func_start VCT_Request
VCT_Request: ; 0x020B31E0
stmdb sp!, {r3, lr}
ldr r2, _020B3200 ; =__vct
ldr r2, [r2, #0x10]
cmp r2, #2
mvneq r0, #2
ldmeqia sp!, {r3, pc}
bl vct_request_impl
ldmia sp!, {r3, pc}
.align 2, 0
_020B3200: .word __vct
arm_func_end VCT_Request
arm_func_start vct_build_response_data
vct_build_response_data: ; 0x020B3204
stmdb sp!, {r4, r5, r6, lr}
movs r5, r0
mov r6, r1
mov r4, r2
mvneq r0, #0
ldmeqia sp!, {r4, r5, r6, pc}
cmp r3, #0x10
mvnlo r0, #0
ldmloia sp!, {r4, r5, r6, pc}
cmp r6, #0
blt _020B3238
cmp r6, #6
blt _020B3240
_020B3238:
mvn r0, #2
ldmia sp!, {r4, r5, r6, pc}
_020B3240:
mov r3, #0
mov r1, r4
and r2, r6, #0xff
strb r3, [r4, #4]
bl vct_build_ssp_header
cmp r6, #0
bne _020B329C
ldr r0, _020B32B8 ; =__vct
ldr r0, [r0, #0x10]
cmp r0, #1
ldreq r0, [r5, #0xc]
cmpeq r0, #4
bne _020B3288
mov r0, r5
bl vct_check_multisession
cmp r0, #0
mvneq r0, #2
ldmeqia sp!, {r4, r5, r6, pc}
_020B3288:
ldrb r1, [r5, #4]
mov r0, #1
cmp r1, #0
movne r0, r0, lsl r1
str r0, [r5, #8]
_020B329C:
mov r0, r5
mov r1, r4
bl vct_check_send_state
cmp r0, #0
mvneq r0, #2
movne r0, #0
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_020B32B8: .word __vct
arm_func_end vct_build_response_data
arm_func_start VCT_Response
VCT_Response: ; 0x020B32BC
stmdb sp!, {r3, lr}
ldr r2, _020B32DC ; =__vct
ldr r2, [r2, #0x10]
cmp r2, #2
mvneq r0, #2
ldmeqia sp!, {r3, pc}
bl vct_response_impl
ldmia sp!, {r3, pc}
.align 2, 0
_020B32DC: .word __vct
arm_func_end VCT_Response
arm_func_start VCT_AddConferenceClient
VCT_AddConferenceClient: ; 0x020B32E0
stmdb sp!, {r4, lr}
ldr r2, _020B3390 ; =__vct
mov r4, r0
ldr r1, [r2, #0x10]
cmp r1, #3
mvnne r0, #1
ldmneia sp!, {r4, pc}
ldr r1, _020B3394 ; =_021D6F90
ldr r1, [r1]
cmp r1, #3
mvneq r0, #5
ldmeqia sp!, {r4, pc}
ldrb r1, [r2]
cmp r4, r1
mvneq r0, #0
ldmeqia sp!, {r4, pc}
bl vct_find_session
cmp r0, #0
movne r0, #0
ldmneia sp!, {r4, pc}
mov r0, r4
bl VCT_CreateSession
movs r2, r0
mvneq r0, #0
ldmeqia sp!, {r4, pc}
strb r4, [r2, #4]
mov r0, #1
strb r4, [r2, #5]
mov r3, #2
mov r1, r0, lsl r4
str r3, [r2, #0xc]
ldr r0, _020B3390 ; =__vct
str r1, [r2, #8]
ldr r3, [r0, #8]
ldr ip, [r0, #4]
mov r0, r4
mov r1, #7
blx ip
ldr r1, _020B3394 ; =_021D6F90
mov r0, #0
ldr r2, [r1]
add r2, r2, #1
str r2, [r1]
ldmia sp!, {r4, pc}
.align 2, 0
_020B3390: .word __vct
_020B3394: .word _021D6F90
arm_func_end VCT_AddConferenceClient
arm_func_start vct_init_ssp
vct_init_ssp: ; 0x020B3398
stmdb sp!, {r4, lr}
mov r4, r0
ldr r0, [r4]
cmp r0, #0
ldrne r1, [r4, #4]
cmpne r1, #0
beq _020B33BC
cmp r1, #8
bls _020B33C4
_020B33BC:
mov r0, #0
ldmia sp!, {r4, pc}
_020B33C4:
ldr r1, _020B3490 ; =_021D6F90
mov r2, #0x18
str r0, [r1, #0x10]
ldr r3, [r4, #4]
mov r1, #0
mul r2, r3, r2
bl MI_CpuFill8
ldr r0, _020B3494 ; =_021D6FCC
mov r1, #0
mov r2, #0x18
bl MI_CpuFill8
ldr r0, _020B3498 ; =_021D6FB4
mov r1, #0
mov r2, #0x18
bl MI_CpuFill8
ldr r3, [r4, #4]
mov ip, #0
subs r0, r3, #1
beq _020B3444
ldr r1, _020B3490 ; =_021D6F90
mov lr, ip
mov r0, #0x18
_020B341C:
ldr r2, [r1, #0x10]
add ip, ip, #1
mla r3, ip, r0, r2
add r2, r2, lr
str r3, [r2, #0x14]
ldr r3, [r4, #4]
add lr, lr, #0x18
sub r2, r3, #1
cmp ip, r2
blo _020B341C
_020B3444:
ldr r1, _020B3490 ; =_021D6F90
mov r0, #0x18
ldr r2, [r1, #0x10]
mov r4, #0
mla r0, r3, r0, r2
str r4, [r0, #-4]
str r4, [r1, #0x14]
str r4, [r1, #4]
ldr r0, _020B349C ; =__vct
str r4, [r1]
ldr r3, _020B34A0 ; =OS_GetTick
str r4, [r0, #0x14]
ldr r2, _020B34A4 ; =0x5D588B65
str r3, [r1, #0x18]
ldr r0, _020B34A8 ; =0x00269EC3
str r2, [r1, #0x1c]
str r0, [r1, #0x20]
mov r0, #1
ldmia sp!, {r4, pc}
.align 2, 0
_020B3490: .word _021D6F90
_020B3494: .word _021D6FCC
_020B3498: .word _021D6FB4
_020B349C: .word __vct
_020B34A0: .word OS_GetTick
_020B34A4: .word 0x5D588B65
_020B34A8: .word 0x00269EC3
arm_func_end vct_init_ssp
arm_func_start vct_finish_ssp
vct_finish_ssp: ; 0x020B34AC
ldr r0, _020B34C0 ; =_021D6F90
mov r1, #0
str r1, [r0, #0x14]
str r1, [r0, #0x10]
bx lr
.align 2, 0
_020B34C0: .word _021D6F90
arm_func_end vct_finish_ssp
arm_func_start vct_check_timeout
vct_check_timeout: ; 0x020B34C4
stmdb sp!, {r3, r4, r5, lr}
bl OS_GetTick
ldr r2, _020B3560 ; =__vct
ldr r3, [r2, #0x10]
cmp r3, #2
ldmneia sp!, {r3, r4, r5, pc}
ldr r2, [r2, #0xc]
cmp r2, #0
ldmeqia sp!, {r3, r4, r5, pc}
ldr r3, _020B3564 ; =_021D6F90
mov ip, #0
ldr r5, [r3, #0xc]
ldr r4, [r3, #8]
cmp r5, #0
cmpeq r4, #0
ldmeqia sp!, {r3, r4, r5, pc}
ldr r2, _020B3568 ; =sTransceiverLimit
subs r4, r0, r4
ldr lr, [r2]
ldr r0, [r2, #4]
sbc r1, r1, r5
cmp r1, r0
cmpeq r4, lr
ldmlsia sp!, {r3, r4, r5, pc}
str ip, [r3, #8]
str ip, [r3, #0xc]
str ip, [r3, #0x3c]
mov r0, ip
str ip, [r3, #0x48]
bl vct_send_notify
ldr r1, _020B3560 ; =__vct
ldr r0, _020B3564 ; =_021D6F90
ldr r3, [r1, #8]
ldrb r0, [r0, #0x40]
ldr ip, [r1, #4]
ldr r2, _020B356C ; =_021D6FCC
mov r1, #9
blx ip
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_020B3560: .word __vct
_020B3564: .word _021D6F90
_020B3568: .word sTransceiverLimit
_020B356C: .word _021D6FCC
arm_func_end vct_check_timeout
arm_func_start vct_handle_ssp
vct_handle_ssp: ; 0x020B3570
stmdb sp!, {r3, lr}
cmp r2, #0x10
movne r0, #0
ldmneia sp!, {r3, pc}
ldrb r2, [r1, #8]
cmp r2, r0
bne _020B35A0
ldr r0, _020B35E8 ; =__vct
ldrb ip, [r1, #9]
ldrb r2, [r0]
cmp ip, r2
beq _020B35A8
_020B35A0:
mov r0, #0
ldmia sp!, {r3, pc}
_020B35A8:
ldrb r2, [r1, #5]
cmp r2, #0x10
beq _020B35C4
mov r0, r1
mov r1, r3
bl vct_response_reject
ldmia sp!, {r3, pc}
_020B35C4:
ldr r0, [r0, #0xc]
cmp r0, #0
mov r0, r1
mov r1, r3
bne _020B35E0
bl vct_handle_ssp_client
ldmia sp!, {r3, pc}
_020B35E0:
bl vct_handle_ssp_server
ldmia sp!, {r3, pc}
.align 2, 0
_020B35E8: .word __vct
arm_func_end vct_handle_ssp
arm_func_start vct_create_session_impl
vct_create_session_impl: ; 0x020B35EC
stmdb sp!, {r4, lr}
mov r1, r0
cmp r1, #0x20
movhs r0, #0
ldmhsia sp!, {r4, pc}
ldr r0, _020B3650 ; =__vct
ldrb r0, [r0]
cmp r1, r0
moveq r0, #0
ldmeqia sp!, {r4, pc}
ldr r2, _020B3654 ; =_021D6F90
ldr r4, [r2, #0x10]
cmp r4, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
ldr r3, [r4, #0x14]
mov r0, r4
str r3, [r2, #0x10]
bl vct_init_session
ldr r1, _020B3654 ; =_021D6F90
mov r0, r4
ldr r2, [r1, #0x14]
str r2, [r4, #0x14]
str r4, [r1, #0x14]
ldmia sp!, {r4, pc}
.align 2, 0
_020B3650: .word __vct
_020B3654: .word _021D6F90
arm_func_end vct_create_session_impl
arm_func_start vct_request_impl
vct_request_impl: ; 0x020B3658
stmdb sp!, {r4, lr}
sub sp, sp, #0x10
add r2, sp, #0
mov r3, #0x10
mov r4, r0
bl vct_build_request_data
cmp r0, #0
addne sp, sp, #0x10
ldmneia sp!, {r4, pc}
add r1, sp, #0
mov r0, r4
bl vct_send_ssp
cmp r0, #0
movne r0, #0
mvneq r0, #3
add sp, sp, #0x10
ldmia sp!, {r4, pc}
arm_func_end vct_request_impl
arm_func_start vct_response_impl
vct_response_impl: ; 0x020B369C
stmdb sp!, {r4, lr}
sub sp, sp, #0x10
add r2, sp, #0
mov r3, #0x10
mov r4, r0
bl vct_build_response_data
cmp r0, #0
addne sp, sp, #0x10
ldmneia sp!, {r4, pc}
add r1, sp, #0
mov r0, r4
bl vct_send_ssp
cmp r0, #0
movne r0, #0
mvneq r0, #3
add sp, sp, #0x10
ldmia sp!, {r4, pc}
arm_func_end vct_response_impl
arm_func_start vct_add_notify_aid_list
vct_add_notify_aid_list: ; 0x020B36E0
ldrb r2, [r1, #0xa]
cmp r2, #1
bxne lr
ldrb r2, [r0, #4]
ldr r0, _020B3704 ; =_021D6F90
strb r2, [r1, #0xb]
ldr r0, [r0, #4]
str r0, [r1, #0xc]
bx lr
.align 2, 0
_020B3704: .word _021D6F90
arm_func_end vct_add_notify_aid_list
arm_func_start vct_send_notify_impl
vct_send_notify_impl: ; 0x020B3708
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
str r0, [sp]
mov sl, r1
mov r8, #0
bl vct_add_notify_aid_list
mov r6, #1
ldr r4, _020B37C0 ; =__vct
ldr r5, _020B37C4 ; =_021D6F90
mov sb, r8
mov r7, r6
mov fp, #0x10
_020B3734:
cmp sb, #0
movne r1, r7, lsl sb
ldr r0, [r5, #4]
moveq r1, r6
tst r0, r1
ldrneb r0, [r4]
cmpne sb, r0
beq _020B3770
mov r0, sb
mov r1, sl
mov r2, fp
strb sb, [sl, #9]
bl DWC_SendReliable
cmp r0, #0
addne r8, r8, #1
_020B3770:
add r0, sb, #1
and sb, r0, #0xff
cmp sb, #0x20
blo _020B3734
ldrb r0, [sl, #0xa]
cmp r0, #1
bne _020B37A0
ldr r0, _020B37C4 ; =_021D6F90
ldr r1, [r0, #4]
ldr r0, [sp]
str r1, [r0, #8]
b _020B37B0
_020B37A0:
cmp r0, #0
ldreq r0, [sp]
moveq r1, #0
streq r1, [r0, #8]
_020B37B0:
cmp r8, #0
mvneq r0, #3
movne r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_020B37C0: .word __vct
_020B37C4: .word _021D6F90
arm_func_end vct_send_notify_impl
arm_func_start vct_send_notify
vct_send_notify: ; 0x020B37C8
stmdb sp!, {r4, lr}
sub sp, sp, #0x10
mov r4, r0
mov r3, #0xff
ldr r0, _020B3804 ; =_021D6FCC
add r1, sp, #0
mov r2, #4
strb r3, [sp, #4]
bl vct_build_ssp_header
ldr r0, _020B3804 ; =_021D6FCC
add r1, sp, #0
strb r4, [sp, #0xa]
bl vct_send_notify_impl
add sp, sp, #0x10
ldmia sp!, {r4, pc}
.align 2, 0
_020B3804: .word _021D6FCC
arm_func_end vct_send_notify
arm_func_start vct_init_session
vct_init_session: ; 0x020B3808
mov ip, r0
mov r3, #6
mov r2, #0
_020B3814:
strb r2, [ip]
strb r2, [ip, #1]
strb r2, [ip, #2]
strb r2, [ip, #3]
add ip, ip, #4
subs r3, r3, #1
bne _020B3814
ldr r2, _020B384C ; =__vct
mov r3, #0
ldr r2, [r2, #0x10]
str r2, [r0]
str r3, [r0, #0xc]
strb r1, [r0, #4]
bx lr
.align 2, 0
_020B384C: .word __vct
arm_func_end vct_init_session
arm_func_start vct_send_ssp
vct_send_ssp: ; 0x020B3850
stmdb sp!, {r3, lr}
ldrb r2, [r1, #4]
cmp r2, #0xff
ldreqb r2, [r1, #6]
cmpeq r2, #4
bne _020B3870
bl vct_send_notify_impl
b _020B3888
_020B3870:
ldrb r0, [r0, #4]
mov r2, #0x10
bl DWC_SendReliable
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, pc}
_020B3888:
mov r0, #1
ldmia sp!, {r3, pc}
arm_func_end vct_send_ssp
arm_func_start vct_dispatch_session
vct_dispatch_session: ; 0x020B3890
ldrb r2, [r0, #0xb]
strb r2, [r1, #5]
ldrb r2, [r0, #4]
cmp r2, #0xff
bne _020B38D4
ldrb r2, [r0, #6]
cmp r2, #0
bne _020B38C4
ldrb r3, [r1, #4]
mov r2, #1
cmp r3, #0
movne r2, r2, lsl r3
str r2, [r1, #8]
_020B38C4:
ldrb r1, [r0, #6]
ldr r0, _020B3934 ; =sRequestEvent
ldrb r0, [r0, r1]
bx lr
_020B38D4:
cmp r2, #0
bne _020B392C
ldrb r2, [r0, #6]
cmp r2, #0
bne _020B3920
ldr r0, [r1, #0xc]
cmp r0, #1
bne _020B3910
ldrb r2, [r1, #4]
mov r0, #1
cmp r2, #0
movne r0, r0, lsl r2
str r0, [r1, #8]
mov r0, #7
bx lr
_020B3910:
cmp r0, #5
moveq r0, #9
movne r0, #0xc
bx lr
_020B3920:
ldr r0, _020B3938 ; =sResponseEvent
ldrb r0, [r0, r2]
bx lr
_020B392C:
mov r0, #0xc
bx lr
.align 2, 0
_020B3934: .word sRequestEvent
_020B3938: .word sResponseEvent
arm_func_end vct_dispatch_session
arm_func_start vct_build_ssp_header
vct_build_ssp_header: ; 0x020B393C
ldr ip, _020B397C ; =0x5F564354
mov r3, #0x10
str ip, [r1]
strb r3, [r1, #5]
ldr r3, _020B3980 ; =__vct
strb r2, [r1, #6]
ldrb r2, [r3]
strb r2, [r1, #8]
ldrb r2, [r0, #4]
mov r0, #0
strb r2, [r1, #9]
strb r0, [r1, #0xa]
ldrb r2, [r3]
strb r2, [r1, #0xb]
str r0, [r1, #0xc]
bx lr
.align 2, 0
_020B397C: .word 0x5F564354
_020B3980: .word __vct
arm_func_end vct_build_ssp_header
arm_func_start vct_check_recv_state
vct_check_recv_state: ; 0x020B3984
stmdb sp!, {r3, r4, r5, lr}
ldrb r2, [r1, #4]
ldrb r3, [r1, #6]
mov r4, r0
cmp r2, #0
addeq r3, r3, #5
cmp r3, #0
blt _020B39AC
cmp r3, #0xb
blt _020B39B0
_020B39AC:
mvn r3, #0
_020B39B0:
cmp r3, #0
mvnlt r0, #0
ldmltia sp!, {r3, r4, r5, pc}
ldr r0, _020B3A50 ; =__vct
ldr r2, [r4, #0xc]
ldr r0, [r0, #0x10]
cmp r0, #1
ldreq r1, _020B3A54 ; =sRecvState
mov r0, #0xb
ldrne r1, _020B3A58 ; =sTransRecvState
mla r0, r2, r0, r1
ldrsb r5, [r3, r0]
mvn r1, #2
cmp r5, r1
beq _020B3A2C
add r0, r1, #1
cmp r5, r0
beq _020B3A0C
add r0, r1, #2
cmp r5, r0
mov r0, r5
bne _020B3A4C
ldmia sp!, {r3, r4, r5, pc}
_020B3A0C:
mov r0, r4
mov r1, #1
bl vct_response_impl
mov r1, #0
str r1, [r4, #0xc]
mov r0, r5
str r1, [r4]
ldmia sp!, {r3, r4, r5, pc}
_020B3A2C:
mov r0, r4
mov r1, #3
bl vct_response_impl
mov r1, #0
str r1, [r4, #0xc]
mov r0, r5
str r1, [r4]
ldmia sp!, {r3, r4, r5, pc}
_020B3A4C:
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_020B3A50: .word __vct
_020B3A54: .word sRecvState
_020B3A58: .word sTransRecvState
arm_func_end vct_check_recv_state
arm_func_start vct_check_multisession
vct_check_multisession: ; 0x020B3A5C
ldr r1, _020B3AA4 ; =_021D6F90
ldr r2, [r1, #0x14]
cmp r2, #0
beq _020B3A9C
_020B3A6C:
ldr r1, [r2]
cmp r1, #0
beq _020B3A90
ldr r1, [r2, #0xc]
cmp r1, #2
bne _020B3A90
cmp r0, r2
movne r0, #0
bxne lr
_020B3A90:
ldr r2, [r2, #0x14]
cmp r2, #0
bne _020B3A6C
_020B3A9C:
mov r0, #1
bx lr
.align 2, 0
_020B3AA4: .word _021D6F90
arm_func_end vct_check_multisession
arm_func_start vct_check_send_state
vct_check_send_state: ; 0x020B3AA8
ldrb r2, [r1, #4]
ldrb ip, [r1, #6]
cmp r2, #0
addeq ip, ip, #5
cmp ip, #0
blt _020B3AC8
cmp ip, #0xb
blt _020B3ACC
_020B3AC8:
mvn ip, #0
_020B3ACC:
cmp ip, #0
mvnlt r0, #0
bxlt lr
ldr r1, _020B3B24 ; =__vct
ldr r3, [r0, #0xc]
ldr r1, [r1, #0x10]
cmp r1, #1
ldreq r2, _020B3B28 ; =sSendState
mov r1, #0xb
ldrne r2, _020B3B2C ; =sTransSendState
mla r1, r3, r1, r2
ldrsb r2, [ip, r1]
mvn r1, #0
cmp r2, r1
moveq r0, #1
bxeq lr
sub r1, r1, #1
cmp r2, r1
moveq r0, #0
strne r2, [r0, #0xc]
movne r0, #1
bx lr
.align 2, 0
_020B3B24: .word __vct
_020B3B28: .word sSendState
_020B3B2C: .word sTransSendState
arm_func_end vct_check_send_state
arm_func_start vct_find_session
vct_find_session: ; 0x020B3B30
ldr r1, _020B3BA4 ; =__vct
ldr r2, _020B3BA8 ; =_021D6F90
ldr r1, [r1, #0x10]
ldr r3, [r2, #0x14]
cmp r1, #2
bne _020B3B6C
ldr r1, [r2, #0x3c]
cmp r1, #0
beq _020B3B64
ldrb r1, [r2, #0x40]
cmp r1, r0
ldreq r0, _020B3BAC ; =_021D6FCC
bxeq lr
_020B3B64:
mov r0, #0
bx lr
_020B3B6C:
cmp r3, #0
beq _020B3B9C
_020B3B74:
ldr r1, [r3]
cmp r1, #0
beq _020B3B90
ldrb r1, [r3, #4]
cmp r1, r0
moveq r0, r3
bxeq lr
_020B3B90:
ldr r3, [r3, #0x14]
cmp r3, #0
bne _020B3B74
_020B3B9C:
mov r0, #0
bx lr
.align 2, 0
_020B3BA4: .word __vct
_020B3BA8: .word _021D6F90
_020B3BAC: .word _021D6FCC
arm_func_end vct_find_session
arm_func_start vct_handle_ssp_client
vct_handle_ssp_client: ; 0x020B3BB0
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r6, r0
ldrb r2, [r6, #4]
mov r5, r1
cmp r2, #0xff
bne _020B3BE8
ldrb r2, [r6, #6]
cmp r2, #4
bne _020B3BDC
bl vct_handle_notify
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_020B3BDC:
cmp r2, #3
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
_020B3BE8:
ldrb r0, [r6, #8]
bl vct_find_session
movs r4, r0
beq _020B3C68
mov r1, r6
bl vct_check_recv_state
mov r7, r0
mvn r0, #1
cmp r7, r0
beq _020B3C24
add r0, r0, #1
cmp r7, r0
bne _020B3C40
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_020B3C24:
mov r0, #0xc
str r0, [r5]
mov r0, #0
str r0, [r4]
str r4, [r5, #4]
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_020B3C40:
mov r0, r6
mov r1, r4
bl vct_dispatch_session
stmia r5, {r0, r4}
str r7, [r4, #0xc]
ldr r0, [r5]
cmp r0, #0
movne r0, #1
moveq r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_020B3C68:
ldrb r0, [r6, #8]
bl vct_create_session_impl
movs r7, r0
bne _020B3C98
ldrb r1, [r6, #8]
ldr r0, _020B3CE8 ; =_021D6FB4
bl vct_init_session
ldr r0, _020B3CE8 ; =_021D6FB4
mov r1, #3
bl vct_response_impl
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_020B3C98:
mov r1, r6
bl vct_check_recv_state
mov r4, r0
add r0, r4, #2
cmp r0, #1
bhi _020B3CC0
mov r0, r7
bl VCT_DeleteSession
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_020B3CC0:
mov r0, r6
mov r1, r7
bl vct_dispatch_session
stmia r5, {r0, r7}
str r4, [r7, #0xc]
ldr r0, [r5]
cmp r0, #0
movne r0, #1
moveq r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_020B3CE8: .word _021D6FB4
arm_func_end vct_handle_ssp_client
arm_func_start vct_handle_ssp_server
vct_handle_ssp_server: ; 0x020B3CEC
stmdb sp!, {r4, r5, r6, lr}
ldr r2, _020B3E74 ; =_021D6F90
mov r5, r0
ldr r0, [r2, #0x3c]
mov r4, r1
cmp r0, #2
bne _020B3D9C
ldrb r1, [r2, #0x40]
ldrb r0, [r5, #8]
cmp r1, r0
bne _020B3D8C
ldr r0, _020B3E78 ; =_021D6FCC
mov r1, r5
bl vct_check_recv_state
mov r6, r0
mvn r1, #2
cmp r6, r1
beq _020B3D68
add r0, r1, #1
cmp r6, r0
beq _020B3D50
add r0, r1, #2
cmp r6, r0
beq _020B3D68
b _020B3D70
_020B3D50:
mov r0, #0xc
str r0, [r4]
mov r0, #0
str r0, [r4, #4]
mov r0, #1
ldmia sp!, {r4, r5, r6, pc}
_020B3D68:
mov r0, #0
ldmia sp!, {r4, r5, r6, pc}
_020B3D70:
ldr r1, _020B3E78 ; =_021D6FCC
mov r0, r5
bl vct_dispatch_session
ldr r1, _020B3E78 ; =_021D6FCC
stmia r4, {r0, r1}
str r6, [r1, #0xc]
b _020B3E2C
_020B3D8C:
mov r0, #1
bl vct_send_notify
mov r0, #0
ldmia sp!, {r4, r5, r6, pc}
_020B3D9C:
ldrb r1, [r5, #8]
ldr r2, _020B3E74 ; =_021D6F90
cmp r1, #0
movne r0, #1
movne r3, r0, lsl r1
ldr r0, [r2, #4]
moveq r3, #1
tst r0, r3
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, pc}
strb r1, [r2, #0x40]
mov r3, #2
str r3, [r2, #0x3c]
mov r3, #0
ldr r0, _020B3E78 ; =_021D6FCC
mov r1, r5
str r3, [r2, #0x48]
bl vct_check_recv_state
mov r6, r0
mvn r1, #2
cmp r6, r1
addne r0, r1, #1
cmpne r6, r0
addne r0, r1, #2
cmpne r6, r0
bne _020B3E14
ldr r1, _020B3E74 ; =_021D6F90
mov r0, #0
str r0, [r1, #0x3c]
ldmia sp!, {r4, r5, r6, pc}
_020B3E14:
ldr r1, _020B3E78 ; =_021D6FCC
mov r0, r5
bl vct_dispatch_session
ldr r1, _020B3E78 ; =_021D6FCC
stmia r4, {r0, r1}
str r6, [r1, #0xc]
_020B3E2C:
ldr r0, [r4]
cmp r0, #0xa
bne _020B3E54
mov r0, #1
bl vct_send_notify
bl OS_GetTick
ldr r2, _020B3E74 ; =_021D6F90
str r0, [r2, #8]
str r1, [r2, #0xc]
b _020B3E6C
_020B3E54:
mov r0, #0
bl vct_send_notify
ldr r0, _020B3E74 ; =_021D6F90
mov r1, #0
str r1, [r0, #8]
str r1, [r0, #0xc]
_020B3E6C:
mov r0, #1
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_020B3E74: .word _021D6F90
_020B3E78: .word _021D6FCC
arm_func_end vct_handle_ssp_server
arm_func_start vct_response_reject
vct_response_reject: ; 0x020B3E7C
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
ldrb r0, [r5, #4]
mov r4, r1
cmp r0, #0xff
ldreqb r0, [r5, #6]
cmpeq r0, #4
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
ldrb r0, [r5, #8]
bl vct_find_session
cmp r0, #0
beq _020B3ED0
mov r1, #2
str r1, [r4]
str r0, [r4, #4]
mov r2, #0
str r2, [r0]
bl vct_response_impl
mov r0, #1
ldmia sp!, {r3, r4, r5, pc}
_020B3ED0:
ldrb r1, [r5, #8]
ldr r0, _020B3EF0 ; =_021D6FB4
bl vct_init_session
ldr r0, _020B3EF0 ; =_021D6FB4
mov r1, #2
bl vct_response_impl
mov r0, #0
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_020B3EF0: .word _021D6FB4
arm_func_end vct_response_reject
arm_func_start vct_handle_notify
vct_handle_notify: ; 0x020B3EF4
stmdb sp!, {r3, lr}
ldr r3, _020B4008 ; =__vct
ldr r2, [r3, #0x10]
cmp r2, #2
movne r0, #0
ldmneia sp!, {r3, pc}
ldrb ip, [r3, #1]
ldrb r2, [r0, #8]
cmp ip, r2
movne r0, #0
ldmneia sp!, {r3, pc}
ldrb r2, [r0, #0xa]
cmp r2, #0
beq _020B3F38
cmp r2, #1
beq _020B3F84
b _020B3FF8
_020B3F38:
ldr r0, _020B400C ; =_021D6F90
ldr r2, [r0, #0x3c]
cmp r2, #0
moveq r0, #0
ldmeqia sp!, {r3, pc}
ldr r0, [r0, #0x48]
mov r3, #0
cmp r0, #5
cmpne r0, #2
moveq r0, #9
streq r0, [r1]
movne r0, #5
strne r0, [r1]
ldr r0, _020B400C ; =_021D6F90
ldr r2, _020B4010 ; =_021D6FCC
str r3, [r0, #0x3c]
str r3, [r0, #0x48]
str r2, [r1, #4]
b _020B4000
_020B3F84:
ldr r2, _020B400C ; =_021D6F90
mov lr, #2
str lr, [r2, #0x3c]
ldrb ip, [r0, #0xb]
ldrb r3, [r3]
cmp ip, r3
bne _020B3FB4
str lr, [r2, #0x48]
mov r3, #7
str r3, [r1]
ldr r3, [r0, #0xc]
b _020B3FDC
_020B3FB4:
mov r3, #3
str r3, [r2, #0x48]
mov r2, #6
str r2, [r1]
ldrb r3, [r0, #0xb]
cmp r3, #0
movne r2, #1
movne r3, r2, lsl r3
ldr r2, _020B400C ; =_021D6F90
moveq r3, #1
_020B3FDC:
str r3, [r2, #0x44]
ldrb r3, [r0, #0xb]
ldr r0, _020B400C ; =_021D6F90
ldr r2, _020B4010 ; =_021D6FCC
strb r3, [r0, #0x41]
str r2, [r1, #4]
b _020B4000
_020B3FF8:
mov r0, #0
ldmia sp!, {r3, pc}
_020B4000:
mov r0, #1
ldmia sp!, {r3, pc}
.align 2, 0
_020B4008: .word __vct
_020B400C: .word _021D6F90
_020B4010: .word _021D6FCC
arm_func_end vct_handle_notify
arm_func_start vct_init_packet_buffer
vct_init_packet_buffer: ; 0x020B4014
stmdb sp!, {r4, r5, r6, lr}
ldr r3, _020B40D0 ; =0xE525982B
mov r2, r1
umull r1, r4, r2, r3
ldr r1, _020B40D4 ; =_021D6FE4
mov r4, r4, lsr #0xa
str r0, [r1, #4]
cmp r4, #4
blo _020B4040
cmp r4, #0x48
bls _020B4048
_020B4040:
mov r0, #0
ldmia sp!, {r4, r5, r6, pc}
_020B4048:
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, pc}
tst r0, #0x1f
movne r0, #0
strne r0, [r1, #4]
ldmneia sp!, {r4, r5, r6, pc}
mov r1, r0
mov r0, #0
bl MIi_CpuClearFast
subs lr, r4, #1
mov r5, #0
beq _020B40A8
ldr r2, _020B40D4 ; =_021D6FE4
ldr r0, _020B40D8 ; =0x00000478
mov r6, r5
_020B4088:
ldr ip, [r2, #4]
add r5, r5, #1
mla r3, r5, r0, ip
add r1, r6, #0x78
str r3, [ip, r6]
cmp r5, lr
add r6, r1, #0x400
blo _020B4088
_020B40A8:
ldr r1, _020B40D4 ; =_021D6FE4
ldr r0, _020B40D8 ; =0x00000478
ldr r2, [r1, #4]
mov r3, #0
mla r0, r4, r0, r2
str r3, [r0, #-0x478]
ldr r2, [r1, #4]
mov r0, #1
str r2, [r1]
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_020B40D0: .word 0xE525982B
_020B40D4: .word _021D6FE4
_020B40D8: .word 0x00000478
arm_func_end vct_init_packet_buffer
arm_func_start vct_cleanup_packet_buffer
vct_cleanup_packet_buffer: ; 0x020B40DC
ldr r0, _020B40F0 ; =_021D6FE4
mov r1, #0
str r1, [r0]
str r1, [r0, #4]
bx lr
.align 2, 0
_020B40F0: .word _021D6FE4
arm_func_end vct_cleanup_packet_buffer
arm_func_start vct_alloc_packet_buffer
vct_alloc_packet_buffer: ; 0x020B40F4
stmdb sp!, {r4, lr}
mov r4, #0
bl OS_DisableInterrupts
ldr r1, _020B4124 ; =_021D6FE4
ldr r3, [r1]
cmp r3, #0
ldrne r2, [r3]
movne r4, r3
strne r2, [r1]
bl OS_RestoreInterrupts
mov r0, r4
ldmia sp!, {r4, pc}
.align 2, 0
_020B4124: .word _021D6FE4
arm_func_end vct_alloc_packet_buffer
arm_func_start vct_free_packet_buffer
vct_free_packet_buffer: ; 0x020B4128
stmdb sp!, {r4, lr}
mov r4, r0
bl OS_DisableInterrupts
ldr r1, _020B4158 ; =_021D6FE4
mov r2, #0
ldr r3, [r1]
str r3, [r4]
str r4, [r1]
str r2, [r4, #4]
str r2, [r4, #8]
bl OS_RestoreInterrupts
ldmia sp!, {r4, pc}
.align 2, 0
_020B4158: .word _021D6FE4
arm_func_end vct_free_packet_buffer
arm_func_start VCT_ResetVAD
VCT_ResetVAD: ; 0x020B415C
ldr r0, _020B419C ; =E2scales
mov r2, #0
mov r1, #0x1000000
_020B4168:
str r1, [r0, r2, lsl #2]
add r2, r2, #1
cmp r2, #4
blt _020B4168
ldr r1, _020B41A0 ; =_021D6FEC
mov r2, #0
str r2, [r1, #4]
ldr r0, _020B41A4 ; =sVADInfo
str r2, [r1]
str r2, [r0]
str r2, [r0, #4]
str r2, [r1, #8]
bx lr
.align 2, 0
_020B419C: .word E2scales
_020B41A0: .word _021D6FEC
_020B41A4: .word sVADInfo
arm_func_end VCT_ResetVAD
arm_func_start VCT_GetVADInfo
VCT_GetVADInfo: ; 0x020B41A8
stmdb sp!, {r3, lr}
movs r1, r0
ldmeqia sp!, {r3, pc}
ldr r0, _020B41C4 ; =sVADInfo
mov r2, #0x10
bl MI_CpuCopy8
ldmia sp!, {r3, pc}
.align 2, 0
_020B41C4: .word sVADInfo
arm_func_end VCT_GetVADInfo
arm_func_start VCTi_GetVADStatus
VCTi_GetVADStatus: ; 0x020B41C8
stmdb sp!, {r4, lr}
ldr r3, _020B4394 ; =sVADInfo
mov ip, r1, lsr #8
str ip, [r3, #4]
cmp r2, #0
strneb ip, [r2]
ldr r2, _020B4394 ; =sVADInfo
ldr r2, [r2]
cmp r2, #0
bne _020B42DC
mov ip, #0
ldr r3, _020B4398 ; =E2scales
mov lr, ip
_020B41FC:
ldr r2, [r3, lr, lsl #2]
add lr, lr, #1
cmp lr, #4
add ip, ip, r2
blt _020B41FC
ldr r3, _020B439C ; =0x040002B0
mov r2, #0
strh r2, [r3]
mov r2, ip, lsr #2
str r2, [r3, #8]
_020B4224:
ldrh r2, [r3]
tst r2, #0x8000
bne _020B4224
ldr r2, _020B43A0 ; =0x040002B4
cmp r1, #0
ldr r2, [r2]
beq _020B42B8
cmp r1, r2, lsl #1
blo _020B42B8
mov r3, #0
ldr r2, _020B4398 ; =E2scales
mov ip, r3
_020B4254:
ldr r1, [r2, ip, lsl #2]
add ip, ip, #1
cmp ip, #4
add r3, r3, r1
blo _020B4254
ldr r2, _020B439C ; =0x040002B0
mov r1, #0
strh r1, [r2]
mov r1, r3, lsr #2
str r1, [r2, #8]
_020B427C:
ldrh r1, [r2]
tst r1, #0x8000
bne _020B427C
ldr r1, _020B43A0 ; =0x040002B4
ldr r2, _020B43A4 ; =_021D6FEC
ldr r1, [r1]
mov r3, #0
add r1, r1, r1, lsl #1
mov r1, r1, lsr #1
str r1, [r2]
ldr r1, _020B4394 ; =sVADInfo
str r3, [r2, #4]
mov lr, #1
str lr, [r1]
b _020B42BC
_020B42B8:
mov lr, #0
_020B42BC:
ldr r1, _020B43A4 ; =_021D6FEC
ldr r3, _020B4398 ; =E2scales
ldr ip, [r1, #4]
add r2, ip, #1
and r2, r2, #3
str r0, [r3, ip, lsl #2]
str r2, [r1, #4]
b _020B438C
_020B42DC:
ldr r1, _020B43A4 ; =_021D6FEC
mov lr, #0
ldr ip, [r1, #4]
ldr r3, _020B4398 ; =E2scales
add r2, ip, #1
and r2, r2, #3
mov r4, lr
str r0, [r3, ip, lsl #2]
str r2, [r1, #4]
_020B4300:
ldr r0, [r3, r4, lsl #2]
add r4, r4, #1
cmp r4, #4
add lr, lr, r0
blt _020B4300
ldr r1, _020B439C ; =0x040002B0
mov r0, #0
strh r0, [r1]
mov r0, lr, lsr #2
str r0, [r1, #8]
_020B4328:
ldrh r0, [r1]
tst r0, #0x8000
bne _020B4328
ldr r0, _020B43A0 ; =0x040002B4
ldr r1, _020B43A4 ; =_021D6FEC
ldr r2, [r0]
ldr r0, [r1]
cmp r2, r0
bhi _020B4380
ldr r2, [r1, #8]
ldr r0, _020B4394 ; =sVADInfo
add r3, r2, #1
str r3, [r1, #8]
ldr r2, [r0, #8]
cmp r3, r2
ble _020B4388
mov r2, #0
str r2, [r0]
str r2, [r1, #8]
str r2, [r1, #4]
mov r0, #3
ldmia sp!, {r4, pc}
_020B4380:
mov r0, #0
str r0, [r1, #8]
_020B4388:
mov lr, #2
_020B438C:
mov r0, lr
ldmia sp!, {r4, pc}
.align 2, 0
_020B4394: .word sVADInfo
_020B4398: .word E2scales
_020B439C: .word 0x040002B0
_020B43A0: .word 0x040002B4
_020B43A4: .word _021D6FEC
arm_func_end VCTi_GetVADStatus
arm_func_start vct_init_vad
vct_init_vad: ; 0x020B43A8
mov r2, #0xf
ldr r1, _020B43C8 ; =sVADInfo
mov r0, #0x44
smulbb r0, r2, r0
str r2, [r1, #8]
ldr ip, _020B43CC ; =VCT_ResetVAD
str r0, [r1, #0xc]
bx ip
.align 2, 0
_020B43C8: .word sVADInfo
_020B43CC: .word VCT_ResetVAD
arm_func_end vct_init_vad
arm_func_start HPFFilter
HPFFilter: ; 0x020B43D0
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldrsh r2, [r0]
ldr r3, _020B44A8 ; =_021D7008
ldr r5, _020B44AC ; =0x00000E9F
ldr r4, [r3, #4]
smulbb r7, r2, r5
ldr r2, [r3, #0x10]
ldr r6, _020B44B0 ; =0x00000D3E
add r4, r7, r4
mla r4, r2, r6, r4
mov r4, r4, asr #0xc
mul lr, r4, r4
mov r1, r1, lsr #1
str r4, [r3, #0x10]
rsb r2, r7, #0
str r2, [r3, #4]
cmp r1, #1
mov ip, lr, asr #0x1f
mov r3, #1
bls _020B4468
_020B4420:
mov r7, r3, lsl #1
ldrsh r8, [r0, r7]
add r7, r0, r3, lsl #1
add r3, r3, #1
smulbb r8, r8, r5
add r2, r8, r2
mla r2, r4, r6, r2
strh r4, [r7, #-2]
mov r4, r2, asr #0xc
mul r2, r4, r4
adds lr, lr, r2
adc ip, ip, r2, asr #31
rsb r2, r8, #0
cmp r3, r1
blo _020B4420
ldr r3, _020B44A8 ; =_021D7008
str r2, [r3, #4]
str r4, [r3, #0x10]
_020B4468:
add r0, r0, r1, lsl #1
strh r4, [r0, #-2]
ldr r2, _020B44B4 ; =0x04000280
mov r0, #1
strh r0, [r2]
str lr, [r2, #0x10]
str ip, [r2, #0x14]
str r1, [r2, #0x18]
mov r0, #0
str r0, [r2, #0x1c]
_020B4490:
ldrh r0, [r2]
tst r0, #0x8000
bne _020B4490
ldr r0, _020B44B8 ; =0x040002A0
ldr r0, [r0]
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
_020B44A8: .word _021D7008
_020B44AC: .word 0x00000E9F
_020B44B0: .word 0x00000D3E
_020B44B4: .word 0x04000280
_020B44B8: .word 0x040002A0
arm_func_end HPFFilter
arm_func_start InitFIRFilter
InitFIRFilter: ; 0x020B44BC
stmdb sp!, {r3, lr}
ldr r0, _020B4520 ; =_021D7008
mov r2, #0
ldr r1, _020B4524 ; =0x0000019D
str r2, [r0, #0xc]
str r1, [r0, #8]
ldr ip, _020B4528 ; =sImpulseResponse
ldr r0, _020B452C ; =sDelayLine
mov lr, r2
_020B44E0:
mov r1, r2, lsl #1
add r2, r2, #1
strh lr, [r0, r1]
cmp r2, #0x800
blt _020B44E0
ldr r2, _020B4530 ; =sTap
ldr r0, _020B4534 ; =sH
mov r3, #0
_020B4500:
mov r1, lr, lsl #1
ldrsh r1, [ip, r1]
str r3, [r2, lr, lsl #2]
str r1, [r0, lr, lsl #2]
add lr, lr, #1
cmp lr, #6
blt _020B4500
ldmia sp!, {r3, pc}
.align 2, 0
_020B4520: .word _021D7008
_020B4524: .word 0x0000019D
_020B4528: .word sImpulseResponse
_020B452C: .word sDelayLine
_020B4530: .word sTap
_020B4534: .word sH
arm_func_end InitFIRFilter
arm_func_start vct_set_speaker_samples
vct_set_speaker_samples: ; 0x020B4538
ldr ip, _020B4548 ; =MIi_CpuCopyFast
mov r2, r1
ldr r1, _020B454C ; =sSpkBuffer
bx ip
.align 2, 0
_020B4548: .word MIi_CpuCopyFast
_020B454C: .word sSpkBuffer
arm_func_end vct_set_speaker_samples
arm_func_start DoFIRFilter
DoFIRFilter: ; 0x020B4550
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #0x10
mov r4, #0
str r4, [sp, #8]
str r4, [sp, #0xc]
mov r8, r4
movs r2, r2, lsr #1
beq _020B4678
ldr lr, _020B4754 ; =0x3FFF8000
ldr ip, _020B4758 ; =_021D7008
_020B4578:
mov r4, r8, lsl #1
ldr r7, [ip, #0xc]
ldrsh r6, [r1, r4]
ldr r4, _020B475C ; =sDelayLine
mov r5, r7, lsl #1
strh r6, [r4, r5]
ldr r4, [ip, #8]
str r4, [sp]
mov r5, r4, lsl #1
ldr r4, _020B475C ; =sDelayLine
ldrsh r6, [r4, r5]
str r6, [ip, #0x2c]
ldr sb, [ip, #0x3c]
ldr sl, [ip, #0x24]
ldr r5, [ip, #0x40]
mul sl, sb, sl
ldr r4, [ip, #0x28]
str sb, [sp, #4]
mla r4, r5, r4, sl
mov r5, sb
str r5, [ip, #0x40]
ldr sb, [ip, #0x38]
ldr r5, [ip, #0x20]
mla r5, sb, r5, r4
str sb, [ip, #0x3c]
ldr sb, [ip, #0x34]
ldr r4, [ip, #0x1c]
mla r5, sb, r4, r5
str sb, [ip, #0x38]
ldr sb, [ip, #0x30]
ldr r4, [ip, #0x18]
mla r5, sb, r4, r5
str sb, [ip, #0x34]
ldr r4, [ip, #0x14]
mla r4, r6, r4, r5
cmp r4, lr
str r6, [ip, #0x30]
movgt r4, lr
bgt _020B461C
cmp r4, #0xc0000000
movlt r4, #0xc0000000
_020B461C:
add r5, r7, #1
and r5, r5, lr, lsr #19
str r5, [ip, #0xc]
ldr r5, [sp]
mov r6, r8, lsl #1
add r5, r5, #1
and r5, r5, lr, lsr #19
str r5, [ip, #8]
mov r4, r4, asr #0xf
strh r4, [r1, r6]
ldrsh r5, [r1, r6]
ldrsh r4, [r0, r6]
add r8, r8, #1
smulbb r5, r5, r5
strh r4, [r1, r6]
ldr r4, [sp, #8]
adds r4, r4, r5
str r4, [sp, #8]
ldr r4, [sp, #0xc]
adc r4, r4, r5, asr #31
str r4, [sp, #0xc]
cmp r8, r2
blo _020B4578
_020B4678:
ldr r4, _020B4760 ; =0x04000280
mov r1, #1
strh r1, [r4]
ldr r1, [sp, #8]
str r1, [r4, #0x10]
ldr r1, [sp, #0xc]
str r1, [r4, #0x14]
str r2, [r4, #0x18]
mov r1, #0
str r1, [r4, #0x1c]
_020B46A0:
ldrh r1, [r4]
tst r1, #0x8000
bne _020B46A0
ldr r5, _020B4764 ; =0x040002A0
mov r1, #0
ldr r4, [r5]
strh r1, [r5, #0x10]
str r4, [r5, #0x18]
_020B46C0:
ldrh r1, [r5, #0x10]
tst r1, #0x8000
bne _020B46C0
ldr r1, _020B4768 ; =0x040002B4
ldr r4, [r1]
add r1, r4, r4, lsl #1
cmp r1, r3, lsl #1
bhs _020B46F4
ldr r0, _020B4758 ; =_021D7008
mov r1, #0
add sp, sp, #0x10
strh r1, [r0]
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
_020B46F4:
cmp r3, r4
ldrlo r1, _020B4758 ; =_021D7008
movlo r3, #4
strloh r3, [r1]
ldr r1, _020B4758 ; =_021D7008
mov r5, #0
ldrsh r3, [r1]
cmp r3, #4
addlt r3, r3, #1
strlth r3, [r1]
cmp r2, #0
addls sp, sp, #0x10
ldmlsia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
ldr r1, _020B4758 ; =_021D7008
ldrsh r4, [r1]
_020B4730:
mov r3, r5, lsl #1
ldrsh r1, [r0, r3]
add r5, r5, #1
cmp r5, r2
mov r1, r1, asr r4
strh r1, [r0, r3]
blo _020B4730
add sp, sp, #0x10
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_020B4754: .word 0x3FFF8000
_020B4758: .word _021D7008
_020B475C: .word sDelayLine
_020B4760: .word 0x04000280
_020B4764: .word 0x040002A0
_020B4768: .word 0x040002B4
arm_func_end DoFIRFilter
arm_func_start vct_process_fir
vct_process_fir: ; 0x020B476C
stmdb sp!, {r3, lr}
mov ip, r1
mov r3, r2
ldr r1, _020B4788 ; =sSpkBuffer
mov r2, ip
bl DoFIRFilter
ldmia sp!, {r3, pc}
.align 2, 0
_020B4788: .word sSpkBuffer
arm_func_end vct_process_fir
arm_func_start vct_mix_audio
vct_mix_audio: ; 0x020B478C
stmdb sp!, {r4, r5, r6, lr}
mov r4, #0
movs lr, r3, lsr #1
ldmeqia sp!, {r4, r5, r6, pc}
mov r3, #0x8000
rsb r3, r3, #0
mov ip, r3, lsr #0x11
_020B47A8:
mov r5, r4, lsl #1
ldrsh r6, [r0, r5]
ldrsh r5, [r1, r5]
add r6, r6, r5
cmp r6, r3, lsr #17
movgt r6, ip
bgt _020B47CC
cmp r6, r3
movlt r6, r3
_020B47CC:
mov r5, r4, lsl #1
strh r6, [r2, r5]
add r6, r0, r4, lsl #1
add r5, r1, r4, lsl #1
ldrsh r6, [r6, #2]
ldrsh r5, [r5, #2]
add r6, r6, r5
cmp r6, r3, lsr #17
movgt r6, ip
bgt _020B47FC
cmp r6, r3
movlt r6, r3
_020B47FC:
add r5, r2, r4, lsl #1
strh r6, [r5, #2]
add r6, r0, r4, lsl #1
add r5, r1, r4, lsl #1
ldrsh r6, [r6, #4]
ldrsh r5, [r5, #4]
add r6, r6, r5
cmp r6, r3, lsr #17
movgt r6, ip
bgt _020B482C
cmp r6, r3
movlt r6, r3
_020B482C:
add r5, r2, r4, lsl #1
strh r6, [r5, #4]
add r6, r0, r4, lsl #1
add r5, r1, r4, lsl #1
ldrsh r6, [r6, #6]
ldrsh r5, [r5, #6]
add r6, r6, r5
cmp r6, r3, lsr #17
movgt r6, ip
bgt _020B485C
cmp r6, r3
movlt r6, r3
_020B485C:
add r5, r2, r4, lsl #1
add r4, r4, #4
strh r6, [r5, #6]
cmp r4, lr
blo _020B47A8
ldmia sp!, {r4, r5, r6, pc}
arm_func_end vct_mix_audio
arm_func_start VCT_Init
VCT_Init: ; 0x020B4874
stmdb sp!, {r4, lr}
mov r4, r0
ldr r0, _020B49A0 ; =_version_Abiosso_libVCT
bl OSi_ReferSymbol
cmp r4, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
ldr r0, _020B49A4 ; =_021D848C
ldr r0, [r0, #8]
cmp r0, #0
movne r0, #1
ldmneia sp!, {r4, pc}
ldr r0, [r4, #8]
cmp r0, #1
cmpne r0, #2
cmpne r0, #3
movne r0, #0
ldmneia sp!, {r4, pc}
ldr r0, [r4, #0x18]
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
ldr r2, [r4, #0x10]
cmp r2, #0
ldrne r0, [r4, #0x14]
cmpne r0, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
mov r1, r2, lsr #0x1f
rsb r0, r1, r2, lsl #27
adds r0, r1, r0, ror #27
movne r0, #0
ldmneia sp!, {r4, pc}
ldr r0, _020B49A8 ; =__vct
mov r1, #0
mov r2, #0x18
bl MI_CpuFill8
ldr r2, [r4, #0x18]
ldr r1, _020B49A4 ; =_021D848C
mov r0, #0
str r2, [r1, #0x10]
ldr r2, [r4, #0x1c]
str r2, [r1, #0x14]
ldr r2, [r4, #8]
str r2, [r1, #0x1c]
str r0, [r1, #0x18]
ldrb r2, [r4, #0xc]
cmp r2, #0x20
ldmhsia sp!, {r4, pc}
strb r2, [r1, #0xc]
ldr r0, [r4, #0x10]
ldr r1, [r4, #0x14]
bl vct_init_packet_buffer
cmp r0, #0
bne _020B495C
bl vct_cleanup_packet_buffer
mov r0, #0
ldmia sp!, {r4, pc}
_020B495C:
mov r0, r4
bl vct_init_ssp
cmp r0, #0
bne _020B4978
bl vct_cleanup_packet_buffer
mov r0, #0
ldmia sp!, {r4, pc}
_020B4978:
bl vct_init_audio
cmp r0, #0
ldrne r1, _020B49A4 ; =_021D848C
movne r0, #1
strne r0, [r1, #8]
ldmneia sp!, {r4, pc}
bl vct_finish_ssp
bl vct_cleanup_packet_buffer
mov r0, #0
ldmia sp!, {r4, pc}
.align 2, 0
_020B49A0: .word _version_Abiosso_libVCT
_020B49A4: .word _021D848C
_020B49A8: .word __vct
arm_func_end VCT_Init
arm_func_start VCT_Cleanup
VCT_Cleanup: ; 0x020B49AC
stmdb sp!, {r3, lr}
bl vct_finish_audio
bl vct_finish_ssp
bl vct_cleanup_packet_buffer
ldr r0, _020B49D0 ; =_021D848C
mov r1, #0
str r1, [r0, #0x1c]
str r1, [r0, #8]
ldmia sp!, {r3, pc}
.align 2, 0
_020B49D0: .word _021D848C
arm_func_end VCT_Cleanup
arm_func_start VCT_Main
VCT_Main: ; 0x020B49D4
stmdb sp!, {r3, lr}
ldr r0, _020B4A14 ; =_021D848C
ldr r1, [r0, #8]
cmp r1, #0
ldmeqia sp!, {r3, pc}
ldr r1, [r0]
add r1, r1, #1
str r1, [r0]
tst r1, #0xf
bne _020B4A00
bl vct_check_timeout
_020B4A00:
bl vct_flush_send_buffer
cmp r0, #0
ldmeqia sp!, {r3, pc}
bl vct_decode_audio_buffer
ldmia sp!, {r3, pc}
.align 2, 0
_020B4A14: .word _021D848C
arm_func_end VCT_Main
arm_func_start VCT_HandleData
VCT_HandleData: ; 0x020B4A18
stmdb sp!, {r4, lr}
sub sp, sp, #8
add r3, sp, #0
mov r4, r0
bl VCTi_HandleData
cmp r0, #0
beq _020B4A7C
cmp r0, #1
beq _020B4A48
cmp r0, #2
beq _020B4A70
b _020B4A7C
_020B4A48:
ldr r0, _020B4A88 ; =_021D848C
ldr r1, [sp]
ldr r2, [sp, #4]
ldr r3, [r0, #0x14]
ldr ip, [r0, #0x10]
mov r0, r4
blx ip
add sp, sp, #8
mov r0, #1
ldmia sp!, {r4, pc}
_020B4A70:
add sp, sp, #8
mov r0, #0
ldmia sp!, {r4, pc}
_020B4A7C:
mov r0, #1
add sp, sp, #8
ldmia sp!, {r4, pc}
.align 2, 0
_020B4A88: .word _021D848C
arm_func_end VCT_HandleData
arm_func_start VCTi_HandleData
VCTi_HandleData: ; 0x020B4A8C
stmdb sp!, {r3, r4, r5, r6, r7, lr}
movs r6, r1
mov r7, r0
mov r5, r2
mov r4, r3
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
ldr r1, [r6]
ldr r0, _020B4B60 ; =0x5F564354
cmp r1, r0
movne r0, #2
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
ldr r0, _020B4B64 ; =_021D848C
ldr r1, [r0, #0x1c]
cmp r1, #0
ldrne r0, [r0, #8]
cmpne r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
mov r0, #0
str r0, [r4]
str r0, [r4, #4]
bl OS_GetTick
ldrb r2, [r6, #4]
and r3, r2, #0xf0
cmp r3, #0x40
bne _020B4B28
ldr r2, _020B4B64 ; =_021D848C
mov r3, r0
ldr r4, [r2, #4]
mov r0, r7
add r4, r4, #1
str r4, [r2, #4]
str r1, [sp]
mov r1, r6
mov r2, r5
bl vct_handle_audio
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_020B4B28:
cmp r2, #0
cmpne r2, #0xff
bne _020B4B58
mov r0, r7
mov r1, r6
mov r2, r5
mov r3, r4
bl vct_handle_ssp
cmp r0, #0
movne r0, #1
moveq r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_020B4B58:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_020B4B60: .word 0x5F564354
_020B4B64: .word _021D848C
arm_func_end VCTi_HandleData
.rodata
cAdpcmIndexTable2:
.byte 0xFF, 0x01, 0xFF, 0x01
cAdpcmIndexTable3:
.byte 0xFF, 0xFF, 0x01, 0x02
.byte 0xFF, 0xFF, 0x01, 0x02
cAdpcmIndexTable4:
.byte 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x04, 0x06, 0x08, 0xFF, 0xFF, 0xFF, 0xFF
.byte 0x02, 0x04, 0x06, 0x08
cAdpcmStepSizeTable:
.byte 0x07, 0x00, 0x08, 0x00, 0x09, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0C, 0x00
.byte 0x0D, 0x00, 0x0E, 0x00, 0x10, 0x00, 0x11, 0x00, 0x13, 0x00, 0x15, 0x00, 0x17, 0x00, 0x19, 0x00
.byte 0x1C, 0x00, 0x1F, 0x00, 0x22, 0x00, 0x25, 0x00, 0x29, 0x00, 0x2D, 0x00, 0x32, 0x00, 0x37, 0x00
.byte 0x3C, 0x00, 0x42, 0x00, 0x49, 0x00, 0x50, 0x00, 0x58, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x76, 0x00
.byte 0x82, 0x00, 0x8F, 0x00, 0x9D, 0x00, 0xAD, 0x00, 0xBE, 0x00, 0xD1, 0x00, 0xE6, 0x00, 0xFD, 0x00
.byte 0x17, 0x01, 0x33, 0x01, 0x51, 0x01, 0x73, 0x01, 0x98, 0x01, 0xC1, 0x01, 0xEE, 0x01, 0x20, 0x02
.byte 0x56, 0x02, 0x92, 0x02, 0xD4, 0x02, 0x1C, 0x03, 0x6C, 0x03, 0xC3, 0x03, 0x24, 0x04, 0x8E, 0x04
.byte 0x02, 0x05, 0x83, 0x05, 0x10, 0x06, 0xAB, 0x06, 0x56, 0x07, 0x12, 0x08, 0xE0, 0x08, 0xC3, 0x09
.byte 0xBD, 0x0A, 0xD0, 0x0B, 0xFF, 0x0C, 0x4C, 0x0E, 0xBA, 0x0F, 0x4C, 0x11, 0x07, 0x13, 0xEE, 0x14
.byte 0x06, 0x17, 0x54, 0x19, 0xDC, 0x1B, 0xA5, 0x1E, 0xB6, 0x21, 0x15, 0x25, 0xCA, 0x28, 0xDF, 0x2C
.byte 0x5B, 0x31, 0x4B, 0x36, 0xB9, 0x3B, 0xB2, 0x41, 0x44, 0x48, 0x7E, 0x4F, 0x71, 0x57, 0x2F, 0x60
.byte 0xCE, 0x69, 0x62, 0x74, 0xFF, 0x7F, 0x00, 0x00
sCodecInfo:
.byte 0x08, 0x00, 0x08, 0x00, 0x02, 0x04, 0x03, 0x04
.byte 0x04, 0x04
sTransceiverBalance:
.byte 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02
.byte 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x00
sRequestEvent:
.byte 0x01, 0x08, 0x04, 0x0A, 0x00, 0x00, 0x00, 0x00
sResponseEvent:
.byte 0x07, 0x0C, 0x02, 0x03, 0x09, 0x02, 0x00, 0x00
sTransRecvState:
.byte 0xFE, 0xFE, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0xFF
.byte 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFE, 0xFE
.byte 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF
.byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE
.byte 0xFE, 0xFE, 0xFD, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF
sSendState:
.byte 0x01, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE
.byte 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0x05, 0xFE, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE
.byte 0xFE, 0x05, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE
.byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x02, 0x00, 0x00, 0x00, 0xFE
.byte 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0xFE
sTransSendState:
.byte 0xFE, 0xFE, 0xFE, 0x01
.byte 0xFF, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0x05, 0x05, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE
.byte 0xFE, 0xFE, 0xFE, 0x05, 0xFE, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE
.byte 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x03, 0x00, 0x00
.byte 0x00, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0xFE
sRecvState:
.byte 0x04, 0xFE
.byte 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x02, 0x00
.byte 0x00, 0x00, 0xFF, 0x00, 0xFE, 0x05, 0x05, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE
.byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x05, 0xFE, 0xFF, 0xFF
.byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF
.byte 0x14, 0x59, 0x0B, 0x02, 0x34, 0x59, 0x0B, 0x02, 0xFC, 0x58, 0x0B, 0x02, 0x10, 0x59, 0x0B, 0x02
.data
sEnableVAD:
.byte 0x01, 0x00, 0x00, 0x00
ulaw_segment:
.byte 0x3F, 0x00, 0x00, 0x00
.byte 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00
.byte 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00
sTransceiverLimit:
.byte 0xF7, 0xB5, 0xEF, 0x00
.byte 0x00, 0x00, 0x00, 0x00
sVADInfo:
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00
.byte 0xFC, 0x03, 0x00, 0x00
sImpulseResponse:
.byte 0xFB, 0xE9, 0x3D, 0x40, 0xBC, 0xC7, 0xD1, 0x2C, 0x2A, 0xD0, 0x7C, 0x03
.byte 0xF0, 0x08, 0x93, 0xF5