diff options
| author | MegaMech <MegaMech@users.noreply.github.com> | 2023-09-12 19:43:54 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-12 19:43:54 -0600 |
| commit | 4ee09e005ff4b1cdccfcbbc61da87ac9391e50c2 (patch) | |
| tree | 4ff0961e974acc0fd3fc60132b4289f4dfdbe2f1 /src/audio | |
| parent | f20221fab6357123d10d62a0b5e19a0924c0aafe (diff) | |
Import bss for audio and elsewhere (#416)
Diffstat (limited to 'src/audio')
| -rw-r--r-- | src/audio/external.c | 109 | ||||
| -rw-r--r-- | src/audio/external.h | 1 | ||||
| -rw-r--r-- | src/audio/load.c | 68 | ||||
| -rw-r--r-- | src/audio/port_eu.c | 20 |
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); |
