You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
Prevent UB that can happen when using more than 64 total soundbanks (#575)
This commit is contained in:
@@ -26,14 +26,14 @@
|
||||
#define PERSISTENT_BANK_MEM 0xDC00
|
||||
#define TEMPORARY_SEQ_MEM 0xE800
|
||||
#define TEMPORARY_BANK_MEM 0x5500
|
||||
#define BANK_SETS_ALLOC 0x400
|
||||
#define MAX_NUM_SOUNDBANKS 0x100
|
||||
#define EXT_AUDIO_INIT_POOL_SIZE 0x2000
|
||||
#else
|
||||
#define PERSISTENT_SEQ_MEM 0x4100
|
||||
#define PERSISTENT_BANK_MEM 0x6E00
|
||||
#define TEMPORARY_SEQ_MEM 0x7400
|
||||
#define TEMPORARY_BANK_MEM 0x2A80
|
||||
#define BANK_SETS_ALLOC 0x100
|
||||
#define MAX_NUM_SOUNDBANKS 0x40
|
||||
#define EXT_AUDIO_INIT_POOL_SIZE 0x0
|
||||
#endif
|
||||
|
||||
@@ -185,9 +185,9 @@ extern OSMesgQueue *D_SH_80350FA8;
|
||||
#endif
|
||||
|
||||
#if defined(VERSION_EU) || defined(VERSION_SH)
|
||||
#define AUDIO_INIT_POOL_SIZE (0x2B00 + BANK_SETS_ALLOC + EXT_AUDIO_INIT_POOL_SIZE)
|
||||
#define AUDIO_INIT_POOL_SIZE (0x2B00 + (MAX_NUM_SOUNDBANKS * sizeof(s32)) + EXT_AUDIO_INIT_POOL_SIZE)
|
||||
#else
|
||||
#define AUDIO_INIT_POOL_SIZE (0x2400 + BANK_SETS_ALLOC + EXT_AUDIO_INIT_POOL_SIZE)
|
||||
#define AUDIO_INIT_POOL_SIZE (0x2400 + (MAX_NUM_SOUNDBANKS * sizeof(s32)) + EXT_AUDIO_INIT_POOL_SIZE)
|
||||
#endif
|
||||
|
||||
// TODO: needs validation once EU can compile. EU is very likely incorrect!
|
||||
|
||||
@@ -56,9 +56,9 @@ struct PoolSplit sPersistentCommonPoolSplit;
|
||||
struct PoolSplit sTemporaryCommonPoolSplit;
|
||||
|
||||
#ifdef VERSION_SH
|
||||
u8 gUnkLoadStatus[0x40];
|
||||
u8 gUnkLoadStatus[MAX_NUM_SOUNDBANKS];
|
||||
#endif
|
||||
u8 gBankLoadStatus[0x40];
|
||||
u8 gBankLoadStatus[MAX_NUM_SOUNDBANKS];
|
||||
u8 gSeqLoadStatus[0x100];
|
||||
|
||||
#if defined(VERSION_EU) || defined(VERSION_SH)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <PR/ultratypes.h>
|
||||
|
||||
#include "internal.h"
|
||||
#include "data.h"
|
||||
|
||||
enum SoundLoadStatus {
|
||||
SOUND_LOAD_STATUS_NOT_LOADED,
|
||||
@@ -115,8 +116,8 @@ extern struct Unk1Pool gUnkPool1;
|
||||
extern struct UnkPool gUnkPool2;
|
||||
extern struct UnkPool gUnkPool3;
|
||||
#endif
|
||||
extern u8 gBankLoadStatus[64];
|
||||
extern u8 gSeqLoadStatus[256];
|
||||
extern u8 gBankLoadStatus[MAX_NUM_SOUNDBANKS];
|
||||
extern u8 gSeqLoadStatus[0x100];
|
||||
extern volatile u8 gAudioResetStatus;
|
||||
extern u8 gAudioResetPresetIdToLoad;
|
||||
|
||||
|
||||
@@ -919,8 +919,8 @@ void audio_init() {
|
||||
alSeqFileNew(gAlTbl, gSoundDataRaw);
|
||||
|
||||
// Load bank sets for each sequence
|
||||
gAlBankSets = soundAlloc(&gAudioInitPool, BANK_SETS_ALLOC);
|
||||
audio_dma_copy_immediate((uintptr_t) gBankSetsData, gAlBankSets, BANK_SETS_ALLOC);
|
||||
gAlBankSets = soundAlloc(&gAudioInitPool, MAX_NUM_SOUNDBANKS * sizeof(s32));
|
||||
audio_dma_copy_immediate((uintptr_t) gBankSetsData, gAlBankSets, MAX_NUM_SOUNDBANKS * sizeof(s32));
|
||||
|
||||
init_sequence_players();
|
||||
gAudioLoadLock = AUDIO_LOCK_NOT_LOADING;
|
||||
|
||||
@@ -505,7 +505,7 @@ void *func_sh_802f3564(s32 seqId) {
|
||||
return func_sh_802f3764(0, seqId2, &temp);
|
||||
}
|
||||
|
||||
extern u8 gUnkLoadStatus[0x40];
|
||||
extern u8 gUnkLoadStatus[MAX_NUM_SOUNDBANKS];
|
||||
|
||||
void *func_sh_802f3598(s32 idx, s32 *medium) {
|
||||
void *ret;
|
||||
|
||||
Reference in New Issue
Block a user