From 9cb88fdb31ed711d2fc9dfd641a01833f1d3b3c9 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Wed, 3 Feb 2021 15:12:27 -0500 Subject: [PATCH] main attempt --- .../d_com/d_com_inf_game/asm/func_80030244.s | 2 +- .../d/d_com/d_com_inf_game/d_com_inf_game.h | 1 + include/dvd/dvd.h | 2 +- include/m_Do/m_Do_main/asm/func_80006454.s | 2 +- include/m_Do/m_Do_main/m_Do_main.h | 1 - include/os/OS.h | 6 +- include/variables.h | 12 ++-- src/d/d_com/d_com_inf_game.cpp | 3 +- src/m_Do/m_Do_machine_exception.cpp | 4 +- src/m_Do/m_Do_main.cpp | 62 ++++++++++++++++++- 10 files changed, 77 insertions(+), 18 deletions(-) diff --git a/include/d/d_com/d_com_inf_game/asm/func_80030244.s b/include/d/d_com/d_com_inf_game/asm/func_80030244.s index e342b05e4d2..76e8fd517d3 100644 --- a/include/d/d_com/d_com_inf_game/asm/func_80030244.s +++ b/include/d/d_com/d_com_inf_game/asm/func_80030244.s @@ -185,7 +185,7 @@ /* 8003049C 0002D3DC 38 E0 00 40 */ li r7, 0x40 /* 800304A0 0002D3E0 48 33 18 C1 */ bl func_80361D60 /* 800304A4 0002D3E4 7F E3 FB 78 */ mr r3, r31 -/* 800304A8 0002D3E8 4B FF C7 3D */ bl dComIfG_inf_c_NS_ct +/* 800304A8 0002D3E8 4B FF C7 3D */ bl ct__13dComIfG_inf_cFv /* 800304AC 0002D3EC 7F E3 FB 78 */ mr r3, r31 /* 800304B0 0002D3F0 39 61 00 20 */ addi r11, r1, 0x20 /* 800304B4 0002D3F4 48 33 1D 75 */ bl _restgpr_29 diff --git a/include/d/d_com/d_com_inf_game/d_com_inf_game.h b/include/d/d_com/d_com_inf_game/d_com_inf_game.h index 97bb120e97e..60704a170d1 100644 --- a/include/d/d_com/d_com_inf_game/d_com_inf_game.h +++ b/include/d/d_com/d_com_inf_game/d_com_inf_game.h @@ -217,6 +217,7 @@ private: // NEEDS TO BE FIXED class dComIfG_inf_c { public: dComIfG_inf_c(void); + void ct(void); // temp until we map the item short function names item_func& getPlayGiveItem() { return play.getGiveItem(); } diff --git a/include/dvd/dvd.h b/include/dvd/dvd.h index e88d5709fbc..bd47a5eb272 100644 --- a/include/dvd/dvd.h +++ b/include/dvd/dvd.h @@ -74,7 +74,7 @@ extern "C" { s32 DVDOpen(const char*, DVDFileInfo*); s32 DVDClose(DVDFileInfo*); void DVDReadPrio(DVDFileInfo*, void*, s32, s32, s32); -void DVDGetCurrentDiskID(void); +DVDDiskID* DVDGetCurrentDiskID(void); s32 DVDFastOpen(long, DVDFileInfo*); int DVDGetCommandBlockStatus(DVDCommandBlock*); s32 DVDReadAsyncPrio(DVDFileInfo*, void*, long, long, DVDCallback, long); diff --git a/include/m_Do/m_Do_main/asm/func_80006454.s b/include/m_Do/m_Do_main/asm/func_80006454.s index c8757b83a12..be965eb9dd5 100644 --- a/include/m_Do/m_Do_main/asm/func_80006454.s +++ b/include/m_Do/m_Do_main/asm/func_80006454.s @@ -51,7 +51,7 @@ lbl_800064A8: lbl_80006514: /* 80006514 00003454 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 80006518 00003458 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l -/* 8000651C 0000345C 48 02 66 C9 */ bl dComIfG_inf_c_NS_ct +/* 8000651C 0000345C 48 02 66 C9 */ bl ct__13dComIfG_inf_cFv /* 80006520 00003460 88 0D 80 00 */ lbz r0, lbl_80450580-_SDA_BASE_(r13) /* 80006524 00003464 7C 00 07 75 */ extsb. r0, r0 /* 80006528 00003468 40 80 00 40 */ bge lbl_80006568 diff --git a/include/m_Do/m_Do_main/m_Do_main.h b/include/m_Do/m_Do_main/m_Do_main.h index 69cf8cb13a1..8120beee1f2 100644 --- a/include/m_Do/m_Do_main/m_Do_main.h +++ b/include/m_Do/m_Do_main/m_Do_main.h @@ -36,7 +36,6 @@ extern HeapCheck lbl_803D32E0[8]; // RootHeapCheck // extern HeapCheck lbl_803D33A8; // J2dHeapCheck // extern HeapCheck lbl_803D33D0; // HostioHeapCheck // extern HeapCheck lbl_803D33F8; // CommandHeapCheck -extern s8 lbl_80450580[4]; extern u8 lbl_80450B1A[2]; extern u8 lbl_80450B18; extern u8 lbl_80450588[8]; diff --git a/include/os/OS.h b/include/os/OS.h index 52354b8278f..5b5bba53069 100644 --- a/include/os/OS.h +++ b/include/os/OS.h @@ -133,7 +133,7 @@ OSThread* OSGetCurrentThread(void); s32 OSSuspendThread(OSThread* thread); s32 OSSetThreadPriority(OSThread* thread, u32 pri); s32 OSGetThreadPriority(OSThread* thread); -s32 OSCreateThread(OSThread* thread, void* (*func)(void*), void* param, void* stack, u32 stackSize, +s32 OSCreateThread(OSThread* thread, void* func, void* param, void* stack, u32 stackSize, int param_6, int param_7); void OSCancelThread(OSThread* thread); void OSDetachThread(OSThread* thread); @@ -149,7 +149,7 @@ BOOL OSSendMessage(OSMessageQueue* queue, OSMessage message, int flags); BOOL OSJamMessage(OSMessageQueue* queue, OSMessage message, int flags); s32 OSGetConsoleType(void); -s32 OSGetResetCode(void); +u32 OSGetResetCode(void); u32 OSGetSoundMode(void); void OSSetSoundMode(OSSoundMode mode); @@ -176,7 +176,7 @@ u32 OSGetArenaHi(); u32 OSInitAlloc(u32 low, u32 high, int param_3); void OSSetArenaLo(u32 param_1); void OSSetArenaHi(u32 param_1); -void OSAllocFromArenaLo(u32 size, int alignment); +void* OSAllocFromArenaLo(u32 size, int alignment); // void OSCancelAlarm(OSAlarm *alarm); diff --git a/include/variables.h b/include/variables.h index 7de1c1b115a..713834892ce 100644 --- a/include/variables.h +++ b/include/variables.h @@ -35,7 +35,7 @@ extern u8 lbl_80450C28; extern u8 lbl_80450C34; extern u8 lbl_80450B24; extern u8 lbl_80450B1C; -extern s8 lbl_80450580[4]; +extern s8 lbl_80450580; // extern u8 lbl_80450B1A; struct JUTGamePad; extern JUTGamePad* m_gamePad[4]; @@ -46,12 +46,12 @@ extern u8 lbl_80450B34; extern u8 lbl_80450B00; extern u8 lbl_80450C80; extern u8 LOAD_COPYDATE__FPv; -extern u8 lbl_803D3420; -extern u8 lbl_80450B0C; +extern u32 lbl_803D3420[8192]; +extern u32 lbl_80450B0C; // struct ResetData; -extern u8 lbl_80450B08; -extern u8 lbl_803DB420; -extern u8 main01__Fv; +extern u32 lbl_80450B08; +extern OSThread lbl_803DB420; +//extern u8 main01__Fv; extern u8 lbl_803BB598; extern u8 lbl_803A6F88; extern u8 lbl_803BB588; diff --git a/src/d/d_com/d_com_inf_game.cpp b/src/d/d_com/d_com_inf_game.cpp index aef47499e3c..4126f8d584d 100644 --- a/src/d/d_com/d_com_inf_game.cpp +++ b/src/d/d_com/d_com_inf_game.cpp @@ -281,6 +281,7 @@ void setBottleNum__24dSv_player_item_record_cFUcUc(u8, u8); void setCollect__20dSv_player_collect_cFiUc(int, u8); void setWarpItemData__14dComIfG_play_cFPCc4cXyzsScUcUc(void); void* memset(void* dest, int ch, u32 count); +void ct__13dComIfG_inf_cFv(void); } // memset first arg is wrong @@ -474,7 +475,7 @@ u32 dComIfG_play_c::getTimerPtr(void) { // ct__13dComIfG_inf_cFv // dComIfG_inf_c::ct(void) -asm void dComIfG_inf_c_NS_ct(void) { +asm void dComIfG_inf_c::ct(void) { nofralloc #include "d/d_com/d_com_inf_game/asm/func_8002CBE4.s" } diff --git a/src/m_Do/m_Do_machine_exception.cpp b/src/m_Do/m_Do_machine_exception.cpp index 31e76fe7c07..e6fe4a1a109 100644 --- a/src/m_Do/m_Do_machine_exception.cpp +++ b/src/m_Do/m_Do_machine_exception.cpp @@ -29,8 +29,8 @@ void print_f(void); // additional symbols needed for m_Do_machine_exception.cpp // autogenerated by split.py v0.4 at 2021-01-31 21:28:06.026523 extern u8 lbl_80374460; -extern u8 lbl_80450B08; -extern u8 lbl_80450B0C; +extern u32 lbl_80450B08; +extern u32 lbl_80450B0C; extern u8 lbl_80450B10; extern u8 lbl_80450B14; extern u8 lbl_80450C28; diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 757c2e9fb9b..4a825acfcf9 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -17,6 +17,7 @@ extern u8 lbl_80451A08; extern u8 lbl_80451A0C; extern u8 lbl_80451A10; extern u8 lbl_80451A18; +extern u8 lbl_803D0000; // extern char lbl_803739A0[0x310]; extern char lbl_803739A0; @@ -54,6 +55,8 @@ void mDoMemCd_Ctrl_c_NS_update(void); void memcpy(void*, const void*, int); void read__8mDoCPd_cFv(void); void version_check__Fv(void); +void main01__Fv(void); +void ct__13dComIfG_inf_cFv(void); } void version_check(void) { @@ -223,7 +226,7 @@ const char* lbl_80373C9F = "Command"; const char* lbl_80373CA7 = "ƒRƒ}ƒ“ƒh"; void debug(void) { - if (lbl_80450580[0]) { + if (lbl_80450580) { if (lbl_80450B1A[0]) { CheckHeap(2); } @@ -351,7 +354,62 @@ asm void main01(void) { #endif #ifdef NONMATCHING -void main(void) {} +void main(void) { + s32 current_thread_priority; + u32 test; + u32 resetCode; + + OSThread* current_thread = OSGetCurrentThread(); + test = lbl_803D3420[0]; + OSTime current_time = OSGetTime(); + lbl_80450B0C = (current_time >> 0x20); + lbl_80450B08 = test; + + OSReportInit__Fv(); + version_check__Fv(); + m_Do_Reset_NS_mDoRst_NS_mResetData = (ResetData *)OSAllocFromArenaLo(0x18,4); + if (!m_Do_Reset_NS_mDoRst_NS_mResetData) { + do { + + } while (true); + } + + resetCode = OSGetResetCode(); + if (!resetCode) { + m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x0 = 0; + m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x4 = 0; + m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x4 = 0; + m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x8 = 0; + m_Do_Reset_NS_mDoRst_NS_mResetData->pad_index = -1; + m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x12 = 0; + m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x13 = 0; + m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x14 = 0; + m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x15 = 0; + m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x10 = 0; + m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x11 = 0; + } + + g_dComIfG_gameInfo.ct(); + + if (lbl_80450580 < 0) { + DVDDiskID* disk_id = DVDGetCurrentDiskID(); + if (disk_id->game_version > 0x90) { + lbl_80450580 = 0; + } else { + if (disk_id->game_version > 0x80) { + resetCode = OSGetConsoleType(); + lbl_80450580 = (resetCode >> 0x1C) & 1; + } + lbl_80450580 = 1; + } + } + + current_thread_priority = OSGetThreadPriority(current_thread); + OSCreateThread(&lbl_803DB420,main01__Fv, 0, &lbl_803DB420, 0x8000, current_thread_priority, 0); + OSResumeThread(&lbl_803DB420); + OSSetThreadPriority(current_thread, 0x1F); + OSSuspendThread(current_thread); +} #else asm void main(void) { nofralloc