summaryrefslogtreecommitdiff
path: root/src/audio
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2023-09-12 19:43:54 -0600
committerGitHub <noreply@github.com>2023-09-12 19:43:54 -0600
commit4ee09e005ff4b1cdccfcbbc61da87ac9391e50c2 (patch)
tree4ff0961e974acc0fd3fc60132b4289f4dfdbe2f1 /src/audio
parentf20221fab6357123d10d62a0b5e19a0924c0aafe (diff)
Import bss for audio and elsewhere (#416)
Diffstat (limited to 'src/audio')
-rw-r--r--src/audio/external.c109
-rw-r--r--src/audio/external.h1
-rw-r--r--src/audio/load.c68
-rw-r--r--src/audio/port_eu.c20
4 files changed, 155 insertions, 43 deletions
diff --git a/src/audio/external.c b/src/audio/external.c
index c85ccd690..37341b68a 100644
--- a/src/audio/external.c
+++ b/src/audio/external.c
@@ -9,12 +9,79 @@
#include "audio/data.h"
#include <sounds.h>
#include "port_eu.h"
+#include "code_80091750.h"
-/** bss
s8 D_8018EF10;
-*/
+typedef struct {
+ s32 unk0;
+ s32 unk4;
+ s32 unk8;
+ s32 unkC;
+} UnkStruct8018EF18;
+
+UnkStruct8018EF18 D_8018EF18[12]; // probably wrong
+struct Unk_8018EFD8 D_8018EFD8[50];
+u8 D_8018FB90;
+u8 D_8018FB91;
+Camera *D_8018FB98[4]; // Is this real?
+Vec3f D_8018FBA8[4];
+Vec3f D_8018FBD8[4];
+u8 D_8018FC08;
+s32 D_8018FC10[4]; // probably wrong.
+struct Unk_8018FC20 sSoundRequests[0x100];
+struct Unk_80191420 sSoundBanks[SOUND_BANK_COUNT][20];
+u8 sSoundBankUsedListBack[SOUND_BANK_COUNT];
+u8 sSoundBankFreeListFront[SOUND_BANK_COUNT];
+extern u8 sNumSoundsInBank[SOUND_BANK_COUNT];
+
+
+extern u8 sSoundBankDisabled[];
+extern u8 D_801930D0[];
+extern u8 D_80192C38;
+
+// Warning: D_801930D0 appears to be an array of struct.
+// D_80193318 has been treated as a fake pr in the assembly.
+// This may not be correct.
+
+/** Could not figure out these structs.
+u8 D_80192AB8[384]; // probably wrong.
+
+struct UnkStruct_80192C38 {
+ u8 unk0;
+ //u8 unk1[3];
+ u8 sSoundBankDisabled[16];
+};
+
+struct UnkStruct_80192C38 D_80192C38;
+//u8 D_80192C38;
+//s32 a;
+//u8 sSoundBankDisabled[15]; // 0x80192C3C
+
+typedef struct {
+ f32 unk0;
+ f32 unk4;
+ f32 unk8;
+ f32 unkC;
+} UnkStruct_80192C48; // size 0x10
+
+UnkStruct_80192C48 D_80192C48;
+typedef struct {
+ u8 unk0[9];
+} UnkStruct_80192CA8; // size 0xA
+
+UnkStruct_80192CA8 D_80192CA8[3];
+u8 D_80192CC6[10]; // unconfirmed
+u32 D_80192CD0[256];
+
+typedef struct {
+ u8 unk0[0x24C];
+} UnkStruct_801930D0;
+
+UnkStruct_801930D0 D_801930D0[3];
+//UnkStruct_801930D0 D_80193318[2]; // Likely fake var. Probably apart of 801930D0.
+*/
// Requires void in the argument list to match properly.
void func_800C13F0(void) {
@@ -690,11 +757,11 @@ GLOBAL_ASM("asm/non_matchings/audio/external/func_800C284C.s")
#ifdef MIPS_TO_C
//generated by m2c commit eefca95b040d7ee0c617bc58f9ac6cd1cf7bce87 on Aug-14-2023
-extern ? D_80193318;
+//extern ? D_80193318;
void func_800C29B4(u8 arg0, s32 arg1) {
func_800CBBB8((arg0 << 0x10) | 0x83000000, arg1 & 0xFFFF);
- *(&D_80193318 + (arg0 * 0x24C)) = 0xFFFF;
+ *(&D_801930D0 + (arg0 * 0x24C)) = 0xFFFF;
}
#else
GLOBAL_ASM("asm/non_matchings/audio/external/func_800C29B4.s")
@@ -1080,7 +1147,7 @@ void func_800C3478(void) {
#ifdef MIPS_TO_C
//generated by m2c commit eefca95b040d7ee0c617bc58f9ac6cd1cf7bce87 on Aug-14-2023
-extern ? D_80193318;
+//extern ? D_80193318;
u16 func_800C3508(s32 player) {
s32 temp_t6;
@@ -1090,7 +1157,7 @@ u16 func_800C3508(s32 player) {
if (((u32) gSequencePlayers[temp_t6] >> 0x1F) == 0) {
return 0xFFFFU;
}
- return *(&D_80193318 + (temp_t6 * 0x24C));
+ return *(&D_801930D0 + (temp_t6 * 0x24C));
}
#else
GLOBAL_ASM("asm/non_matchings/audio/external/func_800C3508.s")
@@ -1166,7 +1233,7 @@ GLOBAL_ASM("asm/non_matchings/audio/external/func_800C36C4.s")
#ifdef MIPS_TO_C
//generated by m2c commit eefca95b040d7ee0c617bc58f9ac6cd1cf7bce87 on Aug-14-2023
-extern ? D_801930D0;
+//extern ? D_801930D0;
void func_800C3724(void) {
f32 temp_f2;
@@ -1527,7 +1594,7 @@ void func_800C4084(u16 bankMask) {
}
extern u16 D_800EA1C4;
-extern u8 D_801930D0[];
+//extern u8 D_801930D0[];
void func_800C40F0(u8 arg0) {
D_800EA1C4 &= ((1 << (arg0)) ^ (u16) -1);
@@ -2090,8 +2157,7 @@ GLOBAL_ASM("asm/non_matchings/audio/external/func_800C4888.s")
? func_800C19D0(s32, s32, u8); /* extern */
? func_800C473C(s32, s32); /* extern */
extern ? D_80192AB8;
-extern u8 D_80192C38;
-extern ? D_801930D0;
+//extern ? D_801930D0;
extern ? D_803B17D0;
static ? D_800EA188; /* unable to generate initializer */
u8 D_800EA1C0 = 0;
@@ -2120,27 +2186,28 @@ void func_800C4FE4(s32 arg0) {
temp_s0 = (temp_s3 * 0x3C0) + (temp_s1 * 0x30) + sSoundBanks;
temp_v0 = temp_s0->unk28;
if (temp_v0 == 2) {
- temp_s0->unk2C = (u8) D_80192C38;
+ temp_s0->unk2C = (u8) D_80192C38.unk0;
if (temp_s0->unk24 & 0x80000) {
- D_800EA1C4 |= 1 << D_80192C38;
+ D_800EA1C4 |= 1 << D_80192C38.unk0;
D_801930D0.unk12 = 1;
D_801930D0.unk10 = 0x28;
}
func_800C19D0(temp_s3 & 0xFF, temp_s1 & 0xFF, D_80192C38);
- func_800CBBE8((D_80192C38 << 8) | 0x06020000, 1);
- func_800CBBE8((D_80192C38 << 8) | 0x06020000 | 4, (s8) temp_s0->unk24);
+ func_800CBBE8((D_80192C38.unk0 << 8) | 0x06020000, 1);
+ func_800CBBE8((D_80192C38.unk0 << 8) | 0x06020000 | 4, (s8) temp_s0->unk24);
temp_s0->unk28 = 4U;
var_v1_2 = &D_800EA188 + ((D_800EA1C0 * 6) + temp_s3);
goto block_11;
}
- if ((*(&D_803B17D0 + (D_80192C38 * 4)))->unk5F == 0x80) {
- func_800CBBE8(((D_80192C38 & 0xFF) << 8) | 0x06020000 | 7, 0);
+ // gSequencePlayers + 0x2C0 gSequencePlayers[1].channels
+ if ((*(&D_803B17D0 + (D_80192C38.unk0 * 4)))->unk5F == 0x80) {
+ func_800CBBE8(((D_80192C38.unk0 & 0xFF) << 8) | 0x06020000 | 7, 0);
func_800C473C(temp_s3 & 0xFF, temp_s1 & 0xFF);
var_v1_2 = &D_800EA188 + ((D_800EA1C0 * 6) + temp_s3);
goto block_11;
}
if (temp_v0 == 3) {
- func_800C19D0(temp_s3 & 0xFF, temp_s1 & 0xFF, D_80192C38);
+ func_800C19D0(temp_s3 & 0xFF, temp_s1 & 0xFF, D_80192C38.unk0);
temp_s0->unk28 = 4U;
var_v1_2 = &D_800EA188 + ((D_800EA1C0 * 6) + temp_s3);
block_11:
@@ -2150,7 +2217,7 @@ block_11:
temp_t7 = (var_s4 + 1) & 0xFF;
temp_at = temp_t7 < (s32) var_v1;
var_s4 = temp_t7;
- D_80192C38 += 1;
+ D_80192C38.unk0 += 1;
} while (temp_at != 0);
}
}
@@ -2395,14 +2462,13 @@ GLOBAL_ASM("asm/non_matchings/audio/external/func_800C5968.s")
#endif
-extern s8 D_80192C38;
extern s32 D_803B17D0;
void func_800C59C4(void) {
u8 i;
- if (D_803B17D0 != (u32) &gSequenceChannelNone) {
+ if (gSequencePlayers[2].channels[0] != &gSequenceChannelNone) {
D_80192C38 = 0;
for(i = 0; i < 6; i++) {
func_800C4888(i);
@@ -3070,7 +3136,6 @@ void func_800C70A8(u8 playerId) {
#ifdef MIPS_TO_C
//generated by m2c commit eefca95b040d7ee0c617bc58f9ac6cd1cf7bce87 on Sep-09-2023
extern s8 D_801657E5;
-extern u8 D_8018ED90;
s32 D_800E9E74[4] = { 0, 0, 0, 0 };
static ? D_800E9E94; /* unable to generate initializer */
static s32 D_800E9EA4[4] = { 0, 0, 0, 0 };
@@ -4105,7 +4170,6 @@ void func_800CA59C(u8 playerId) {
//generated by m2c commit eefca95b040d7ee0c617bc58f9ac6cd1cf7bce87 on Sep-09-2023
s32 func_800C357C(?); /* extern */
? func_800C3608(?, ?, u8); /* extern */
-extern u32 D_803B1658;
struct Unk_800E9F7C D_800E9F7C[4]; /* unable to generate initializer */
u8 D_800EA0EC[1] = { 0 };
u8 D_800EA104 = 0;
@@ -4139,6 +4203,7 @@ void func_800CA730(u8 playerId) {
func_800C9018(playerId & 0xFF, 0x0100FF2C);
} else if ((D_800EA10C->unk0 == 0) && (D_800EA10C->unk1 == 0)) {
if (D_8018FC08 != 0) {
+ // gSequencePlayers+0x148
if (((u32) D_803B1658 >> 0x1F) == 0) {
func_800C3608(1, 5, playerId);
func_800C8EAC(D_800EA15C);
diff --git a/src/audio/external.h b/src/audio/external.h
index b7e3271ba..1afcaa84f 100644
--- a/src/audio/external.h
+++ b/src/audio/external.h
@@ -242,7 +242,6 @@ extern struct Unk_80191420 sSoundBanks[SOUND_BANK_COUNT][20];
extern u8 sSoundBankUsedListBack[SOUND_BANK_COUNT];
extern u8 sSoundBankFreeListFront[SOUND_BANK_COUNT];
extern u8 sNumSoundsInBank[SOUND_BANK_COUNT];
-extern u8 sSoundBankDisabled[12]; // size??
extern u8 sNumProcessedSoundRequests;
extern u8 sSoundRequestCount;
extern struct Unk_8018FC20 sSoundRequests[0x100];
diff --git a/src/audio/load.c b/src/audio/load.c
index 12b40d929..c16453e3f 100644
--- a/src/audio/load.c
+++ b/src/audio/load.c
@@ -17,6 +17,66 @@ struct SharedDma {
/*0xE*/ u8 ttl; // duration after which the DMA can be discarded
}; // size = 0x10
+//struct Note *gNotes; // 0x803B1508
+
+struct SequencePlayer gSequencePlayers[SEQUENCE_PLAYERS];
+struct SequenceChannel gSequenceChannels[SEQUENCE_CHANNELS];
+struct SequenceChannelLayer gSequenceLayers[SEQUENCE_LAYERS];
+struct SequenceChannel gSequenceChannelNone;
+// D_803B5F5C
+struct AudioListItem gLayerFreeList;
+struct NotePool gNoteFreeLists;
+OSMesgQueue gCurrAudioFrameDmaQueue;
+OSMesg gCurrAudioFrameDmaMesgBufs[AUDIO_FRAME_DMA_QUEUE_SIZE];
+OSIoMesg gCurrAudioFrameDmaIoMesgBufs[AUDIO_FRAME_DMA_QUEUE_SIZE];
+OSMesgQueue D_803B6720;
+OSMesg D_803B6738;
+
+OSIoMesg D_803B6740;
+struct SharedDma sSampleDmas[0x70];
+u32 gSampleDmaNumListItems;
+u32 sSampleDmaListSize1;
+s32 D_803B6E60;
+s32 load_bss_pad;
+
+u8 sSampleDmaReuseQueue1[256]; // sSampleDmaReuseQueue1
+u8 sSampleDmaReuseQueue2[256]; // sSampleDmaReuseQueue2
+u8 sSampleDmaReuseQueueTail1; // sSampleDmaReuseQueueTail1
+u8 sSampleDmaReuseQueueTail2; // sSampleDmaReuseQueueTail2
+u8 sSampleDmaReuseQueueHead1; // sSampleDmaReuseQueueHead1
+u8 sSampleDmaReuseQueueHead2; // sSampleDmaReuseQueueHead2
+
+s32 D_803B706C;
+s32 D_803B7070;
+s32 D_803B7074;
+u8 *gAlBankSets;
+u16 D_803B707C;
+struct CtlEntry *gCtlEntries;
+struct AudioBufferParametersEU gAudioBufferParameters;
+u32 D_803B70A8;
+s32 D_803B70AC;
+s32 gMaxSimultaneousNotes;
+s16 D_803B70B4;
+s8 gAudioLibSoundMode;
+s32 D_803B70B8; // According to sm64 this is s8 not s32
+s32 gCurrAudioFrameDmaCount; // file split around here?
+s32 D_803B70C0;
+s32 D_803B70C4;
+s32 D_803B70C8[2]; // probably wrong
+s32 D_803B70D0;
+struct SPTask *D_803B70D4; // gAudioTask?
+struct SPTask D_803B70D8[2]; // gAudioTasks?
+f32 D_803B7178;
+s32 D_803B717C;
+void *D_803B7180[3]; // unconfirmed, osAiSetNextBuffer vaddr
+u32 D_803B718C; // osAiSetNextBuffer nbytes
+s16 load_bss_pad3;
+u16 D_803B7192; // unconfirmed
+u32 gAudioRandom;
+s32 gAudioErrorFlags;
+u32 D_803B71A0[4]; // unconfirmed
+u8 D_803B71B0[4]; // unconfirmed
+
extern OSMesgQueue D_803B6720;
extern OSIoMesg D_803B6740;
@@ -24,17 +84,10 @@ extern OSMesgQueue gCurrAudioFrameDmaQueue; // gCurrAudioFrameDmaQueue
extern OSMesg gCurrAudioFrameDmaMesgBufs[AUDIO_FRAME_DMA_QUEUE_SIZE]; // gCurrAudioFrameDmaMesgBufs
extern OSIoMesg gCurrAudioFrameDmaIoMesgBufs[AUDIO_FRAME_DMA_QUEUE_SIZE]; // gCurrAudioFrameDmaIoMesgBufs
-extern struct SharedDma sSampleDmas[0x60]; // sSampleDmas
extern u32 gSampleDmaNumListItems; // gSampleDmaNumListItems
extern u32 sSampleDmaListSize1; // sSampleDmaListSize1
extern s32 D_803B6E60; // sUnused80226B40
-extern u8 sSampleDmaReuseQueue1[256]; // sSampleDmaReuseQueue1
-extern u8 sSampleDmaReuseQueue2[256]; // sSampleDmaReuseQueue2
-extern u8 sSampleDmaReuseQueueTail1; // sSampleDmaReuseQueueTail1
-extern u8 sSampleDmaReuseQueueTail2; // sSampleDmaReuseQueueTail2
-extern u8 sSampleDmaReuseQueueHead1; // sSampleDmaReuseQueueHead1
-extern u8 sSampleDmaReuseQueueHead2; // sSampleDmaReuseQueueHead2
/**
* Given that (almost) all of these are format strings, it is highly likely
@@ -1019,7 +1072,6 @@ GLOBAL_ASM("asm/non_matchings/audio/load/func_800BBF44.s")
extern s8 D_803B0500;
extern s8 D_803B0501;
extern OSMesgQueue D_803B6720;
-extern void *D_803B6738;
extern s32 *D_803B706C;
extern s32 *D_803B7070;
extern s32 *D_803B7074;
diff --git a/src/audio/port_eu.c b/src/audio/port_eu.c
index d61c709c2..aabc748a5 100644
--- a/src/audio/port_eu.c
+++ b/src/audio/port_eu.c
@@ -53,7 +53,6 @@ extern s32 D_803B70C0;
extern s32 D_803B70C4;
extern ? D_803B70C8;
extern s32 D_803B70D0;
-extern void *D_803B70D4;
extern ? D_803B70D8;
extern ? D_803B7180;
extern ? D_803B718C;
@@ -187,9 +186,6 @@ GLOBAL_ASM("asm/non_matchings/audio/port_eu/create_next_audio_frame_task.s")
#ifdef MIPS_TO_C
//generated by m2c commit eefca95b040d7ee0c617bc58f9ac6cd1cf7bce87 on Aug-14-2023
? func_800BBDDC(u8, ?); /* extern */
-extern u8 D_803B1658;
-extern u8 D_803B17A0;
-extern u8 D_803B18E8;
void func_800CB818(void *arg0) {
s32 temp_a1;
@@ -224,16 +220,16 @@ void func_800CB818(void *arg0) {
gAudioLibSoundMode = (s8) arg0->unk4;
return;
case 0xF1:
- *gSequencePlayers |= 0x24;
- D_803B1658 |= 0x24;
- D_803B17A0 |= 0x24;
- D_803B18E8 |= 0x24;
+ gSequencePlayers[0] |= 0x24;
+ gSequencePlayers[1] |= 0x24;
+ gSequencePlayers[2] |= 0x24;
+ gSequencePlayers[3] |= 0x24;
return;
case 0xF2:
- *gSequencePlayers = (*gSequencePlayers & 0xFFDF) | 4;
- D_803B1658 = (D_803B1658 & 0xFFDF) | 4;
- D_803B17A0 = (D_803B17A0 & 0xFFDF) | 4;
- D_803B18E8 = (D_803B18E8 & 0xFFDF) | 4;
+ gSequencePlayers[0] = (gSequencePlayers[0] & 0xFFDF) | 4;
+ gSequencePlayers[1] = (gSequencePlayers[1] & 0xFFDF) | 4;
+ gSequencePlayers[2] = (gSequencePlayers[2] & 0xFFDF) | 4;
+ gSequencePlayers[3] = (gSequencePlayers[3] & 0xFFDF) | 4;
return;
case 0xF3:
func_800BB388((s32) arg0->unk1, (s32) arg0->unk2, (s32) arg0->unk3);