From d9808a376ee20a2e6dd57d1f272886f2ad192302 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 23 May 2021 18:48:50 -0400 Subject: Start decompiling Chatot sound data func --- arm9/src/sav_chatot.c | 49 +++++++++++++++++++++++++++++++++++++++ arm9/src/sound.c | 64 +++++++++++++++++++++++++-------------------------- 2 files changed, 81 insertions(+), 32 deletions(-) create mode 100644 arm9/src/sav_chatot.c (limited to 'arm9/src') diff --git a/arm9/src/sav_chatot.c b/arm9/src/sav_chatot.c new file mode 100644 index 00000000..f2707821 --- /dev/null +++ b/arm9/src/sav_chatot.c @@ -0,0 +1,49 @@ +#include "global.h" +#include "MI_memory.h" +#include "heap.h" +#include "save_block_2.h" + +struct SaveChatotSoundClip +{ + // TODO: Fill this in + BOOL exists; + s8 data[1000]; +}; + +THUMB_FUNC u32 FUN_02029EC4(void) +{ + return sizeof(struct SaveChatotSoundClip); +} + +THUMB_FUNC void FUN_02029ECC(struct SaveChatotSoundClip * chatot) +{ + MIi_CpuClear32(0, chatot, sizeof(struct SaveChatotSoundClip)); + chatot->exists = FALSE; +} + +THUMB_FUNC struct SaveChatotSoundClip * FUN_02029EE4(u32 heap_id) +{ + struct SaveChatotSoundClip * ret = (struct SaveChatotSoundClip *)AllocFromHeap(heap_id, sizeof(struct SaveChatotSoundClip)); + FUN_02029ECC(ret); + return ret; +} + +THUMB_FUNC struct SaveChatotSoundClip * FUN_02029EF8(struct SaveBlock2 * sav2) +{ + return (struct SaveChatotSoundClip *) SavArray_get(sav2, 22); +} + +THUMB_FUNC u32 FUN_02029F04(struct SaveChatotSoundClip * chatot) +{ + return chatot->exists; +} + +THUMB_FUNC void FUN_02029F08(struct SaveChatotSoundClip * chatot) +{ + chatot->exists = FALSE; +} + +THUMB_FUNC s8 * FUN_02029F10(struct SaveChatotSoundClip * chatot) +{ + return chatot->data; +} diff --git a/arm9/src/sound.c b/arm9/src/sound.c index 95d14c64..79eb21f0 100644 --- a/arm9/src/sound.c +++ b/arm9/src/sound.c @@ -11,8 +11,8 @@ static u32 UNK_02107074; void FUN_02003C40(void); BOOL FUN_02003D04(void); -void FUN_020040C8(void); -void FUN_02004064(struct SoundData *); +void GF_InitMic(void); +void GF_SoundDataInit(struct SoundData *); void FUN_02004088(struct SoundData *); void FUN_020040A4(struct SoundData *); void FUN_02003CE8(int); @@ -30,8 +30,8 @@ void InitSoundData(void * a0, struct Options * a1) { struct SoundData * sdat = GetSoundDataPointer(); NNS_SndInit(); - FUN_020040C8(); - FUN_02004064(sdat); + GF_InitMic(); + GF_SoundDataInit(sdat); sdat->heap = NNS_SndHeapCreate(sdat->unk_00094, sizeof(sdat->unk_00094)); NNS_SndArcInit(&sdat->header, "data/sound/sound_data.sdat", sdat->heap, 0); NNS_SndArcPlayerSetup(sdat->heap); @@ -200,61 +200,61 @@ void * FUN_02003D38(u32 a0) } } -int FUN_02003F3C(int * a0) +int GF_Snd_SaveState(int * level_p) { struct SoundData * sdat = GetSoundDataPointer(); - int r4 = NNS_SndHeapSaveState(sdat->heap); - GF_ASSERT(r4 != -1); - if (a0 != NULL) - *a0 = r4; - return r4; + int level = NNS_SndHeapSaveState(sdat->heap); + GF_ASSERT(level != -1); + if (level_p != NULL) + *level_p = level; + return level; } -void FUN_02003F64(int a0) +void GF_Snd_RestoreState(int level) { struct SoundData * sdat = GetSoundDataPointer(); - NNS_SndHeapLoadState(sdat->heap, a0); + NNS_SndHeapLoadState(sdat->heap, level); } -BOOL FUN_02003F78(int a0) +BOOL GF_Snd_LoadGroup(int groupNo) { struct SoundData * sdat = GetSoundDataPointer(); - return NNS_SndArcLoadGroup(a0, sdat->heap); + return NNS_SndArcLoadGroup(groupNo, sdat->heap); } -BOOL FUN_02003F90(int a0) +BOOL GF_Snd_LoadSeq(int seqNo) { struct SoundData * sdat = GetSoundDataPointer(); - return NNS_SndArcLoadSeq(a0, sdat->heap); + return NNS_SndArcLoadSeq(seqNo, sdat->heap); } -BOOL FUN_02003FA8(int a0, u32 a1) +BOOL GF_Snd_LoadSeqEx(int seqNo, u32 loadFlag) { struct SoundData * sdat = GetSoundDataPointer(); - return NNS_SndArcLoadSeqEx(a0, a1, sdat->heap); + return NNS_SndArcLoadSeqEx(seqNo, loadFlag, sdat->heap); } -BOOL FUN_02003FC4(int a0) +BOOL GF_Snd_LoadWaveArc(int waveArcNo) { struct SoundData * sdat = GetSoundDataPointer(); - return NNS_SndArcLoadWaveArc(a0, sdat->heap); + return NNS_SndArcLoadWaveArc(waveArcNo, sdat->heap); } -BOOL FUN_02003FDC(int a0) +BOOL GF_Snd_LoadBank(int bankNo) { struct SoundData * sdat = GetSoundDataPointer(); - return NNS_SndArcLoadBank(a0, sdat->heap); + return NNS_SndArcLoadBank(bankNo, sdat->heap); } -u32 * FUN_02003FF4(int a0) +u32 * FUN_02003FF4(int playerNo) { struct SoundData * sdat = GetSoundDataPointer(); - if (a0 >= 9) + if (playerNo >= (s32)NELEMS(sdat->players)) { GF_ASSERT(0); - a0 = 0; + playerNo = 0; } - return &sdat->unk_BBC94[a0]; + return &sdat->players[playerNo]; } u32 FUN_02004018(u32 a0) @@ -283,7 +283,7 @@ u32 FUN_02004018(u32 a0) } } -void FUN_02004064(struct SoundData * sdat) +void GF_SoundDataInit(struct SoundData * sdat) { int i; memset(sdat, 0, sizeof(*sdat)); @@ -296,18 +296,18 @@ void FUN_02004088(struct SoundData * sdat) int i; for (i = 0; i < 9; i++) { - NNS_SndHandleInit(&sdat->unk_BBC94[i]); + NNS_SndHandleInit(&sdat->players[i]); } } void FUN_020040A4(struct SoundData * sdat) { - FUN_02003F3C(&sdat->unk_BCD1C[0]); - FUN_02003F78(0); - FUN_02003F3C(&sdat->unk_BCD1C[1]); + GF_Snd_SaveState(&sdat->unk_BCD1C[0]); + GF_Snd_LoadGroup(0); + GF_Snd_SaveState(&sdat->unk_BCD1C[1]); } -void FUN_020040C8(void) +void GF_InitMic(void) { MIC_Init(); PM_SetAmp(1); -- cgit v1.2.3 From eb511d34eab6bdbb157a998b9aa5617b7679c242 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 24 May 2021 09:31:37 -0400 Subject: Finish decomping sav_chatot --- arm9/src/main.c | 4 +-- arm9/src/sav_chatot.c | 81 +++++++++++++++++++++++++++++++++++++++---------- arm9/src/save_arrays.c | 6 ++-- arm9/src/scrcmd_sound.c | 6 ++-- 4 files changed, 73 insertions(+), 24 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/main.c b/arm9/src/main.c index c05fa1f3..863cb654 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -33,7 +33,7 @@ extern void GF_InitRTCWork(void); extern void FUN_02002C14(void); extern void FUN_02002C50(int, int); extern struct SaveBlock2 * SaveBlock2_new(void); -extern void * FUN_02029EF8(struct SaveBlock2 *); +extern void * Sav2_Chatot_get(struct SaveBlock2 *); extern int FUN_020337E8(int); extern void FUN_02034188(int, int); extern int FUN_020227FC(struct SaveBlock2 *); @@ -73,7 +73,7 @@ THUMB_FUNC void NitroMain(void) FUN_02002C50(3, 3); UNK_02016FA8.unk10 = -1; UNK_02016FA8.unk18 = SaveBlock2_new(); - InitSoundData(FUN_02029EF8(UNK_02016FA8.unk18), Sav2_PlayerData_GetOptionsAddr(UNK_02016FA8.unk18)); + InitSoundData(Sav2_Chatot_get(UNK_02016FA8.unk18), Sav2_PlayerData_GetOptionsAddr(UNK_02016FA8.unk18)); Init_Timer3(); if (FUN_020337E8(3) == 3) FUN_02034188(3, 0); diff --git a/arm9/src/sav_chatot.c b/arm9/src/sav_chatot.c index f2707821..7b240a99 100644 --- a/arm9/src/sav_chatot.c +++ b/arm9/src/sav_chatot.c @@ -1,49 +1,98 @@ #include "global.h" #include "MI_memory.h" #include "heap.h" -#include "save_block_2.h" +#include "sav_chatot.h" -struct SaveChatotSoundClip -{ - // TODO: Fill this in - BOOL exists; - s8 data[1000]; -}; - -THUMB_FUNC u32 FUN_02029EC4(void) +THUMB_FUNC u32 Sav2_Chatot_sizeof(void) { return sizeof(struct SaveChatotSoundClip); } -THUMB_FUNC void FUN_02029ECC(struct SaveChatotSoundClip * chatot) +THUMB_FUNC void Sav2_Chatot_init(struct SaveChatotSoundClip * chatot) { MIi_CpuClear32(0, chatot, sizeof(struct SaveChatotSoundClip)); chatot->exists = FALSE; } -THUMB_FUNC struct SaveChatotSoundClip * FUN_02029EE4(u32 heap_id) +THUMB_FUNC struct SaveChatotSoundClip * Chatot_new(u32 heap_id) { struct SaveChatotSoundClip * ret = (struct SaveChatotSoundClip *)AllocFromHeap(heap_id, sizeof(struct SaveChatotSoundClip)); - FUN_02029ECC(ret); + Sav2_Chatot_init(ret); return ret; } -THUMB_FUNC struct SaveChatotSoundClip * FUN_02029EF8(struct SaveBlock2 * sav2) +THUMB_FUNC struct SaveChatotSoundClip * Sav2_Chatot_get(struct SaveBlock2 * sav2) { return (struct SaveChatotSoundClip *) SavArray_get(sav2, 22); } -THUMB_FUNC u32 FUN_02029F04(struct SaveChatotSoundClip * chatot) +THUMB_FUNC BOOL Chatot_exists(struct SaveChatotSoundClip * chatot) { return chatot->exists; } -THUMB_FUNC void FUN_02029F08(struct SaveChatotSoundClip * chatot) +THUMB_FUNC void Chatot_invalidate(struct SaveChatotSoundClip * chatot) { chatot->exists = FALSE; } -THUMB_FUNC s8 * FUN_02029F10(struct SaveChatotSoundClip * chatot) +THUMB_FUNC s8 * Chatot_GetData(struct SaveChatotSoundClip * chatot) { return chatot->data; } + +static inline s8 transform(u8 value) +{ + return (s8)(value - 8); +} + +THUMB_FUNC void Chatot_Decode(s8 * dest, const s8 * data) +{ + s32 i; + s32 dest_i; + u8 val; + s8 val2; + + for (dest_i = 0, i = 0; i < 1000; i++, dest_i += 2) + { + val = (u8)(data[i] & 0xF); + val2 = transform(val); + dest[dest_i + 0] = (s8)(val2 << 4); + val = (u8)(data[i] >> 4); + val2 = transform(val); + dest[dest_i + 1] = (s8)(val2 << 4); + } +} + +static inline u8 untransform(s8 val) +{ + val /= 16; + return (u8)(val + 8); +} + +THUMB_FUNC void Chatot_Encode(struct SaveChatotSoundClip * chatot, const s8 * data) +{ + s32 src_i; + s32 i = 0; + u8 val2; + s8 val; + chatot->exists = TRUE; + + for (src_i = 0; src_i < 2000; src_i += 2) + { + val = data[src_i + 0]; + val2 = untransform(val); + chatot->data[i] = (s8)val2; + + val = data[src_i + 1]; + val2 = untransform(val); + chatot->data[i] |= val2 << 4; + + i++; + } +} + +THUMB_FUNC void Chatot_copy(struct SaveChatotSoundClip * dest, const struct SaveChatotSoundClip * src) +{ + MIi_CpuCopyFast(src, dest, sizeof(struct SaveChatotSoundClip)); +} diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c index 8520f2c1..f4b18b86 100644 --- a/arm9/src/save_arrays.c +++ b/arm9/src/save_arrays.c @@ -15,6 +15,7 @@ #include "seal.h" #include "unk_020139D8.h" #include "unk_02024E64.h" +#include "sav_chatot.h" extern u32 FUN_0202AC20(void); extern u32 FUN_02034D7C(void); @@ -26,7 +27,7 @@ extern u32 FUN_02028054(void); extern u32 FUN_02028980(void); extern u32 FUN_02029A84(void); extern u32 FUN_02029FB0(void); -extern u32 FUN_02029EC4(void); +extern u32 Sav2_Chatot_sizeof(void); extern u32 FUN_0202A89C(void); extern u32 FUN_0202A8F4(void); extern u32 FUN_0202A924(void); @@ -47,7 +48,6 @@ extern void FUN_0202805C(void *); extern void FUN_02028994(void *); extern void FUN_02029A8C(void *); extern void FUN_02029FB8(void *); -extern void FUN_02029ECC(void *); extern void FUN_0202A8A4(void *); extern void FUN_0202A8F8(void *); extern void FUN_0202A92C(void *); @@ -87,7 +87,7 @@ const struct SaveChunkHeader UNK_020EE700[] = { { 19, 0, (SAVSIZEFN)FUN_02029A84, (SAVINITFN)FUN_02029A8C }, { 20, 0, (SAVSIZEFN)FUN_02029FB0, (SAVINITFN)FUN_02029FB8 }, { 21, 0, (SAVSIZEFN)Sav2_SealCase_sizeof, (SAVINITFN)Sav2_SealCase_init }, - { 22, 0, (SAVSIZEFN)FUN_02029EC4, (SAVINITFN)FUN_02029ECC }, + { 22, 0, (SAVSIZEFN)Sav2_Chatot_sizeof, (SAVINITFN)Sav2_Chatot_init }, { 23, 0, (SAVSIZEFN)FUN_0202A89C, (SAVINITFN)FUN_0202A8A4 }, { 24, 0, (SAVSIZEFN)FUN_0202A8F4, (SAVINITFN)FUN_0202A8F8 }, { 25, 0, (SAVSIZEFN)FUN_0202A924, (SAVINITFN)FUN_0202A92C }, diff --git a/arm9/src/scrcmd_sound.c b/arm9/src/scrcmd_sound.c index 5acaae1e..df611ec7 100644 --- a/arm9/src/scrcmd_sound.c +++ b/arm9/src/scrcmd_sound.c @@ -1,6 +1,6 @@ #include "scrcmd.h" -extern void* FUN_02029EF8(struct SaveBlock2* sav2); +extern void* Sav2_Chatot_get(struct SaveBlock2* sav2); extern u32 FUN_02005D20(void *); extern void FUN_02005E6C(void *); extern void FUN_0200433C(u32, u32, u32); @@ -203,7 +203,7 @@ THUMB_FUNC BOOL ScrCmd_Unk0059(struct ScriptContext* ctx) { u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); - void* unk = FUN_02029EF8(ctx->unk80->saveBlock2); + void* unk = Sav2_Chatot_get(ctx->unk80->saveBlock2); if (FUN_02005D20(unk) == 1) { *ret_ptr = 1; @@ -241,7 +241,7 @@ THUMB_FUNC BOOL ScrCmd_Unk005B(struct ScriptContext* ctx) THUMB_FUNC BOOL ScrCmd_Unk005C(struct ScriptContext* ctx) { - void* unk = FUN_02029EF8(ctx->unk80->saveBlock2); + void* unk = Sav2_Chatot_get(ctx->unk80->saveBlock2); FUN_02005E6C(unk); return TRUE; -- cgit v1.2.3 From 3188237ddaf9aefcbea90967a15df7b78fe8e336 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 24 May 2021 09:47:29 -0400 Subject: Propagate type changes to sound.c, main.c --- arm9/src/main.c | 5 ----- arm9/src/sound.c | 10 +++++----- 2 files changed, 5 insertions(+), 10 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/main.c b/arm9/src/main.c index 863cb654..314c4509 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -26,17 +26,12 @@ s32 UNK_02016FA4; PMBackLightSwitch gBacklightTop; struct UnkStruct_02016FA8 UNK_02016FA8; -extern void InitSystemForTheGame(void); -extern void InitGraphicMemory(void); extern void FUN_02022294(void); extern void GF_InitRTCWork(void); extern void FUN_02002C14(void); extern void FUN_02002C50(int, int); -extern struct SaveBlock2 * SaveBlock2_new(void); -extern void * Sav2_Chatot_get(struct SaveBlock2 *); extern int FUN_020337E8(int); extern void FUN_02034188(int, int); -extern int FUN_020227FC(struct SaveBlock2 *); extern void FUN_02089D90(int); extern void FUN_0200A2AC(void); extern void FUN_02015E30(void); diff --git a/arm9/src/sound.c b/arm9/src/sound.c index 79eb21f0..a5228dab 100644 --- a/arm9/src/sound.c +++ b/arm9/src/sound.c @@ -26,20 +26,20 @@ extern void FUN_0200538C(int, int, int); extern BOOL FUN_02005404(void); extern void FUN_02005CFC(void); -void InitSoundData(void * a0, struct Options * a1) +void InitSoundData(struct SaveChatotSoundClip * chatot, struct Options * options) { struct SoundData * sdat = GetSoundDataPointer(); NNS_SndInit(); GF_InitMic(); GF_SoundDataInit(sdat); - sdat->heap = NNS_SndHeapCreate(sdat->unk_00094, sizeof(sdat->unk_00094)); + sdat->heap = NNS_SndHeapCreate(sdat->heapBuffer, sizeof(sdat->heapBuffer)); NNS_SndArcInit(&sdat->header, "data/sound/sound_data.sdat", sdat->heap, 0); NNS_SndArcPlayerSetup(sdat->heap); FUN_02004088(sdat); FUN_020040A4(sdat); UNK_02107074 = 0; - sdat->unk_BCD4C = a0; - FUN_02004D60(a1->soundMethod); + sdat->chatot = chatot; + FUN_02004D60(options->soundMethod); } void DoSoundUpdateFrame(void) @@ -185,7 +185,7 @@ void * FUN_02003D38(u32 a0) case 34: return &sdat->unk_BCD48; case 35: - return &sdat->unk_BCD4C; + return &sdat->chatot; case 36: return &sdat->unk_BCD50; case 37: -- cgit v1.2.3