#include "common.h" #include "libmus.h" #include "nu/nusys.h" #include "os_convert.h" extern u16 D_800AEDE2; 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 __initialize_song_mem(); /* extern */ void __set_obPtrPtrDisplayList(Gfx**); /* 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_8009DAEC(); /* extern */ void func_800E9CEC(); /* extern */ void func_800EA714(); /* extern */ void func_800EA8E0(); /* extern */ void func_8016C900(); /* extern */ void func_80179060(); /* extern */ void func_8017BDC0(); /* extern */ void func_80184D70(); /* extern */ extern s32 D_800A81F4; extern s32 D_800A8204; extern Unknown1 D_800ABD80; extern Unknown1 D_800E9C08; extern u8 D_800AEF98; extern s8 D_800AEF99; extern s8 D_800AEF9A; extern s8 D_800AEFA0; extern s32 D_800AEFA4; extern s8 D_800C4808; 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 Arg_800712C4* D_800AEF9C; extern s32 D_800A81F4; extern s32 D_800A81F8; extern s8 D_800AEF9A; extern void* D_800C4BB8; 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 void func_8007328C(); extern u8 __reset_compared_osTvType(); extern struct { s8 field_0x0; s8 field_0x1; s8 field_0x2; } D_800A81F0; extern void* D_800E8210; DECLARE_SEGMENT(segment_song); DECLARE_SEGMENT(segment_obdata); INCLUDE_ASM(const s32, "main", func_80070C60); INCLUDE_ASM(const s32, "main", AddHeap); INCLUDE_ASM(const s32, "main", func_80070F14); INCLUDE_ASM(const s32, "main", __virtual_mem_alloc); INCLUDE_ASM(const s32, "main", func_800710DC); /* 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); INCLUDE_ASM(const s32, "main", func_800713EC); INCLUDE_ASM(const s32, "main", HIsAllocatedPointer); INCLUDE_ASM(const s32, "main", func_80071634); INCLUDE_ASM(const s32, "main", func_8007163C); INCLUDE_ASM(const s32, "main", func_80071644); INCLUDE_ASM(const s32, "main", func_80071950); INCLUDE_ASM(const s32, "main", func_800719E8); INCLUDE_ASM(const s32, "main", func_80071A3C); INCLUDE_ASM(const s32, "main", func_80071A74); INCLUDE_ASM(const s32, "main", func_80071B9C); INCLUDE_ASM(const s32, "main", func_80071C04); INCLUDE_ASM(const s32, "main", func_80071E74); INCLUDE_ASM(const s32, "main", obMain); INCLUDE_ASM(const s32, "main", func_80072398); /* 2B10 80072710 */ void func_80072710(void) { if ((u32)(osTvType - 1) >= OS_TV_TYPE_MPAL) { while(1); } } /* 2B38 80072738 */ void __set_vi_mode(s32 arg0) { switch (osTvType) { case OS_TV_NTSC: switch (arg0) { case 2: osViSetMode(&osViModeNtscLan1); break; case 9: osViSetMode(&osViModeNtscHpf1); break; } break; case OS_TV_MPAL: switch (arg0) { case 2: osViSetMode(&osViModeMpalLan1); break; case 9: osViSetMode(&osViModeMpalHpf1); break; } break; } } /* 2BD8 800727D8 */ void func_800727D8(void) { s16* var_a0; s16* var_a2; s16* var_a3; s16* var_v1; s32 var_a1; s32 var_t0; var_t0 = 0; var_a3 = &D_800AEF10; var_a2 = &D_800AEE90; do { var_a1 = 0; var_a0 = var_a2; var_v1 = var_a3; loop_2: *var_v1 = 0; *var_a0 = 0; var_a0 += 1; var_a1 += 1; var_v1 += 1; if (var_a1 < 0x10) { goto loop_2; } var_a3 += 0x10; var_t0 += 1; var_a2 += 0x10; } while (var_t0 < 4); bzero(__GLOBAL_CONTROLLER_DATA_COPY, sizeof(__GLOBAL_CONTROLLER_DATA_COPY)); } void func_8007284C(u16 __unused) { const u16 pattern_a = CONT_A | CONT_B | CONT_L | CONT_START; const u16 pattern_b = CONT_A | CONT_B | CONT_G | CONT_START; if ((D_800AEF9A & 1) && !(D_800AEF9A & 4)) { if (D_800AEF9A & 2) { if (nuContData[0].button == 0) { D_800AEF9A = D_800AEF9A & 0xFD; } } else if (nuContData[0].button == pattern_a || nuContData[0].button == pattern_b) { D_800AEF9A = D_800AEF9A | 6; } } } u8 func_800728BC(void) { s32 mask; u8 temp_s0; mask = osSetIntMask(OS_IM_NONE); temp_s0 = D_800AEF9A | 1; D_800AEF9A = temp_s0; osSetIntMask(mask); return temp_s0; } u8 func_80072900(void) { s32 mask; u8 temp_s0; mask = osSetIntMask(OS_IM_NONE); temp_s0 = D_800AEF9A & 0xFA; D_800AEF9A = temp_s0; osSetIntMask(mask); return temp_s0; } s32 func_80072944(void) { u8 temp_s0; s32 mask; mask = osSetIntMask(OS_IM_NONE); temp_s0 = D_800AEF9A; osSetIntMask(mask); return temp_s0 & 4; } INCLUDE_ASM(const s32, "main", __calls_copy_controller_data); /* 347C 8007307C */ void __calls_osViSwapBuffer_8007307C(void** buffers) { u8 prev; D_800C4BB8 = buffers[3]; prev = __reset_compared_osTvType(); if (prev == OS_TV_TYPE_MPAL) { switch(osTvType) { case OS_TV_TYPE_NTSC: osViSetMode(&osViModeNtscHpf1); break; case OS_TV_TYPE_MPAL: osViSetMode(&osViModeMpalHpf1); break; } } else if (prev == OS_TV_TYPE_NTSC) { if (osTvType == prev) goto ntsc; if(osTvType == OS_TV_TYPE_MPAL) goto pal; goto next; ntsc: osViSetMode(&osViModeNtscLan1); goto next; pal: osViSetMode(&osViModeMpalLan1); goto next; } next: if (prev != OS_TV_TYPE_PAL) osViSetSpecialFeatures(OS_VI_DIVOT_ON | OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF | OS_VI_GAMMA_DITHER_OFF); osViSwapBuffer(buffers[3]); } /* 3564 80073164 */ void func_80073164(u8 arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6) { if (arg0 == 0) { if ((arg1 << 0x10) >= 0) { D_800C4C08 = arg1; } if ((arg2 << 0x10) >= 0) { D_800E7D68 = arg2; } if ((arg3 << 0x10) >= 0) { D_800C4A18 = arg3; } if ((arg4 << 0x10) >= 0) { D_800E7A1C = arg4; } if ((arg5 << 0x10) >= 0) { D_800C4BCA = arg5; } if ((arg6 << 0x10) >= 0) { D_800C4AD8 = arg6; } } else { D_800C4C08 += arg1; D_800E7D68 += arg2; D_800C4A18 += arg3; D_800E7A1C += arg4; D_800C4BCA += arg5; D_800C4AD8 += arg6; } D_800AEE72 = 2; } /* 368C 8007328C */ void func_8007328C(void) { s32 index; for(index = 0; index < 2; index++) { func_800712C4(D_800A81C0[index].field_0x0); func_800712C4(D_800A81C0[index].field_0x4); func_800712C4(D_800A81C0[index].field_0x8); func_800712C4(D_800A81C0[index].field_0xc); func_800712C4(D_800A81C0[index].field_0x10); func_800712C4(D_800A81C0[index].field_0x14); } D_800C4C08 = 0; D_800E7D68 = 0; D_800C4A18 = 0; D_800E7A1C = 0; D_800C4BCA = 0; D_800C4AD8 = 0; D_800AEE72 = 2; bzero(&D_800A81C0, 0x30); D_800A81F0.field_0x0 = 0; } /* 377C 8007337C */ void func_8007337C(void) { D_800A8213 = 1; } /* 378C 8007338C */ u8 func_8007338C(void) { return D_800A8213; } void func_80073398(void) { nuGfxTaskAllEndWait(); func_8007328C(); D_800A8213 = 0; D_800A8212 = 0; D_800A8211 = 0; D_800A8210 = 0; D_800AEF9C = func_800712C4(D_800AEF9C); nuGfxZBuffer = 0; } INCLUDE_ASM(const s32, "main", func_800733F8); /* 3BA0 800737A0 */ void func_800737A0(void) { gDPPipeSync(obPtrDisplayList++); gSPSegment(obPtrDisplayList++, 0, 0); gDPPipeSync(obPtrDisplayList++); gSPDisplayList(obPtrDisplayList++, DISPLAY_LIST_80186E70); gSPDisplayList(obPtrDisplayList++, DISPLAY_LIST_801869C8); } /* 3C2C 8007382C */ void func_8007382C(void) { if (__get_compared_osTvType() != 0) return; if (D_800A8213 != 0) { gDPSetDepthImage(obPtrDisplayList++, OS_K0_TO_PHYSICAL(nuGfxZBuffer)); gDPPipeSync(obPtrDisplayList++); gDPPipeSync(obPtrDisplayList++); gDPSetCycleType(obPtrDisplayList++, G_CYC_FILL); gDPPipeSync(obPtrDisplayList++); gDPSetRenderMode(obPtrDisplayList++, G_RM_NOOP, G_RM_NOOP2); gDPSetColorImage(obPtrDisplayList++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, OS_K0_TO_PHYSICAL(nuGfxZBuffer)); gDPSetFillColor(obPtrDisplayList++, 0xFFFCFFFC); gDPPipeSync(obPtrDisplayList++); gDPFillRectangle(obPtrDisplayList++, 0, 0, 319, 239); gDPPipeSync(obPtrDisplayList++); gDPPipeSync(obPtrDisplayList++); } gDPPipeSync(obPtrDisplayList++); gDPPipeSync(obPtrDisplayList++); gDPSetCycleType(obPtrDisplayList++, G_CYC_FILL); gDPPipeSync(obPtrDisplayList++); gDPSetRenderMode(obPtrDisplayList++, G_RM_NOOP, G_RM_NOOP2); gDPSetColorImage(obPtrDisplayList++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, osVirtualToPhysical(nuGfxCfb_ptr)); gDPSetFillColor(obPtrDisplayList++, 0x00010001); gDPPipeSync(obPtrDisplayList++); gDPFillRectangle(obPtrDisplayList++, 0, 0, 319, 239); gDPPipeSync(obPtrDisplayList++); gSPDisplayList(obPtrDisplayList++, DISPLAY_LIST_801869C8); } INCLUDE_ASM(const s32, "main", func_80073AE4); /* 3FD0 80073BD0 */ void func_80073BD0(void) { osViSetSpecialFeatures(OS_VI_DIVOT_ON | OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF | OS_VI_GAMMA_DITHER_OFF); gDPPipeSync(obPtrDisplayList++); gDPSetColorDither(obPtrDisplayList++, G_CD_MAGICSQ); gDPSetAlphaDither(obPtrDisplayList++, G_AD_DISABLE); } INCLUDE_ASM(const s32, "main", func_80073C48); INCLUDE_ASM(const s32, "main", func_80073CB0); /* 42D8 80073ED8 */ void func_80073ED8(void) { if (D_800A81F4 == 0) { __MAYBE_SONG_800EB0B0.index = 0; __MAYBE_SONG_800EB100.index = 0; __MAYBE_SONG_800EB150.index = 0; __MAYBE_SONG_800EB1A0.index = 0; __MAYBE_SONG_800EB1F0.index = 0; __MAYBE_SONG_800EB240.index = 0; __MAYBE_SONG_800EB290.index = 0; MusStop(MUSFLAG_SONGS | MUSFLAG_EFFECTS, 12); D_800A81F4 = 12; D_800A81F8 = nuScRetraceCounter; } } INCLUDE_ASM(const s32, "main", func_80073F58); /* 43D4 80073FD4 */ void __initialize_song_mem(void) { s32 mask; s32 count; mask = osSetIntMask(OS_IM_NONE); for(count = 0; count < 7; count++) { __MAYBE_SONG_ARRAY_800A8218[count]->index = 0; __MAYBE_SONG_ARRAY_800A8218[count]->field_0x30 = 0; __MAYBE_SONG_ARRAY_800A8218[count]->field_0x34 = 0; __MAYBE_SONG_ARRAY_800A8218[count]->field_0x38 = 0; __MAYBE_SONG_ARRAY_800A8218[count]->field_0x3c = 0; __MAYBE_SONG_ARRAY_800A8218[count]->field_0x40 = 0; __MAYBE_SONG_ARRAY_800A8218[count]->field_0x4c = 0; } osSetIntMask(mask); } INCLUDE_ASM(const s32, "main", func_80074050); INCLUDE_ASM(const s32, "main", func_80074080); INCLUDE_ASM(const s32, "main", func_800740F0); INCLUDE_ASM(const s32, "main", func_800741A8); INCLUDE_ASM(const s32, "main", func_8007422C); INCLUDE_ASM(const s32, "main", func_800742F4); INCLUDE_ASM(const s32, "main", func_80074494);