Decompile sndLoadAdpcmBook

This commit is contained in:
Ryan Dwyer 2021-11-21 20:12:02 +10:00
parent e8f90ceadb
commit 3116e126dd
3 changed files with 46 additions and 125 deletions

View File

@ -171,7 +171,7 @@ enum {AL_ADPCM_WAVE = 0,
typedef struct {
s32 order;
s32 npredictors;
s16 book[1]; /* Actually variable size. Must be 8-byte aligned */
s16 book[128]; /* Actually variable size. Must be 8-byte aligned */
} ALADPCMBook;
typedef struct {

View File

@ -7028,7 +7028,8 @@ struct sndcache {
/*0x008c*/ ALEnvelope envelopes[45];
/*0x035c*/ ALKeyMap keymaps[45];
/*0x046c*/ ALWaveTable wavetables[45];
/*0x07f0*/ u8 unk7f0[0x3624];
/*0x07f0*/ ALADPCMBook books[45];
/*0x3658*/ u8 unk3658[0x7bc];
/*0x3e14*/ ALSound sounds[45];
u32 unk40e4;
u32 unk40e8;

View File

@ -1220,133 +1220,53 @@ ALKeyMap *sndLoadKeymap(u32 offset, u16 cacheindex)
return s1;
}
ALADPCMBook *sndLoadAdpcmBook(u32 offset, u16 cacheindex)
{
#if VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel sndLoadAdpcmBook
/* efa8: 27bdfd10 */ addiu $sp,$sp,-752
/* efac: afb20020 */ sw $s2,0x20($sp)
/* efb0: afb1001c */ sw $s1,0x1c($sp)
/* efb4: 03a08825 */ or $s1,$sp,$zero
/* efb8: 03a09025 */ or $s2,$sp,$zero
/* efbc: 3c0e0081 */ lui $t6,%hi(_sfxctlSegmentRomStart)
/* efc0: 265201af */ addiu $s2,$s2,0x1af
/* efc4: 2631005f */ addiu $s1,$s1,0x5f
/* efc8: afb40028 */ sw $s4,0x28($sp)
/* efcc: afb30024 */ sw $s3,0x24($sp)
/* efd0: 25cea250 */ addiu $t6,$t6,%lo(_sfxctlSegmentRomStart)
/* efd4: 3639000f */ ori $t9,$s1,0xf
/* efd8: 364f000f */ ori $t7,$s2,0xf
/* efdc: afbf002c */ sw $ra,0x2c($sp)
/* efe0: afb00018 */ sw $s0,0x18($sp)
/* efe4: afa502f4 */ sw $a1,0x2f4($sp)
/* efe8: 008ea021 */ addu $s4,$a0,$t6
/* efec: 39f2000f */ xori $s2,$t7,0xf
/* eff0: 3b31000f */ xori $s1,$t9,0xf
/* eff4: 24130140 */ addiu $s3,$zero,0x140
/* eff8: 02402025 */ or $a0,$s2,$zero
.L0000effc:
/* effc: 02802825 */ or $a1,$s4,$zero
/* f000: 0c003513 */ jal dmaExecHighPriority
/* f004: 24060140 */ addiu $a2,$zero,0x140
/* f008: 00008025 */ or $s0,$zero,$zero
/* f00c: 00001825 */ or $v1,$zero,$zero
/* f010: 00001025 */ or $v0,$zero,$zero
.L0000f014:
/* f014: 02424821 */ addu $t1,$s2,$v0
/* f018: 8d2a0000 */ lw $t2,0x0($t1)
/* f01c: 24630001 */ addiu $v1,$v1,0x1
/* f020: 2c610050 */ sltiu $at,$v1,0x50
/* f024: 24420004 */ addiu $v0,$v0,0x4
/* f028: 1420fffa */ bnez $at,.L0000f014
/* f02c: 020a8021 */ addu $s0,$s0,$t2
/* f030: 02202025 */ or $a0,$s1,$zero
/* f034: 02802825 */ or $a1,$s4,$zero
/* f038: 0c003513 */ jal dmaExecHighPriority
/* f03c: 24060140 */ addiu $a2,$zero,0x140
/* f040: 00002025 */ or $a0,$zero,$zero
/* f044: 00001025 */ or $v0,$zero,$zero
.L0000f048:
/* f048: 02225821 */ addu $t3,$s1,$v0
/* f04c: 8d6c0000 */ lw $t4,0x0($t3)
/* f050: 24420004 */ addiu $v0,$v0,0x4
/* f054: 1453fffc */ bne $v0,$s3,.L0000f048
/* f058: 008c2021 */ addu $a0,$a0,$t4
/* f05c: 5604ffe7 */ bnel $s0,$a0,.L0000effc
/* f060: 02402025 */ or $a0,$s2,$zero
/* f064: 97a302f6 */ lhu $v1,0x2f6($sp)
/* f068: 3c048009 */ lui $a0,%hi(g_SndCache)
/* f06c: 24845210 */ addiu $a0,$a0,%lo(g_SndCache)
/* f070: 00036940 */ sll $t5,$v1,0x5
/* f074: 01a36821 */ addu $t5,$t5,$v1
/* f078: 000d18c0 */ sll $v1,$t5,0x3
/* f07c: 00837021 */ addu $t6,$a0,$v1
/* f080: 0220c825 */ or $t9,$s1,$zero
/* f084: 26380108 */ addiu $t8,$s1,0x108
.L0000f088:
/* f088: 8f210000 */ lw $at,0x0($t9)
/* f08c: 2739000c */ addiu $t9,$t9,0xc
/* f090: 25ce000c */ addiu $t6,$t6,0xc
/* f094: adc107e4 */ sw $at,0x7e4($t6)
/* f098: 8f21fff8 */ lw $at,-0x8($t9)
/* f09c: adc107e8 */ sw $at,0x7e8($t6)
/* f0a0: 8f21fffc */ lw $at,-0x4($t9)
/* f0a4: 1738fff8 */ bne $t9,$t8,.L0000f088
/* f0a8: adc107ec */ sw $at,0x7ec($t6)
/* f0ac: 8fbf002c */ lw $ra,0x2c($sp)
/* f0b0: 00831021 */ addu $v0,$a0,$v1
/* f0b4: 8fb00018 */ lw $s0,0x18($sp)
/* f0b8: 8fb1001c */ lw $s1,0x1c($sp)
/* f0bc: 8fb20020 */ lw $s2,0x20($sp)
/* f0c0: 8fb30024 */ lw $s3,0x24($sp)
/* f0c4: 8fb40028 */ lw $s4,0x28($sp)
/* f0c8: 27bd02f0 */ addiu $sp,$sp,0x2f0
/* f0cc: 03e00008 */ jr $ra
/* f0d0: 244207f0 */ addiu $v0,$v0,0x7f0
);
u8 spaf[0x150];
u8 sp5f[0x150];
ALADPCMBook *s2 = (ALADPCMBook *)ALIGN16((u32)spaf);
ALADPCMBook *s1 = (ALADPCMBook *)ALIGN16((u32)sp5f);
s32 i;
s32 sum1;
s32 sum2;
offset += (u32)&_sfxctlSegmentRomStart;
do {
dmaExecHighPriority(s2, offset, 0x140);
sum1 = 0;
for (i = 0; i < 80U; i++) {
sum1 += ((u32 *)s2)[i];
}
dmaExecHighPriority(s1, offset, 0x140);
sum2 = 0;
for (i = 0; i < 80U; i++) {
sum2 += ((u32 *)s1)[i];
}
if (1);
} while (sum1 != sum2);
#else
GLOBAL_ASM(
glabel sndLoadAdpcmBook
/* f5dc: 27bdfe90 */ addiu $sp,$sp,-368
/* f5e0: 3c0e007c */ lui $t6,0x7c
/* f5e4: afa50174 */ sw $a1,0x174($sp)
/* f5e8: 25cee940 */ addiu $t6,$t6,-5824
/* f5ec: afa40170 */ sw $a0,0x170($sp)
/* f5f0: 008e2821 */ addu $a1,$a0,$t6
/* f5f4: 03a02025 */ or $a0,$sp,$zero
/* f5f8: 2484002f */ addiu $a0,$a0,0x2f
/* f5fc: 348f000f */ ori $t7,$a0,0xf
/* f600: afbf0014 */ sw $ra,0x14($sp)
/* f604: 39e4000f */ xori $a0,$t7,0xf
/* f608: afa40018 */ sw $a0,0x18($sp)
/* f60c: 0c00366e */ jal dmaExecHighPriority
/* f610: 24060140 */ addiu $a2,$zero,0x140
/* f614: 97a30176 */ lhu $v1,0x176($sp)
/* f618: 8fac0018 */ lw $t4,0x18($sp)
/* f61c: 3c05800a */ lui $a1,0x800a
/* f620: 0003c940 */ sll $t9,$v1,0x5
/* f624: 0323c821 */ addu $t9,$t9,$v1
/* f628: 24a58190 */ addiu $a1,$a1,-32368
/* f62c: 001918c0 */ sll $v1,$t9,0x3
/* f630: 00a34021 */ addu $t0,$a1,$v1
/* f634: 258b0108 */ addiu $t3,$t4,0x108
.NB0000f638:
/* f638: 8d810000 */ lw $at,0x0($t4)
/* f63c: 258c000c */ addiu $t4,$t4,0xc
/* f640: 2508000c */ addiu $t0,$t0,0xc
/* f644: ad0107e4 */ sw $at,0x7e4($t0)
/* f648: 8d81fff8 */ lw $at,-0x8($t4)
/* f64c: ad0107e8 */ sw $at,0x7e8($t0)
/* f650: 8d81fffc */ lw $at,-0x4($t4)
/* f654: 158bfff8 */ bne $t4,$t3,.NB0000f638
/* f658: ad0107ec */ sw $at,0x7ec($t0)
/* f65c: 8fbf0014 */ lw $ra,0x14($sp)
/* f660: 00a31021 */ addu $v0,$a1,$v1
/* f664: 244207f0 */ addiu $v0,$v0,0x7f0
/* f668: 03e00008 */ jr $ra
/* f66c: 27bd0170 */ addiu $sp,$sp,0x170
);
u8 sp5f[0x150];
ALADPCMBook *s1 = (ALADPCMBook *)ALIGN16((u32)sp5f);
offset += (u32)&_sfxctlSegmentRomStart;
dmaExecHighPriority(s1, offset, 0x140);
#endif
g_SndCache.books[cacheindex] = *s1;
s1 = g_SndCache.books;
s1 += cacheindex;
return s1;
}
#if VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel sndLoadAdpcmLoop