Decompile sndAddRef

This commit is contained in:
Ryan Dwyer
2021-11-21 20:29:07 +10:00
parent 2d6752a40e
commit dfe82c624e
4 changed files with 32 additions and 50 deletions
+2 -2
View File
@@ -7,9 +7,9 @@
void func00033090(struct sndstate *handle);
void func00033100(struct sndstate *state);
u16 sndpCountStates(s16 *numfreeptr, s16 *numallocedptr);
void func00033378(void *fn);
void sndpSetAddRefCallback(void *fn);
struct sndstate *func00033390(s32 arg0, ALSound *sound);
void func00033634(void *fn);
void sndpSetRemoveRefCallback(void *fn);
s32 sndGetState(struct sndstate *handle);
struct sndstate *func00033820(s32 arg0, s16 soundnum, u16 vol, ALPan pan, f32 pitch, u8 fxmix, u8 fxbus, struct sndstate **handleptr);
void audioStop(struct sndstate *handle);
+1 -1
View File
@@ -7023,7 +7023,7 @@ struct mp3vars {
struct sndcache {
/*0x0000*/ u16 *indexes; // indexed by sfxnum, value is cache index (0-44) or 0xffff
/*0x0004*/ u8 permanent[45];
/*0x0004*/ u8 refcounts[45];
/*0x0032*/ u16 ages[45];
/*0x008c*/ ALEnvelope envelopes[45];
/*0x035c*/ ALKeyMap keymaps[45];
+14 -14
View File
@@ -19,11 +19,11 @@ N_ALSndPlayer *g_SndPlayer = &var8009c2d0;
s16 var8005f130 = 0;
s32 var8005f134 = 0;
s32 var8005f138 = 0;
void (*var8005f13c)(ALSound *) = NULL;
void (*var8005f140)(ALSound *) = NULL;
void (*g_SndpAddRefCallback)(ALSound *) = NULL;
void (*g_SndpRemoveRefCallback)(ALSound *) = NULL;
void func00033378(void *fn);
void func00033634(void *fn);
void sndpSetAddRefCallback(void *fn);
void sndpSetRemoveRefCallback(void *fn);
void sndpFreeState(struct sndstate *state);
void func00033bc0(struct sndstate *state);
@@ -52,8 +52,8 @@ void n_alSndpNew(ALSndpConfig *config)
alLink(&sndstate[i].node, &sndstate[i - 1].node);
}
func00033378(NULL);
func00033634(NULL);
sndpSetAddRefCallback(NULL);
sndpSetRemoveRefCallback(NULL);
var8009c334 = alHeapAlloc(config->heap, sizeof(s16), config->unk10);
@@ -547,9 +547,9 @@ u16 sndpCountStates(s16 *numfreeptr, s16 *numallocedptr)
return numalloced2;
}
void func00033378(void *fn)
void sndpSetAddRefCallback(void *fn)
{
var8005f13c = fn;
g_SndpAddRefCallback = fn;
}
struct sndstate *func00033390(s32 arg0, ALSound *sound)
@@ -614,8 +614,8 @@ struct sndstate *func00033390(s32 arg0, ALSound *sound)
state->pan = AL_PAN_CENTER;
state->vol = 0x7fff;
if (var8005f13c != NULL) {
var8005f13c(state->sound);
if (g_SndpAddRefCallback != NULL) {
g_SndpAddRefCallback(state->sound);
}
} else {
osSetIntMask(mask);
@@ -624,9 +624,9 @@ struct sndstate *func00033390(s32 arg0, ALSound *sound)
return state;
}
void func00033634(void *fn)
void sndpSetRemoveRefCallback(void *fn)
{
var8005f140 = fn;
g_SndpRemoveRefCallback = fn;
}
void sndpFreeState(struct sndstate *state)
@@ -667,8 +667,8 @@ void sndpFreeState(struct sndstate *state)
state->unk30 = NULL;
}
if (var8005f140) {
var8005f140(state->sound);
if (g_SndpRemoveRefCallback != NULL) {
g_SndpRemoveRefCallback(state->sound);
}
}
+15 -33
View File
@@ -976,7 +976,7 @@ void sndLoadSfxCtl(void)
for (i = 0; i < 45; i++) {
g_SndCache.ages[i] = 1;
g_SndCache.permanent[i] = 0;
g_SndCache.refcounts[i] = 0;
}
}
#else
@@ -1119,7 +1119,7 @@ void sndIncrementAges(void)
s32 i;
for (i = 0; i < 45; i++) {
if (!g_SndCache.permanent[i] && g_SndCache.ages[i] < 32000) {
if (g_SndCache.refcounts[i] == 0 && g_SndCache.ages[i] < 32000) {
g_SndCache.ages[i]++;
}
}
@@ -1442,7 +1442,7 @@ ALSound *sndLoadSound(s16 soundnum)
oldestage = 0;
for (i = 0; i < 45; i++) {
if (!g_SndCache.permanent[i] && oldestage < g_SndCache.ages[i]) {
if (g_SndCache.refcounts[i] == 0 && oldestage < g_SndCache.ages[i]) {
oldestage = g_SndCache.ages[i];
oldestindex = i;
}
@@ -1648,36 +1648,18 @@ void seqInit(struct seqinstance *seq)
n_alCSPSetBank(seq->seqp, var80095204);
}
void snd0000f76c(void);
void sndAddRef(ALSound *sound)
{
if (sound >= &g_SndCache.sounds[0] && sound <= &g_SndCache.sounds[44]) {
s32 cacheindex = sound - g_SndCache.sounds;
g_SndCache.refcounts[cacheindex]++;
}
}
void sndRemoveRef(void);
GLOBAL_ASM(
glabel snd0000f76c
/* f76c: 3c0e800a */ lui $t6,%hi(g_SndCache+0x3e14)
/* f770: 25ce9024 */ addiu $t6,$t6,%lo(g_SndCache+0x3e14)
/* f774: 008e082b */ sltu $at,$a0,$t6
/* f778: 1420000d */ bnez $at,.L0000f7b0
/* f77c: 3c0f800a */ lui $t7,%hi(g_SndCache+0x40d4)
/* f780: 25ef92e4 */ addiu $t7,$t7,%lo(g_SndCache+0x40d4)
/* f784: 01e4082b */ sltu $at,$t7,$a0
/* f788: 14200009 */ bnez $at,.L0000f7b0
/* f78c: 3c038009 */ lui $v1,%hi(g_SndCache)
/* f790: 24635210 */ addiu $v1,$v1,%lo(g_SndCache)
/* f794: 0083c023 */ subu $t8,$a0,$v1
/* f798: 2719c1ec */ addiu $t9,$t8,-15892
/* f79c: 00194103 */ sra $t0,$t9,0x4
/* f7a0: 00681021 */ addu $v0,$v1,$t0
/* f7a4: 90490004 */ lbu $t1,0x4($v0)
/* f7a8: 252a0001 */ addiu $t2,$t1,0x1
/* f7ac: a04a0004 */ sb $t2,0x4($v0)
.L0000f7b0:
/* f7b0: 03e00008 */ jr $ra
/* f7b4: 00000000 */ nop
);
void snd0000f7b8(void);
GLOBAL_ASM(
glabel snd0000f7b8
glabel sndRemoveRef
/* f7b8: 3c0e800a */ lui $t6,%hi(g_SndCache+0x3e14)
/* f7bc: 25ce9024 */ addiu $t6,$t6,%lo(g_SndCache+0x3e14)
/* f7c0: 008e082b */ sltu $at,$a0,$t6
@@ -1838,8 +1820,8 @@ void sndInit(void)
osSyncPrintf("Set the sample callbacks\n");
func00033378(snd0000f76c);
func00033634(snd0000f7b8);
sndpSetAddRefCallback(sndAddRef);
sndpSetRemoveRefCallback(sndRemoveRef);
amgrStartThread();