From b406ea3ad31cd90f9f9520e47921b48f1910694e Mon Sep 17 00:00:00 2001 From: gijs Date: Wed, 18 Oct 2023 18:27:11 +0200 Subject: [PATCH] Decompiled `func_80071288` Almost got `obMain`, still needs some fixing --- include/common.h | 2 +- src/main.c | 267 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 265 insertions(+), 4 deletions(-) diff --git a/include/common.h b/include/common.h index 86a39bb..541222f 100644 --- a/include/common.h +++ b/include/common.h @@ -294,7 +294,7 @@ extern s16 D_800E7A1C; extern s16 D_800E7D68; extern void func_80073164(u8 arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6); -extern s8 D_800A81F0; +// extern s8 D_800A81F0; typedef struct { /* 0x00 */ void(*field_0x0)(u32, void*, u32, s32); diff --git a/src/main.c b/src/main.c index 763fa04..f4f1e7c 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,8 @@ #include "common.h" #include "libmus.h" +extern u16 D_800AEDE2; + INCLUDE_ASM(const s32, "main", func_80070C60); INCLUDE_ASM(const s32, "main", AddHeap); @@ -11,7 +13,18 @@ INCLUDE_ASM(const s32, "main", __virtual_mem_alloc); INCLUDE_ASM(const s32, "main", func_800710DC); -INCLUDE_ASM(const s32, "main", func_80071288); +/* 1688 80071288 */ +void* func_80071288(u32 arg0) { + u16 temp_s0; + void* ret; + + temp_s0 = D_800AEDE2; + D_800AEDE2 = 1; + ret = __virtual_mem_alloc(arg0); + D_800AEDE2 = temp_s0; + + return ret; +} INCLUDE_ASM(const s32, "main", func_800712C4); @@ -39,8 +52,256 @@ INCLUDE_ASM(const s32, "main", func_80071C04); INCLUDE_ASM(const s32, "main", func_80071E74); +typedef struct { + u8 field_0x0; + u8 field_0x1; + u8 field_0x2; +} Unknown0; + +typedef struct { + s16 field_0x0[9]; +} Unknown1; + +void __calls_copy_controller_data(); /* extern */ +void __calls_loads_overlay_array(); /* extern */ +void __calls_osViSwapBuffer_8007307C(void**); /* extern */ +void __dma_load_loop(s32); /* extern */ +void __initialize_song_mem(); /* extern */ +void __set_fp_8008A660(void(*)(u16)); /* extern */ +void __set_obPtrPtrDisplayList(Gfx**); /* extern */ +void __set_vi_mode(s32); /* extern */ +void func_80070C60(s32*, s32); /* extern */ +void func_80072710(); /* extern */ +void func_800727D8(); /* extern */ +u8 func_800728BC(); /* extern */ +u8 func_80072900(); /* extern */ +s32 func_80073F58(); /* extern */ +void func_800746C8(); /* extern */ +void func_800749C0(s32); /* extern */ +void func_800764E0(); /* extern */ +void func_80079380(); /* extern */ +void func_8008A040(); /* extern */ +void func_8008A1B0(); /* extern */ +s8 func_8008A260(); /* extern */ +void func_8009DAEC(); /* extern */ +void func_800E9CEC(); /* extern */ +void func_800EA714(); /* extern */ +void func_800EA8E0(); /* extern */ +void func_8016C900(); /* extern */ +void func_8016CD50(s32); /* extern */ +void func_80179060(); /* extern */ +void func_8017BDC0(); /* extern */ +void func_80184D70(); /* extern */ +void obControllerInit(); /* extern */ + +extern s32 D_800A81F4; +extern s32 D_800A8204; +extern Unknown0 D_800A8210; +extern Unknown1 D_800ABD80; +extern Unknown1 D_800E9C08; +extern s8 D_800A8213; +extern u8 D_800AEF98; +extern s8 D_800AEF99; +extern s8 D_800AEF9A; +extern s32 D_800AEF9C; +extern s8 D_800AEFA0; +extern s32 D_800AEFA4; +extern s8 D_800C4808; +extern s32 D_800C4BCC; +extern s8 D_800C4CE4; +extern s8 D_800E7A0C; +extern s8 D_800E810C; +extern s8 D_800E82C4; +extern s32 D_800EB8F0; +extern s32 D_8018FDC0; +extern s32 D_80190F10; +extern s32 D_80243DB0; + +extern OSContPad __GLOBAL_CONTROLLER_DATA_COPY[4]; +extern struct { + // s32 field_0x0; + // s32 field_0x4; + // s32 field_0x8; + OSContPad* field_0xc[4]; +} D_800C47F0; + +extern u16 __MAIN_START_BUT_CHECK; +extern s16 __MAIN_START_BUT_STATE; + +extern void func_8007284C(u16); +extern void func_8016AF80(); +extern void func_80197B70(); + +extern struct { + s8 field_0x0; + s8 field_0x1; + s8 field_0x2; +} D_800A81F0; + +DECLARE_SEGMENT(segment_song); +DECLARE_SEGMENT(segment_obdata); + INCLUDE_ASM(const s32, "main", obMain); +// void obMain(void* arg0) { +// s32 i; + +// osAiSetFrequency(32000); + +// func_8008A1B0(); +// bzero(func_800E9C20, (u8*)0x80400000 - (u8*)&func_800E9C20); + +// obControllerInit(); +// D_800E82C4 = func_8008A260(); + +// for(i = 0; i < 4; i++) +// D_800C47F0.field_0xc[i] = &__GLOBAL_CONTROLLER_DATA_COPY[i]; + +// // i = 3; +// // var_v1 = &D_800C47FC; +// // var_v0 = &__GLOBAL_CONTROLLER_DATA_COPY[3]; +// // do { +// // *var_v1 = var_v0; +// // var_v1 -= 4; +// // i -= 1; +// // var_v0 -= 6; +// // } while (i >= 0); + +// D_800AEF9A = 0; +// __set_fp_8008A660(func_8007284C); +// func_8008A040(); + +// osInvalICache(SEGMENT_TEXT_START(segment_song), SEGMENT_TEXT_SIZE(segment_song)); +// osInvalDCache( +// SEGMENT_DATA_START(segment_song), +// SEGMENT_RODATA_END(segment_song) - SEGMENT_DATA_START(segment_song) +// ); +// __calls_romCopy_8009DA50( +// SEGMENT_ROM_START(segment_song), +// SEGMENT_VRAM_START(segment_song), +// SEGMENT_ROM_SIZE(segment_song) +// ); +// if (SEGMENT_BSS_START(segment_song) != SEGMENT_BSS_END(segment_song)) { +// bzero(SEGMENT_BSS_START(segment_song), SEGMENT_BSS_SIZE(segment_song)); +// } + +// func_800E9CEC(); +// func_800E9C20(); + +// MusSetMasterVolume(MUSFLAG_EFFECTS, 0x67FF); +// MusSetMasterVolume(MUSFLAG_SONGS, 0x7FFF); + +// D_800AEF98 = 0; +// while(true) { +// func_800EA714(); +// __initialize_song_mem(); + +// osInvalICache(SEGMENT_TEXT_START(segment_obdata), SEGMENT_TEXT_SIZE(segment_obdata)); +// osInvalDCache( +// SEGMENT_DATA_START(segment_obdata), +// SEGMENT_RODATA_END(segment_obdata) - SEGMENT_DATA_START(segment_obdata) +// ); +// __calls_romCopy_8009DA50( +// SEGMENT_ROM_START(segment_obdata), +// SEGMENT_VRAM_START(segment_obdata), +// SEGMENT_ROM_SIZE(segment_obdata) +// ); +// if (SEGMENT_BSS_START(segment_obdata) != SEGMENT_BSS_END(segment_obdata)) { +// bzero(SEGMENT_BSS_START(segment_obdata), SEGMENT_BSS_SIZE(segment_obdata)); +// } +// bzero(SEGMENT_BSS_START(segment_obdata), SEGMENT_BSS_SIZE(segment_obdata)); + +// func_80089AB0(&D_800A8204, 3); +// set_swap_buffer_func(__calls_osViSwapBuffer_8007307C); + +// bzero(D_800A81C0, 0x30); +// D_800A81F0.field_0x0 = 0; +// // D_800A81F0.field_0x1 = 0; +// // D_800A81F0.field_0x2 = 0; + +// D_800A8210.field_0x0 = 0; +// D_800A8210.field_0x1 = 0; +// D_800A8210.field_0x2 = 0; +// D_800A8213 = 0; +// D_800E7A0C = 1; + +// D_800C4808 = 0; +// D_800E810C = 0; +// D_800C4CE4 = 1; +// D_800AEFA0 = 0; +// D_800A81F4 = 0; +// D_800AEFA4 = D_800C4BCC; +// if (D_800AEF98 != 3) { +// D_800E9C08 = D_800ABD80; +// } +// D_800AEF98 = 0; +// D_800AEF99 = 0; + +// func_800727D8(); + +// func_80070C60(&D_80243DB0, (u8*)0x80400000 - (u8*)&D_80243DB0); + +// func_8009DAEC(); +// func_80079380(); +// func_80072710(); + +// __calls_copy_controller_data(); +// if (__MAIN_START_BUT_CHECK & 0x1000) { +// __MAIN_START_BUT_STATE = 0x18; +// } else { +// __MAIN_START_BUT_STATE = 9; +// } + +// func_80179060(); +// func_800EA8E0(); +// func_80173610(); +// func_80073164(0, 8, 2, 0x40, 0x40, 0x100, 0x1000); +// D_800AEF9C = 0; +// D_800C4B20 = 0; +// D_800A8213 = 0; +// D_800A8210.field_0x0 = 0; +// D_800A8210.field_0x1 = 0; +// D_800A8210.field_0x2 = 0; +// __set_obPtrPtrDisplayList(&obPtrDisplayList); +// D_8018FDC0 = 0; +// func_8017BDC0(); +// func_80184D70(); +// func_8016C900(); + +// bzero(D_80197168, 0x10); +// func_800746C8(); +// func_800749C0(0xE); +// func_800764E0(); + +// if (__MAIN_NOT_NULL_INF_LOOP != 0) +// while(true); + +// func_80072900(); +// __set_black(); +// __set_vi_mode(2); +// func_8016CD50(0); +// __set_black(); +// func_800728BC(); +// __calls_loads_overlay_array(); +// func_80072900(); +// __set_black(); +// __dma_load_loop(5); +// __set_vi_mode(2); +// func_8016CD50(0); +// __set_black(); + +// do { +// __dma_load_loop(1); +// } while (func_80073F58() != 0); + +// __initialize_song_mem(); +// MusStop(MUSFLAG_SONGS | MUSFLAG_EFFECTS, 8); +// while (MusAsk(MUSFLAG_SONGS | MUSFLAG_EFFECTS)) +// __dma_load_loop(1); +// } +// } + + INCLUDE_ASM(const s32, "main", func_80072398); /* 2B10 80072710 */ @@ -85,7 +346,7 @@ loop_2: } -extern u8 D_800AEF9A; +extern s8 D_800AEF9A; void func_8007284C(u16 __unused) { const u16 pattern_a = CONT_A | CONT_B | CONT_L | CONT_START; @@ -240,7 +501,7 @@ void func_8007328C(void) { D_800AEE72 = 2; bzero(&D_800A81C0, 0x30); - D_800A81F0 = 0; + D_800A81F0.field_0x0 = 0; } /* 377C 8007337C */