summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTharo <17233964+Thar0@users.noreply.github.com>2024-08-17 22:42:15 +0100
committerGitHub <noreply@github.com>2024-08-17 17:42:15 -0400
commitba5574be6d151c8f332ba2469906538e3a7bfcae (patch)
tree85c99391e0f60426076ce3ea1ce1afe9f5ac0a99 /src
parent56ca23663a890af509ef665ee4674a742f8e9a22 (diff)
[Audio 5/?] Build the Samplebank Table (#2044)
Diffstat (limited to 'src')
-rw-r--r--src/audio/lib/heap.c6
-rw-r--r--src/audio/lib/load.c32
-rw-r--r--src/audio/tables/samplebank_table.c50
-rw-r--r--src/code/z_play.c2
-rw-r--r--src/overlays/actors/ovl_Fishing/z_fishing.c2
5 files changed, 72 insertions, 20 deletions
diff --git a/src/audio/lib/heap.c b/src/audio/lib/heap.c
index 2a0f859df..e68ef6eec 100644
--- a/src/audio/lib/heap.c
+++ b/src/audio/lib/heap.c
@@ -1265,7 +1265,7 @@ void AudioHeap_DiscardSampleCacheEntry(SampleCacheEntry* entry) {
s32 sampleBankId2;
s32 fontId;
- numFonts = gAudioCtx.soundFontTable->numEntries;
+ numFonts = gAudioCtx.soundFontTable->header.numEntries;
for (fontId = 0; fontId < numFonts; fontId++) {
sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
@@ -1322,7 +1322,7 @@ void AudioHeap_DiscardSampleCaches(void) {
s32 fontId;
s32 j;
- numFonts = gAudioCtx.soundFontTable->numEntries;
+ numFonts = gAudioCtx.soundFontTable->header.numEntries;
for (fontId = 0; fontId < numFonts; fontId++) {
sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
@@ -1392,7 +1392,7 @@ void AudioHeap_ApplySampleBankCacheInternal(s32 apply, s32 sampleBankId) {
s32 pad[4];
sampleBankTable = gAudioCtx.sampleBankTable;
- numFonts = gAudioCtx.soundFontTable->numEntries;
+ numFonts = gAudioCtx.soundFontTable->header.numEntries;
change.oldAddr = (u32)AudioHeap_SearchCaches(SAMPLE_TABLE, CACHE_EITHER, sampleBankId);
if (change.oldAddr == 0) {
return;
diff --git a/src/audio/lib/load.c b/src/audio/lib/load.c
index 149179020..807bab317 100644
--- a/src/audio/lib/load.c
+++ b/src/audio/lib/load.c
@@ -338,10 +338,10 @@ void AudioLoad_SetSampleFontLoadStatus(s32 sampleBankId, s32 loadStatus) {
void AudioLoad_InitTable(AudioTable* table, u32 romAddr, u16 unkMediumParam) {
s32 i;
- table->unkMediumParam = unkMediumParam;
- table->romAddr = romAddr;
+ table->header.unkMediumParam = unkMediumParam;
+ table->header.romAddr = romAddr;
- for (i = 0; i < table->numEntries; i++) {
+ for (i = 0; i < table->header.numEntries; i++) {
if ((table->entries[i].size != 0) && (table->entries[i].medium == MEDIUM_CART)) {
table->entries[i].romAddr += romAddr;
}
@@ -401,7 +401,7 @@ s32 AudioLoad_SyncLoadSample(Sample* sample, s32 fontId) {
if (sample->medium == MEDIUM_UNK) {
AudioLoad_SyncDmaUnkMedium((u32)sample->sampleAddr, sampleAddr, sample->size,
- gAudioCtx.sampleBankTable->unkMediumParam);
+ gAudioCtx.sampleBankTable->header.unkMediumParam);
} else {
AudioLoad_SyncDma((u32)sample->sampleAddr, sampleAddr, sample->size, sample->medium);
}
@@ -707,7 +707,7 @@ void* AudioLoad_SyncLoad(u32 tableType, u32 id, s32* didAllocate) {
*didAllocate = true;
if (medium == MEDIUM_UNK) {
- AudioLoad_SyncDmaUnkMedium(romAddr, ramAddr, size, (s16)table->unkMediumParam);
+ AudioLoad_SyncDmaUnkMedium(romAddr, ramAddr, size, (s16)table->header.unkMediumParam);
} else {
AudioLoad_SyncDma(romAddr, ramAddr, size, medium);
}
@@ -1066,8 +1066,8 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
}
if (medium == MEDIUM_UNK) {
- AudioLoad_StartAsyncLoadUnkMedium((s16)table->unkMediumParam, devAddr, ramAddr, size, medium, nChunks,
- retQueue, MK_ASYNC_MSG(retData, tableType, id, loadStatus));
+ AudioLoad_StartAsyncLoadUnkMedium((s16)table->header.unkMediumParam, devAddr, ramAddr, size, medium,
+ nChunks, retQueue, MK_ASYNC_MSG(retData, tableType, id, loadStatus));
} else {
AudioLoad_StartAsyncLoad(devAddr, ramAddr, size, medium, nChunks, retQueue,
MK_ASYNC_MSG(retData, tableType, realId, loadStatus));
@@ -1215,10 +1215,10 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
// Set audio tables pointers
gAudioCtx.sequenceTable = (AudioTable*)gSequenceTable;
gAudioCtx.soundFontTable = (AudioTable*)gSoundFontTable;
- gAudioCtx.sampleBankTable = (AudioTable*)gSampleBankTable;
+ gAudioCtx.sampleBankTable = &gSampleBankTable;
gAudioCtx.sequenceFontTable = gSequenceFontTable;
- gAudioCtx.numSequences = gAudioCtx.sequenceTable->numEntries;
+ gAudioCtx.numSequences = gAudioCtx.sequenceTable->header.numEntries;
gAudioCtx.specId = 0;
gAudioCtx.resetStatus = 1; // Set reset to immediately initialize the audio heap
@@ -1229,7 +1229,7 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
AudioLoad_InitTable(gAudioCtx.sequenceTable, (u32)_AudioseqSegmentRomStart, 0);
AudioLoad_InitTable(gAudioCtx.soundFontTable, (u32)_AudiobankSegmentRomStart, 0);
AudioLoad_InitTable(gAudioCtx.sampleBankTable, (u32)_AudiotableSegmentRomStart, 0);
- numFonts = gAudioCtx.soundFontTable->numEntries;
+ numFonts = gAudioCtx.soundFontTable->header.numEntries;
gAudioCtx.soundFontList = AudioHeap_Alloc(&gAudioCtx.initPool, numFonts * sizeof(SoundFont));
for (i = 0; i < numFonts; i++) {
@@ -1295,7 +1295,7 @@ s32 AudioLoad_SlowLoadSample(s32 fontId, s32 instId, s8* status) {
slowLoad->seqOrFontId = fontId;
slowLoad->instId = instId;
if (slowLoad->medium == MEDIUM_UNK) {
- slowLoad->unkMediumParam = gAudioCtx.sampleBankTable->unkMediumParam;
+ slowLoad->unkMediumParam = gAudioCtx.sampleBankTable->header.unkMediumParam;
}
gAudioCtx.slowLoadPos ^= 1;
@@ -1439,7 +1439,7 @@ s32 AudioLoad_SlowLoadSeq(s32 seqId, u8* ramAddr, s8* status) {
slowLoad->seqOrFontId = seqId;
if (slowLoad->medium == MEDIUM_UNK) {
- slowLoad->unkMediumParam = seqTable->unkMediumParam;
+ slowLoad->unkMediumParam = seqTable->header.unkMediumParam;
}
gAudioCtx.slowLoadPos ^= 1;
@@ -1616,7 +1616,7 @@ void AudioLoad_ProcessAsyncLoad(AudioAsyncLoad* asyncLoad, s32 resetStatus) {
if (asyncLoad->bytesRemaining < asyncLoad->chunkSize) {
if (asyncLoad->medium == MEDIUM_UNK) {
AudioLoad_AsyncDmaUnkMedium(asyncLoad->curDevAddr, asyncLoad->curRamAddr, asyncLoad->bytesRemaining,
- sampleBankTable->unkMediumParam);
+ sampleBankTable->header.unkMediumParam);
} else {
AudioLoad_AsyncDma(asyncLoad, asyncLoad->bytesRemaining);
}
@@ -1626,7 +1626,7 @@ void AudioLoad_ProcessAsyncLoad(AudioAsyncLoad* asyncLoad, s32 resetStatus) {
if (asyncLoad->medium == MEDIUM_UNK) {
AudioLoad_AsyncDmaUnkMedium(asyncLoad->curDevAddr, asyncLoad->curRamAddr, asyncLoad->chunkSize,
- sampleBankTable->unkMediumParam);
+ sampleBankTable->header.unkMediumParam);
} else {
AudioLoad_AsyncDma(asyncLoad, asyncLoad->chunkSize);
}
@@ -1783,7 +1783,7 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* fontData
case false:
if (sample->medium == MEDIUM_UNK) {
AudioLoad_SyncDmaUnkMedium((u32)sample->sampleAddr, sampleRamAddr, sample->size,
- gAudioCtx.sampleBankTable->unkMediumParam);
+ gAudioCtx.sampleBankTable->header.unkMediumParam);
sample->sampleAddr = sampleRamAddr;
sample->medium = MEDIUM_RAM;
} else {
@@ -2039,7 +2039,7 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, SampleBankRelocInfo*
case false:
if (sample->medium == MEDIUM_UNK) {
AudioLoad_SyncDmaUnkMedium((u32)sample->sampleAddr, addr, sample->size,
- gAudioCtx.sampleBankTable->unkMediumParam);
+ gAudioCtx.sampleBankTable->header.unkMediumParam);
sample->sampleAddr = addr;
sample->medium = MEDIUM_RAM;
} else {
diff --git a/src/audio/tables/samplebank_table.c b/src/audio/tables/samplebank_table.c
new file mode 100644
index 000000000..58ebf06f2
--- /dev/null
+++ b/src/audio/tables/samplebank_table.c
@@ -0,0 +1,50 @@
+#include "attributes.h"
+#include "z64audio.h"
+
+// Symbol definition
+
+extern AudioTable gSampleBankTable;
+#pragma weak gSampleBankTable = sSampleBankTableHeader
+
+// Externs for table
+
+#define DEFINE_SAMPLE_BANK(name, medium, cachePolicy) \
+ extern u8 name##_Start[]; \
+ extern u8 name##_Size[];
+#define DEFINE_SAMPLE_BANK_PTR(index, medium, cachePolicy) /*empty*/
+
+#include "assets/audio/samplebank_table.h"
+
+#undef DEFINE_SAMPLE_BANK
+#undef DEFINE_SAMPLE_BANK_PTR
+
+// Table header
+
+NO_REORDER AudioTableHeader sSampleBankTableHeader = {
+// The table contains the number of samplebanks, count them with the preprocessor
+#define DEFINE_SAMPLE_BANK(name, medium, cachePolicy) 1 +
+#define DEFINE_SAMPLE_BANK_PTR(index, medium, cachePolicy) 1 +
+
+#include "assets/audio/samplebank_table.h"
+ 0,
+
+#undef DEFINE_SAMPLE_BANK
+#undef DEFINE_SAMPLE_BANK_PTR
+
+ 0,
+ 0x00000000,
+ { 0, 0, 0, 0, 0, 0, 0, 0 },
+};
+
+// Table body
+
+NO_REORDER AudioTableEntry sSampleBankTableEntries[] = {
+#define DEFINE_SAMPLE_BANK(name, medium, cachePolicy) \
+ { (u32)name##_Start, (u32)name##_Size, (medium), (cachePolicy), 0, 0, 0 },
+#define DEFINE_SAMPLE_BANK_PTR(index, medium, cachePolicy) { (index), 0, (medium), (cachePolicy), 0, 0, 0 },
+
+#include "assets/audio/samplebank_table.h"
+
+#undef DEFINE_SAMPLE_BANK
+#undef DEFINE_SAMPLE_BANK_PTR
+};
diff --git a/src/code/z_play.c b/src/code/z_play.c
index 7ebb6ccea..ab3b47500 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -4,6 +4,8 @@
#include "z64frame_advance.h"
+#pragma increment_block_number "gc-eu:24 gc-eu-mq:24 gc-jp:28 gc-jp-ce:28 gc-jp-mq:28 gc-us:28 gc-us-mq:28"
+
TransitionTile gTransitionTile;
s32 gTransitionTileState;
VisMono gPlayVisMono;
diff --git a/src/overlays/actors/ovl_Fishing/z_fishing.c b/src/overlays/actors/ovl_Fishing/z_fishing.c
index 42595eb43..fd8194333 100644
--- a/src/overlays/actors/ovl_Fishing/z_fishing.c
+++ b/src/overlays/actors/ovl_Fishing/z_fishing.c
@@ -14,7 +14,7 @@
#include "cic6105.h"
#endif
-#pragma increment_block_number "gc-eu:204 gc-eu-mq:204 gc-jp:206 gc-jp-ce:206 gc-jp-mq:206 gc-us:206 gc-us-mq:206"
+#pragma increment_block_number "gc-eu:198 gc-eu-mq:198 gc-jp:200 gc-jp-ce:200 gc-jp-mq:200 gc-us:200 gc-us-mq:200"
#define FLAGS ACTOR_FLAG_4