From 872975212d43825faebdfc7d2a5946426c93542a Mon Sep 17 00:00:00 2001 From: Sean Miller Date: Wed, 8 Apr 2026 17:40:43 +0100 Subject: [PATCH 01/12] 100% m_state.cpp --- config/SOUE01/symbols.txt | 8 ++++---- configure.py | 2 +- include/m/m3d/m_state.h | 17 +++++++++++++++++ src/m/m3d/m_state.cpp | 11 +++++++++++ 4 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 include/m/m3d/m_state.h create mode 100644 src/m/m3d/m_state.cpp diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 6932abb4..c207529c 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -17687,10 +17687,10 @@ __sinit_\m_shadow_cpp = .text:0x802EDF20; // type:function size:0xC scope:local __ct__Q23m3d6smdl_cFv = .text:0x802EDF30; // type:function size:0x4C __dt__Q23m3d6smdl_cFv = .text:0x802EDF80; // type:function size:0x58 create__Q23m3d6smdl_cFQ34nw4r3g3d6ResMdlP12mAllocator_cUliPUl = .text:0x802EDFE0; // type:function size:0xB4 -fn_802EE0A0 = .text:0x802EE0A0; // type:function size:0x4 -fn_802EE0B0 = .text:0x802EE0B0; // type:function size:0x4 -fn_802EE0C0 = .text:0x802EE0C0; // type:function size:0x4 -fn_802EE0D0 = .text:0x802EE0D0; // type:function size:0x8 +fn_802EE0A0__Fv = .text:0x802EE0A0; // type:function size:0x4 +fn_802EE0B0__Fv = .text:0x802EE0B0; // type:function size:0x4 +fn_802EE0C0__Fv = .text:0x802EE0C0; // type:function size:0x4 +fn_802EE0D0__Fv = .text:0x802EE0D0; // type:function size:0x8 __ct__12mAllocator_cFv = .text:0x802EE0E0; // type:function size:0x44 __dt__12mAllocator_cFv = .text:0x802EE130; // type:function size:0x58 attach__12mAllocator_cFPQ23EGG4Heapi = .text:0x802EE190; // type:function size:0x50 diff --git a/configure.py b/configure.py index 572c0d5a..76b8c1d2 100644 --- a/configure.py +++ b/configure.py @@ -878,7 +878,7 @@ config.libs = [ Object(NonMatching, "m/m3d/m_shadow.cpp"), Object(Matching, "m/m3d/m_scnleaf.cpp"), Object(Matching, "m/m3d/m_smdl.cpp"), - Object(NonMatching, "m/m3d/m_state.cpp"), + Object(Matching, "m/m3d/m_state.cpp"), Object(Matching, "m/m2d.cpp"), Object(Matching, "m/m_allocator.cpp"), Object(Matching, "m/m_angle.cpp"), diff --git a/include/m/m3d/m_state.h b/include/m/m3d/m_state.h new file mode 100644 index 00000000..85bb0c5c --- /dev/null +++ b/include/m/m3d/m_state.h @@ -0,0 +1,17 @@ +#ifndef M3D_M_STATE_H +#define M3D_M_STATE_H + +namespace m3d { + +namespace mState { + +void fn_802EE0A0(); +void fn_802EE0B0(); +void fn_802EE0C0(); +bool fn_802EE0D0(); + +} // namespace mState + +} // namespace m3d + +#endif // M3D_M_STATE_H diff --git a/src/m/m3d/m_state.cpp b/src/m/m3d/m_state.cpp new file mode 100644 index 00000000..a9af09cd --- /dev/null +++ b/src/m/m3d/m_state.cpp @@ -0,0 +1,11 @@ +#include "m/m3d/m_state.h" + +void fn_802EE0A0() {} + +void fn_802EE0B0() {} + +void fn_802EE0C0() {} + +bool fn_802EE0D0() { + return true; +} From b94f0304dbbe9b3e00779fbb02373f4606bff33f Mon Sep 17 00:00:00 2001 From: Sean Miller Date: Wed, 8 Apr 2026 17:46:19 +0100 Subject: [PATCH 02/12] Fix m_state symbol names --- config/SOUE01/symbols.txt | 8 ++++---- src/m/m3d/m_state.cpp | 12 ++++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index c207529c..509a69bd 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -17687,10 +17687,10 @@ __sinit_\m_shadow_cpp = .text:0x802EDF20; // type:function size:0xC scope:local __ct__Q23m3d6smdl_cFv = .text:0x802EDF30; // type:function size:0x4C __dt__Q23m3d6smdl_cFv = .text:0x802EDF80; // type:function size:0x58 create__Q23m3d6smdl_cFQ34nw4r3g3d6ResMdlP12mAllocator_cUliPUl = .text:0x802EDFE0; // type:function size:0xB4 -fn_802EE0A0__Fv = .text:0x802EE0A0; // type:function size:0x4 -fn_802EE0B0__Fv = .text:0x802EE0B0; // type:function size:0x4 -fn_802EE0C0__Fv = .text:0x802EE0C0; // type:function size:0x4 -fn_802EE0D0__Fv = .text:0x802EE0D0; // type:function size:0x8 +fn_802EE0A0__Q23m3d6mStateFv = .text:0x802EE0A0; // type:function size:0x4 +fn_802EE0B0__Q23m3d6mStateFv = .text:0x802EE0B0; // type:function size:0x4 +fn_802EE0C0__Q23m3d6mStateFv = .text:0x802EE0C0; // type:function size:0x4 +fn_802EE0D0__Q23m3d6mStateFv = .text:0x802EE0D0; // type:function size:0x8 __ct__12mAllocator_cFv = .text:0x802EE0E0; // type:function size:0x44 __dt__12mAllocator_cFv = .text:0x802EE130; // type:function size:0x58 attach__12mAllocator_cFPQ23EGG4Heapi = .text:0x802EE190; // type:function size:0x50 diff --git a/src/m/m3d/m_state.cpp b/src/m/m3d/m_state.cpp index a9af09cd..119ace02 100644 --- a/src/m/m3d/m_state.cpp +++ b/src/m/m3d/m_state.cpp @@ -1,11 +1,15 @@ #include "m/m3d/m_state.h" -void fn_802EE0A0() {} +namespace m3d { -void fn_802EE0B0() {} +void mState::fn_802EE0A0() {} -void fn_802EE0C0() {} +void mState::fn_802EE0B0() {} -bool fn_802EE0D0() { +void mState::fn_802EE0C0() {} + +bool mState::fn_802EE0D0() { return true; } + +} From 059e07b0b6b55d8a4a935718a9f522e4274106cb Mon Sep 17 00:00:00 2001 From: Sean Miller Date: Wed, 8 Apr 2026 17:56:07 +0100 Subject: [PATCH 03/12] 100% d_state --- config/SOUE01/symbols.txt | 6 +++--- configure.py | 2 +- include/d/d_main.h | 4 ++++ src/d/d_main.cpp | 6 +++--- src/d/d_state.cpp | 30 ++++++++++++++++++++++++++++++ 5 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 src/d/d_state.cpp diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 509a69bd..66b9b74d 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -2236,9 +2236,9 @@ __sinit_\d_heap_cpp = .text:0x80054F00; // type:function size:0x30 scope:local getCurrentLanguage1__Fv = .text:0x80054F30; // type:function size:0x4 getCurrentLanguage2__Fv = .text:0x80054F40; // type:function size:0x4 getCurrentLanguage__Fv = .text:0x80054F50; // type:function size:0x38 -fn_80054F90__FUl = .text:0x80054F90; // type:function size:0x18 -fn_80054FB0__FUl = .text:0x80054FB0; // type:function size:0x24 -fn_80054FE0__FUl = .text:0x80054FE0; // type:function size:0x20 +fn_80054F90__5dMainFUl = .text:0x80054F90; // type:function size:0x18 +fn_80054FB0__5dMainFUl = .text:0x80054FB0; // type:function size:0x24 +fn_80054FE0__5dMainFUl = .text:0x80054FE0; // type:function size:0x20 Create__5dMainFv = .text:0x80055000; // type:function size:0x28 Execute__5dMainFv = .text:0x80055030; // type:function size:0x14 main01__5dMainFPv = .text:0x80055050; // type:function size:0x28 diff --git a/configure.py b/configure.py index 76b8c1d2..b7fc4aa8 100644 --- a/configure.py +++ b/configure.py @@ -463,7 +463,7 @@ config.libs = [ Object(Matching, "d/d_player_guide_colors.cpp"), Object(Matching, "d/d_rawarchive.cpp"), Object(Matching, "d/d_scene.cpp"), - Object(NonMatching, "d/d_state.cpp"), + Object(Matching, "d/d_state.cpp"), Object(Matching, "d/d_stage_parse.cpp"), Object(Matching, "d/d_sys.cpp"), Object(NonMatching, "d/d_sys_init.cpp"), diff --git a/include/d/d_main.h b/include/d/d_main.h index 57332fe9..6fc6f4c7 100644 --- a/include/d/d_main.h +++ b/include/d/d_main.h @@ -5,6 +5,10 @@ namespace dMain { +bool fn_80054F90(u32 val); +void fn_80054FB0(u32 val); +void fn_80054FE0(u32 val); + void Create(); void Execute(); void *main01(void *arg); diff --git a/src/d/d_main.cpp b/src/d/d_main.cpp index 28118b10..653f1051 100644 --- a/src/d/d_main.cpp +++ b/src/d/d_main.cpp @@ -10,11 +10,11 @@ u32 lbl_805751D0; OSTime g_InitialTime; -bool fn_80054F90(u32 val) { +bool dMain::fn_80054F90(u32 val) { return lbl_805751D0 & val; } -void fn_80054FB0(u32 val) { +void dMain::fn_80054FB0(u32 val) { u32 flags = lbl_805751D0; if (!flags) { @@ -27,7 +27,7 @@ void fn_80054FB0(u32 val) { lbl_805751D0 = flags | val; } -void fn_80054FE0(u32 val) { +void dMain::fn_80054FE0(u32 val) { lbl_805751D0 &= ~val; if (!lbl_805751D0) { diff --git a/src/d/d_state.cpp b/src/d/d_state.cpp new file mode 100644 index 00000000..12209932 --- /dev/null +++ b/src/d/d_state.cpp @@ -0,0 +1,30 @@ +#include "d/d_main.h" +#include "d/d_state.h" +#include "m/m3d/m_state.h" + +void dState::fn_80062E40() { + m3d::mState::fn_802EE0A0(); +} + +void dState::fn_80062E50() { + m3d::mState::fn_802EE0B0(); + + if (m3d::mState::fn_802EE0D0()) { + if (dMain::fn_80054F90(1)) { + dMain::fn_80054FE0(1); + } + } + else { + if (!dMain::fn_80054F90(1)) { + dMain::fn_80054FB0(1); + } + } +} + +void dState::fn_80062EB0() { + m3d::mState::fn_802EE0C0(); +} + +bool dState::fn_80062EC0() { + return m3d::mState::fn_802EE0D0(); +} From 64d62c8efe24ad304e283ea40b3ab8005887f81e Mon Sep 17 00:00:00 2001 From: Sean Miller Date: Wed, 8 Apr 2026 18:09:53 +0100 Subject: [PATCH 04/12] d_main symbol renaming --- config/SOUE01/symbols.txt | 8 ++++---- include/d/d_main.h | 6 +++--- src/d/d_main.cpp | 22 +++++++++++----------- src/d/d_state.cpp | 8 ++++---- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 66b9b74d..cb9d97dc 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -2236,9 +2236,9 @@ __sinit_\d_heap_cpp = .text:0x80054F00; // type:function size:0x30 scope:local getCurrentLanguage1__Fv = .text:0x80054F30; // type:function size:0x4 getCurrentLanguage2__Fv = .text:0x80054F40; // type:function size:0x4 getCurrentLanguage__Fv = .text:0x80054F50; // type:function size:0x38 -fn_80054F90__5dMainFUl = .text:0x80054F90; // type:function size:0x18 -fn_80054FB0__5dMainFUl = .text:0x80054FB0; // type:function size:0x24 -fn_80054FE0__5dMainFUl = .text:0x80054FE0; // type:function size:0x20 +isStopFlagSet__5dMainFUl = .text:0x80054F90; // type:function size:0x18 +setStopFlag__5dMainFUl = .text:0x80054FB0; // type:function size:0x24 +clearStopFlag__5dMainFUl = .text:0x80054FE0; // type:function size:0x20 Create__5dMainFv = .text:0x80055000; // type:function size:0x28 Execute__5dMainFv = .text:0x80055030; // type:function size:0x14 main01__5dMainFPv = .text:0x80055050; // type:function size:0x28 @@ -42183,7 +42183,7 @@ layoutEx2Heap__5dHeap = .sbss:0x805751BC; // type:object size:0x4 data:4byte layoutResHeap__5dHeap = .sbss:0x805751C0; // type:object size:0x4 data:4byte fontHeap__5dHeap = .sbss:0x805751C4; // type:object size:0x4 data:4byte HBMHeap__5dHeap = .sbss:0x805751C8; // type:object size:0x4 data:4byte -lbl_805751D0 = .sbss:0x805751D0; // type:object size:0x4 data:4byte +sStopFlags = .sbss:0x805751D0; // type:object size:0x4 data:4byte g_InitialTime = .sbss:0x805751D8; // type:object size:0x8 data:4byte m_connected__Q24dPad4ex_c = .sbss:0x805751E0; // type:object size:0x4 sInstance__13dPadManager_c = .sbss:0x805751E8; // type:object size:0x8 data:4byte diff --git a/include/d/d_main.h b/include/d/d_main.h index 6fc6f4c7..e2025659 100644 --- a/include/d/d_main.h +++ b/include/d/d_main.h @@ -5,9 +5,9 @@ namespace dMain { -bool fn_80054F90(u32 val); -void fn_80054FB0(u32 val); -void fn_80054FE0(u32 val); +bool isStopFlagSet(u32 val); +void setStopFlag(u32 val); +void clearStopFlag(u32 val); void Create(); void Execute(); diff --git a/src/d/d_main.cpp b/src/d/d_main.cpp index 653f1051..febdf279 100644 --- a/src/d/d_main.cpp +++ b/src/d/d_main.cpp @@ -7,15 +7,14 @@ #include "rvl/OS.h" -u32 lbl_805751D0; -OSTime g_InitialTime; +u32 sStopFlags; -bool dMain::fn_80054F90(u32 val) { - return lbl_805751D0 & val; +bool dMain::isStopFlagSet(u32 val) { + return sStopFlags & val; } -void dMain::fn_80054FB0(u32 val) { - u32 flags = lbl_805751D0; +void dMain::setStopFlag(u32 val) { + u32 flags = sStopFlags; if (!flags) { fManager_c::setStopProcFlags( @@ -24,13 +23,13 @@ void dMain::fn_80054FB0(u32 val) { ); } - lbl_805751D0 = flags | val; + sStopFlags = flags | val; } -void dMain::fn_80054FE0(u32 val) { - lbl_805751D0 &= ~val; +void dMain::clearStopFlag(u32 val) { + sStopFlags &= ~val; - if (!lbl_805751D0) { + if (!sStopFlags) { fManager_c::maskStopProcFlags(fManager_c::PROC_FLAG_DRAW); } } @@ -54,7 +53,8 @@ void *dMain::main01(void *arg) { #define STACK_SIZE 0xF000 -static OSThread MAIN_THREAD; +OSTime g_InitialTime; +OSThread MAIN_THREAD; void main(int argc, char **argv) { u8 pStackBase[STACK_SIZE] __attribute__((aligned(32))); diff --git a/src/d/d_state.cpp b/src/d/d_state.cpp index 12209932..1d5417cc 100644 --- a/src/d/d_state.cpp +++ b/src/d/d_state.cpp @@ -10,13 +10,13 @@ void dState::fn_80062E50() { m3d::mState::fn_802EE0B0(); if (m3d::mState::fn_802EE0D0()) { - if (dMain::fn_80054F90(1)) { - dMain::fn_80054FE0(1); + if (dMain::isStopFlagSet(1)) { + dMain::clearStopFlag(1); } } else { - if (!dMain::fn_80054F90(1)) { - dMain::fn_80054FB0(1); + if (!dMain::isStopFlagSet(1)) { + dMain::setStopFlag(1); } } } From a98a0c89a6967b8059fa3d5f20db5a4a52e4230c Mon Sep 17 00:00:00 2001 From: Sean Miller Date: Wed, 8 Apr 2026 18:11:30 +0100 Subject: [PATCH 05/12] Run clang-format on edited files --- include/d/d_state.h | 2 +- src/d/d_state.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/d/d_state.h b/include/d/d_state.h index b6384b7d..f539ea2b 100644 --- a/include/d/d_state.h +++ b/include/d/d_state.h @@ -8,6 +8,6 @@ void fn_80062E50(); void fn_80062EB0(); bool fn_80062EC0(); -} +} // namespace dState #endif // D_STATE_H diff --git a/src/d/d_state.cpp b/src/d/d_state.cpp index 1d5417cc..3ae48ff8 100644 --- a/src/d/d_state.cpp +++ b/src/d/d_state.cpp @@ -1,5 +1,6 @@ -#include "d/d_main.h" #include "d/d_state.h" + +#include "d/d_main.h" #include "m/m3d/m_state.h" void dState::fn_80062E40() { @@ -13,8 +14,7 @@ void dState::fn_80062E50() { if (dMain::isStopFlagSet(1)) { dMain::clearStopFlag(1); } - } - else { + } else { if (!dMain::isStopFlagSet(1)) { dMain::setStopFlag(1); } From c8b3ad05d245098ddae0f27ea5042fd47cec098e Mon Sep 17 00:00:00 2001 From: Sean Miller Date: Wed, 8 Apr 2026 18:14:55 +0100 Subject: [PATCH 06/12] m_state symbol renaming --- config/SOUE01/symbols.txt | 8 ++++---- include/m/m3d/m_state.h | 8 ++++---- src/d/d_state.cpp | 10 +++++----- src/m/m3d/m_state.cpp | 8 ++++---- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index cb9d97dc..b6e95124 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -17687,10 +17687,10 @@ __sinit_\m_shadow_cpp = .text:0x802EDF20; // type:function size:0xC scope:local __ct__Q23m3d6smdl_cFv = .text:0x802EDF30; // type:function size:0x4C __dt__Q23m3d6smdl_cFv = .text:0x802EDF80; // type:function size:0x58 create__Q23m3d6smdl_cFQ34nw4r3g3d6ResMdlP12mAllocator_cUliPUl = .text:0x802EDFE0; // type:function size:0xB4 -fn_802EE0A0__Q23m3d6mStateFv = .text:0x802EE0A0; // type:function size:0x4 -fn_802EE0B0__Q23m3d6mStateFv = .text:0x802EE0B0; // type:function size:0x4 -fn_802EE0C0__Q23m3d6mStateFv = .text:0x802EE0C0; // type:function size:0x4 -fn_802EE0D0__Q23m3d6mStateFv = .text:0x802EE0D0; // type:function size:0x8 +unkStub1__Q23m3d6mStateFv = .text:0x802EE0A0; // type:function size:0x4 +unkStub2__Q23m3d6mStateFv = .text:0x802EE0B0; // type:function size:0x4 +unkStub3__Q23m3d6mStateFv = .text:0x802EE0C0; // type:function size:0x4 +unkAlwaysTrue__Q23m3d6mStateFv = .text:0x802EE0D0; // type:function size:0x8 __ct__12mAllocator_cFv = .text:0x802EE0E0; // type:function size:0x44 __dt__12mAllocator_cFv = .text:0x802EE130; // type:function size:0x58 attach__12mAllocator_cFPQ23EGG4Heapi = .text:0x802EE190; // type:function size:0x50 diff --git a/include/m/m3d/m_state.h b/include/m/m3d/m_state.h index 85bb0c5c..0a7f0bab 100644 --- a/include/m/m3d/m_state.h +++ b/include/m/m3d/m_state.h @@ -5,10 +5,10 @@ namespace m3d { namespace mState { -void fn_802EE0A0(); -void fn_802EE0B0(); -void fn_802EE0C0(); -bool fn_802EE0D0(); +void unkStub1(); +void unkStub2(); +void unkStub3(); +bool unkAlwaysTrue(); } // namespace mState diff --git a/src/d/d_state.cpp b/src/d/d_state.cpp index 3ae48ff8..f9d09349 100644 --- a/src/d/d_state.cpp +++ b/src/d/d_state.cpp @@ -4,13 +4,13 @@ #include "m/m3d/m_state.h" void dState::fn_80062E40() { - m3d::mState::fn_802EE0A0(); + m3d::mState::unkStub1(); } void dState::fn_80062E50() { - m3d::mState::fn_802EE0B0(); + m3d::mState::unkStub2(); - if (m3d::mState::fn_802EE0D0()) { + if (m3d::mState::unkAlwaysTrue()) { if (dMain::isStopFlagSet(1)) { dMain::clearStopFlag(1); } @@ -22,9 +22,9 @@ void dState::fn_80062E50() { } void dState::fn_80062EB0() { - m3d::mState::fn_802EE0C0(); + m3d::mState::unkStub3(); } bool dState::fn_80062EC0() { - return m3d::mState::fn_802EE0D0(); + return m3d::mState::unkAlwaysTrue(); } diff --git a/src/m/m3d/m_state.cpp b/src/m/m3d/m_state.cpp index 119ace02..fbda1ab0 100644 --- a/src/m/m3d/m_state.cpp +++ b/src/m/m3d/m_state.cpp @@ -2,13 +2,13 @@ namespace m3d { -void mState::fn_802EE0A0() {} +void mState::unkStub1() {} -void mState::fn_802EE0B0() {} +void mState::unkStub2() {} -void mState::fn_802EE0C0() {} +void mState::unkStub3() {} -bool mState::fn_802EE0D0() { +bool mState::unkAlwaysTrue() { return true; } From 2b3486b05fa356a71b3292806bcff2ddc7713aeb Mon Sep 17 00:00:00 2001 From: Sean Miller Date: Thu, 9 Apr 2026 23:32:06 +0100 Subject: [PATCH 07/12] 100% eggSystem.cpp --- config/SOUE01/splits.txt | 2 +- config/SOUE01/symbols.txt | 6 +- configure.py | 2 +- include/d/d_sys.h | 2 +- include/egg/core/eggPerformanceView.h | 26 ++++++ include/egg/core/eggProcessMeter.h | 14 --- include/egg/core/eggSceneManager.h | 20 +++++ include/egg/core/eggSystem.h | 14 +-- src/egg/core/eggSystem.cpp | 119 ++++++++++++++++++++++++++ 9 files changed, 181 insertions(+), 24 deletions(-) create mode 100644 include/egg/core/eggPerformanceView.h delete mode 100644 include/egg/core/eggProcessMeter.h create mode 100644 include/egg/core/eggSceneManager.h create mode 100644 src/egg/core/eggSystem.cpp diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 46128aad..ba189404 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -4897,7 +4897,7 @@ egg/core/eggUnk.cpp: egg/core/eggSystem.cpp: .text start:0x80497170 end:0x8049752C align:16 - .data start:0x8056EA58 end:0x8056EAC8 + .data start:0x8056EA58 end:0x8056EA8C .sbss start:0x80576780 end:0x80576788 egg/core/eggDisplay.cpp: diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index b6e95124..f87b3a4b 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -39536,7 +39536,11 @@ __vt__Q23EGG7FrmHeap = .data:0x8056E9D0; // type:object size:0x30 __vt__Q23EGG10AssertHeap = .data:0x8056EA00; // type:object size:0x30 __vt__Q23EGG8Disposer = .data:0x8056EA30; // type:object size:0xC __vt__Q23EGG6Thread = .data:0x8056EA40; // type:object size:0x18 -lbl_8056EA58 = .data:0x8056EA58; // type:object size:0x70 +@8336 = .data:0x8056EA58; // type:object size:0xC data:string +@8337 = .data:0x8056EA64; // type:object size:0xC data:string +@8338 = .data:0x8056EA70; // type:object size:0xD data:string +@8339 = .data:0x8056EA80; // type:object size:0xA data:string +lbl_8056EA8C = .data:0x8056EA8C; // type:object size:0x3C __vt__Q23EGG7Display = .data:0x8056EAC8; // type:object size:0x20 __vt__Q23EGG10ColorFader = .data:0x8056EAE8; // type:object size:0x24 clear_z_TX__29@unnamed@eggAsyncDisplay_cpp@ = .data:0x8056EB20; // type:object size:0x40 scope:local align:32 diff --git a/configure.py b/configure.py index b7fc4aa8..313daaba 100644 --- a/configure.py +++ b/configure.py @@ -1233,7 +1233,7 @@ config.libs = [ Object(Matching, "egg/core/eggDisposer.cpp"), Object(Matching, "egg/core/eggThread.cpp"), Object(NonMatching, "egg/core/eggUnk.cpp"), - Object(NonMatching, "egg/core/eggSystem.cpp"), + Object(Matching, "egg/core/eggSystem.cpp"), Object(Matching, "egg/core/eggDisplay.cpp"), Object(Matching, "egg/core/eggColorFader.cpp"), Object(Matching, "egg/core/eggAsyncDisplay.cpp"), diff --git a/include/d/d_sys.h b/include/d/d_sys.h index cf602af8..25b07596 100644 --- a/include/d/d_sys.h +++ b/include/d/d_sys.h @@ -3,7 +3,7 @@ #include "common.h" #include "egg/core/eggHeap.h" -#include "egg/core/eggProcessMeter.h" +#include "egg/core/eggPerformanceView.h" #include "egg/core/eggSystem.h" #include "nw4r/ut/ut_Color.h" diff --git a/include/egg/core/eggPerformanceView.h b/include/egg/core/eggPerformanceView.h new file mode 100644 index 00000000..98cff48e --- /dev/null +++ b/include/egg/core/eggPerformanceView.h @@ -0,0 +1,26 @@ +#ifndef EGG_PROCESS_METER_H +#define EGG_PROCESS_METER_H + +#include "egg/core/eggThread.h" + +namespace EGG { + +class PerformanceView { +public: + // vtable at 0x0 + /* 0x08 */ virtual void measureBeginFrame() = 0; + /* 0x0C */ virtual void measureEndFrame() = 0; + /* 0x10 */ virtual void measureBeginRender() = 0; + /* 0x14 */ virtual void measureEndRender() = 0; + /* 0x18 */ virtual void callbackDrawSync(u16 token) = 0; + /* 0x1C */ virtual void unused() = 0; + /* 0x20 */ virtual void draw() = 0; + /* 0x24 */ virtual void setVisible(bool visible) = 0; + /* 0x28 */ virtual bool isVisible() = 0; +}; + +class ProcessMeter : public Thread, public PerformanceView {}; + +}; // namespace EGG + +#endif // EGG_PROCESS_METER_H diff --git a/include/egg/core/eggProcessMeter.h b/include/egg/core/eggProcessMeter.h deleted file mode 100644 index 3641c43d..00000000 --- a/include/egg/core/eggProcessMeter.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef EGG_PROCESS_METER_H -#define EGG_PROCESS_METER_H - -#include "egg/core/eggThread.h" - -namespace EGG { - -class PerformanceView {}; - -class ProcessMeter : public Thread, public PerformanceView {}; - -}; - -#endif // EGG_PROCESS_METER_H diff --git a/include/egg/core/eggSceneManager.h b/include/egg/core/eggSceneManager.h new file mode 100644 index 00000000..6f9a4ed9 --- /dev/null +++ b/include/egg/core/eggSceneManager.h @@ -0,0 +1,20 @@ +#ifndef EGG_SCENE_MANAGER_H +#define EGG_SCENE_MANAGER_H + +namespace EGG { + +class SceneManager { +public: + // vtable at 0x0 + /* 0x08 */ virtual void calc(); + /* 0x0C */ virtual void draw(); + /* 0x10 */ virtual void calcCurrentScene(); + /* 0x14 */ virtual void calcCurrentFader(); + /* 0x18 */ virtual void drawCurrentScene(); + /* 0x1C */ virtual void drawCurrentFader(); + /* 0x20 */ virtual void createDefaultFader(); +}; + +} // namespace EGG + +#endif // EGG_SCENE_MANAGER_H diff --git a/include/egg/core/eggSystem.h b/include/egg/core/eggSystem.h index 634b7578..ef4a0968 100644 --- a/include/egg/core/eggSystem.h +++ b/include/egg/core/eggSystem.h @@ -4,6 +4,8 @@ #include "common.h" #include "egg/core/eggVideo.h" +struct OSBootInfo; + namespace EGG { class Display; @@ -35,18 +37,18 @@ public: /* vt 0x38 */ virtual void initialize() = 0; public: - /* 0x04 */ u32 mRoot1HeapStart; - /* 0x08 */ u32 mRoot1HeapEnd; - /* 0x0C */ u32 mRoot2HeapStart; - /* 0x10 */ u32 mRoot2HeapEnd; + /* 0x04 */ void *mRoot1HeapStart; + /* 0x08 */ void *mRoot1HeapEnd; + /* 0x0C */ void *mRoot2HeapStart; + /* 0x10 */ void *mRoot2HeapEnd; /* 0x14 */ u32 mMemSize; /* 0x18 */ Heap *mRootHeapMem1; /* 0x1C */ Heap *mRootHeapMem2; /* 0x20 */ Heap *mRootHeapDebug; /* 0x24 */ Heap *mSystemHeap; /* 0x28 */ Thread *mSystemThread; - /* 0x2C */ u32 field_0x2C; - /* 0x30 */ u32 mSystemHeapStart; + /* 0x2C */ OSBootInfo *mBootInfo; + /* 0x30 */ void *mSystemHeapStart; /* 0x34 */ u32 mSystemHeapSize; }; class BaseSystem { diff --git a/src/egg/core/eggSystem.cpp b/src/egg/core/eggSystem.cpp new file mode 100644 index 00000000..3783af8c --- /dev/null +++ b/src/egg/core/eggSystem.cpp @@ -0,0 +1,119 @@ +#include "egg/core/eggSystem.h" + +#include "egg/audio/eggAudioMgr.h" +#include "egg/core/eggController.h" +#include "egg/core/eggDisplay.h" +#include "egg/core/eggExpHeap.h" +#include "egg/core/eggHeap.h" +#include "egg/core/eggPerformanceView.h" +#include "egg/core/eggSceneManager.h" + +#include "rvl/OS.h" + +#define MB_TO_BYTES(mb) ((mb) * 1024 * 1024) +#define RETAIL_MEM2_SIZE MB_TO_BYTES(64) + +namespace EGG { + +ConfigurationData *BaseSystem::mConfigData; + +void ConfigurationData::initMemory() { + void *pMEM1ArenaLo = OSGetMEM1ArenaLo(); + void *pMEM1ArenaHi = OSGetMEM1ArenaHi(); + void *pMEM2ArenaLo = OSGetMEM2ArenaLo(); + void *pMEM2ArenaHi = OSGetMEM2ArenaHi(); + + pMEM1ArenaLo = ROUND_UP_PTR(pMEM1ArenaLo, 32); + pMEM1ArenaHi = ROUND_DOWN_PTR(pMEM1ArenaHi, 32); + pMEM2ArenaLo = ROUND_UP_PTR(pMEM2ArenaLo, 32); + pMEM2ArenaHi = ROUND_DOWN_PTR(pMEM2ArenaHi, 32); + + mBootInfo = &OS_BOOT_INFO; + mSystemHeapStart = pMEM1ArenaLo; + mRoot1HeapStart = pMEM1ArenaLo; + mRoot1HeapEnd = pMEM1ArenaHi; + mRoot2HeapStart = pMEM2ArenaLo; + mRoot2HeapEnd = pMEM2ArenaHi; + mMemSize = mBootInfo->physMemSize; + + OSSetMEM1ArenaLo(pMEM1ArenaHi); + OSSetMEM1ArenaHi(pMEM1ArenaHi); + OSSetMEM2ArenaLo(pMEM2ArenaHi); + OSSetMEM2ArenaHi(pMEM2ArenaHi); + + Heap::initialize(); + + void *root1HeapPtr = mRoot1HeapStart; + u32 root1HeapSize = (u32)mRoot1HeapEnd - (u32)mRoot1HeapStart; + + void *root2HeapPtr = mRoot2HeapStart; + u32 root2HeapSize = (u32)mRoot2HeapEnd - (u32)mRoot2HeapStart; + + u32 debugHeapSize; + if (root2HeapSize >= RETAIL_MEM2_SIZE) { + debugHeapSize = RETAIL_MEM2_SIZE; + root2HeapSize = OSRoundDown32B(root2HeapSize - RETAIL_MEM2_SIZE); + } else { + debugHeapSize = 0; + } + void *debugHeapPtr = (void *)((u32)root2HeapPtr + root2HeapSize); + + mRootHeapMem1 = ExpHeap::create(root1HeapPtr, root1HeapSize, 0); + mRootHeapMem1->setName("EGGRootMEM1"); + + mRootHeapMem2 = ExpHeap::create(root2HeapPtr, root2HeapSize, 0); + mRootHeapMem2->setName("EGGRootMEM2"); + + if (debugHeapSize > 0) { + mRootHeapDebug = ExpHeap::create(debugHeapPtr, debugHeapSize, 0); + mRootHeapDebug->setName("EGGRootDebug"); + } else { + mRootHeapDebug = nullptr; + } + + mSystemHeap = ExpHeap::create(mSystemHeapSize, mRootHeapMem1, 0); + mSystemHeap->setName("EGGSystem"); + mSystemHeap->becomeCurrentHeap(); +} + +void ConfigurationData::run() { + CoreControllerMgr *pControllerMgr = CoreControllerMgr::instance(); + + while (true) { + getDisplay()->beginFrame(); + + onBeginFrame(); + + getPerfView()->measureBeginFrame(); + + pControllerMgr->beginFrame(); + + getDisplay()->beginRender(); + + getPerfView()->measureBeginRender(); + + getSceneMgr()->draw(); + + getPerfView()->draw(); + + getPerfView()->measureEndRender(); + + getDisplay()->endRender(); + + getSceneMgr()->calc(); + + pControllerMgr->endFrame(); + + if (getAudioMgr()) { + getAudioMgr()->calc(); + } + + getDisplay()->endFrame(); + + onEndFrame(); + + getPerfView()->measureEndFrame(); + } +} + +} // namespace EGG From b19d21a44433bde9047686855e24ecd2875a22f8 Mon Sep 17 00:00:00 2001 From: Sean Miller Date: Tue, 14 Apr 2026 14:49:29 +0100 Subject: [PATCH 08/12] 100% eggUnk.cpp, m_thread.cpp --- config/SOUE01/symbols.txt | 12 ++--- configure.py | 4 +- include/egg/core/eggUnk.h | 54 ++++++++++++++++--- include/m/m_thread.h | 8 +++ src/egg/core/eggUnk.cpp | 73 ++++++++++++++++++++++++++ src/m/m_thread.cpp | 10 ++++ src/toBeSorted/nand_request_thread.cpp | 5 +- 7 files changed, 148 insertions(+), 18 deletions(-) create mode 100644 src/egg/core/eggUnk.cpp create mode 100644 src/m/m_thread.cpp diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index f87b3a4b..e8d15920 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -17861,7 +17861,7 @@ Set__7mQuat_cFRC7mVec3_cRC7mVec3_c = .text:0x802F2330; // type:function size:0x1 fn_802F2450__7mQuat_cFRC7mVec3_cRC7mVec3_cf = .text:0x802F2450; // type:function size:0x18C fn_802F25E0 = .text:0x802F25E0; // type:function size:0x19C fn_802F2780__7mQuat_cFRC7mQuat_c = .text:0x802F2780; // type:function size:0x198 -fn_802F2920 = .text:0x802F2920; // type:function size:0x48 +registerThread__7mThreadFP8OSThreadPv = .text:0x802F2920; // type:function size:0x48 createProjectionXZ__7mVec3_cFRC7mAng3_cf = .text:0x802F2970; // type:function size:0x110 mVec__fromXY = .text:0x802F2A80; // type:function size:0xF0 normalize__7mVec3_cFv = .text:0x802F2B70; // type:function size:0x78 @@ -26254,10 +26254,10 @@ switchThreadCallback__Q23EGG6ThreadFP8OSThreadP8OSThread = .text:0x80496C70; // setCommonMesgQueue__Q23EGG6ThreadFiPQ23EGG4Heap = .text:0x80496D60; // type:function size:0x5C start__Q23EGG6ThreadFPv = .text:0x80496DC0; // type:function size:0x10 run__Q23EGG6ThreadFv = .text:0x80496DD0; // type:function size:0x8 scope:weak -FUN_80496de0 = .text:0x80496DE0; // type:function size:0x44 -FUN_80496e30 = .text:0x80496E30; // type:function size:0xD8 -FUN_80496f10 = .text:0x80496F10; // type:function size:0x1CC -FUN_804970e0 = .text:0x804970E0; // type:function size:0x8C +getThreadIndex__Q23EGG13ThreadMonitorFP8OSThread = .text:0x80496DE0; // type:function size:0x44 +doRegisterThread__Q23EGG13ThreadMonitorFP8OSThread = .text:0x80496E30; // type:function size:0xD8 +sortByPriority__Q23EGG13ThreadMonitorFv = .text:0x80496F10; // type:function size:0x1CC +registerThread__Q23EGG13ThreadMonitorFP8OSThreadQ23EGG13UnknownStruct = .text:0x804970E0; // type:function size:0x8C initMemory__Q23EGG17ConfigurationDataFv = .text:0x80497170; // type:function size:0x174 run__Q23EGG17ConfigurationDataFv = .text:0x804972F0; // type:function size:0x23C PreRetraceCallback = .text:0x80497530; // type:function size:0x40 @@ -43334,7 +43334,7 @@ sFreeCallbackArg__Q23EGG4Heap = .sbss:0x80576760; // type:object size:0x4 data:4 sCreateCallback__Q23EGG4Heap = .sbss:0x80576764; // type:object size:0x4 data:4byte sDestroyCallback__Q23EGG4Heap = .sbss:0x80576768; // type:object size:0x4 data:4byte sOldSwitchThreadCallback__Q23EGG6Thread = .sbss:0x80576770; // type:object size:0x4 data:4byte -lbl_80576778 = .sbss:0x80576778; // type:object size:0x8 data:4byte +sInstance__Q23EGG13ThreadMonitor = .sbss:0x80576778; // type:object size:0x4 data:4byte mConfigData__Q23EGG10BaseSystem = .sbss:0x80576780; // type:object size:0x4 data:4byte sTickPeriod__Q23EGG7Display = .sbss:0x80576788; // type:object size:0x4 data:4byte spSelector = .sbss:0x80576790; // type:object size:0x4 scope:local data:4byte diff --git a/configure.py b/configure.py index 313daaba..504b169d 100644 --- a/configure.py +++ b/configure.py @@ -893,7 +893,7 @@ config.libs = [ Object(Matching, "m/m_pad.cpp"), # probably two files due to sdata2 float duplication and gap Object(NonMatching, "m/m_quat.cpp"), - Object(NonMatching, "m/m_thread.cpp"), + Object(Matching, "m/m_thread.cpp"), Object(NonMatching, "m/m_vec.cpp"), Object(NonMatching, "m/m_video.cpp"), ], @@ -1232,7 +1232,7 @@ config.libs = [ Object(Matching, "egg/core/eggAssertHeap.cpp"), Object(Matching, "egg/core/eggDisposer.cpp"), Object(Matching, "egg/core/eggThread.cpp"), - Object(NonMatching, "egg/core/eggUnk.cpp"), + Object(Matching, "egg/core/eggUnk.cpp"), Object(Matching, "egg/core/eggSystem.cpp"), Object(Matching, "egg/core/eggDisplay.cpp"), Object(Matching, "egg/core/eggColorFader.cpp"), diff --git a/include/egg/core/eggUnk.h b/include/egg/core/eggUnk.h index f1ec5c73..4d2eaaa4 100644 --- a/include/egg/core/eggUnk.h +++ b/include/egg/core/eggUnk.h @@ -12,14 +12,54 @@ // with part of that thread referencing tsome of these funcs namespace EGG { -class Unknown { -public: - u8 _[0xfC - 0x00]; // size unsure, but this is the limit seen - void fn_80496de0(OSThread *); - void fn_80496e30(OSThread *); - void fn_80496f10(); - void fn_804970e0(OSThread *, u8 *); + +// Color? Tag? +struct UnknownStruct { + u8 _00; + u8 _01; + u8 _02; + u8 _03; }; + +struct ThreadInfo { + OSThread *mThread; + UnknownStruct _04; + bool _08; + char _09[32]; // Buffer for name? + u32 _2C; +}; + +// This is a complete guess +class ThreadMonitor { +public: + void registerThread(OSThread *thread, UnknownStruct); + + static ThreadMonitor *getInstance() { + return sInstance; + } + +private: + s32 getThreadIndex(OSThread *thread); + s32 doRegisterThread(OSThread *thread); + void sortByPriority(); + +private: + u8 _placeholder_00[0x8]; + /* 0x08 */ s32 mMaxThreads; + u8 _placeholder_0C[0x3C - 0xC]; + /* 0x3C */ ThreadInfo *mThreadList; + u8 _placeholder_40[0x44 - 0x40]; + /* 0x44 */ s32 mThreadCount; + u8 _placeholder_48[0xEC - 0x48]; + /* 0xEC */ UnknownStruct _EC; // Default color/tag? + u8 _placeholder_F0[0xF4 - 0xF0]; + /* 0xF4 */ u32 _F4; + /* 0xF8 */ bool mSortEnabled; + // size unsure, but this is the limit seen + + static ThreadMonitor *sInstance; +}; + } // namespace EGG #endif diff --git a/include/m/m_thread.h b/include/m/m_thread.h index 104c7b69..11ca4fd3 100644 --- a/include/m/m_thread.h +++ b/include/m/m_thread.h @@ -3,4 +3,12 @@ // This file is a complete guess +struct OSThread; + +namespace mThread { + +void registerThread(OSThread *thread, void *threadArg); + +} // namespace mThread + #endif diff --git a/src/egg/core/eggUnk.cpp b/src/egg/core/eggUnk.cpp new file mode 100644 index 00000000..e49285ca --- /dev/null +++ b/src/egg/core/eggUnk.cpp @@ -0,0 +1,73 @@ +#include "egg/core/eggUnk.h" + +#include "rvl/OS.h" + +namespace EGG { + +ThreadMonitor *ThreadMonitor::sInstance; // Never initialized + +s32 ThreadMonitor::getThreadIndex(OSThread *thread) { + for (s32 i = 0; i < mThreadCount; i++) { + if (mThreadList[i].mThread == thread) { + return i; + } + } + return -1; +} + +s32 ThreadMonitor::doRegisterThread(OSThread *thread) { + if (mThreadCount != mMaxThreads) { + s32 i = mThreadCount; + + mThreadList[i].mThread = thread; + mThreadList[i]._04 = _EC; + mThreadList[i]._08 = true; + mThreadList[i]._09[0] = '\0'; + mThreadList[i]._2C = _F4; + + mThreadCount++; + + if (mSortEnabled) { + sortByPriority(); + } + + return getThreadIndex(thread); + } + + return -1; +} + +void ThreadMonitor::sortByPriority() { + // Selection sort on thread priority + for (s32 i = 0; i < mThreadCount - 1; i++) { + OSPriority minPrio = 31; + s32 minPrioIndex = -1; + + for (s32 j = i; j < mThreadCount; j++) { + OSPriority prio = OSGetThreadPriority(mThreadList[j].mThread); + if (prio <= minPrio) { + minPrio = prio; + minPrioIndex = j; + } + } + + if (i != minPrioIndex) { + ThreadInfo temp = mThreadList[i]; + mThreadList[i] = mThreadList[minPrioIndex]; + mThreadList[minPrioIndex] = temp; + } + } +} + +void ThreadMonitor::registerThread(OSThread *thread, UnknownStruct arg) { + s32 i = getThreadIndex(thread); + if (i == -1) { + i = doRegisterThread(thread); + } + + if (i != -1) { + mThreadList[i]._04 = arg; + } +} + +} // namespace EGG diff --git a/src/m/m_thread.cpp b/src/m/m_thread.cpp new file mode 100644 index 00000000..49fd62ba --- /dev/null +++ b/src/m/m_thread.cpp @@ -0,0 +1,10 @@ +#include "m/m_thread.h" + +#include "egg/core/eggUnk.h" +#include "rvl/OS/OSThread.h" + +void mThread::registerThread(OSThread *thread, void *threadArg) { + if (threadArg && EGG::ThreadMonitor::getInstance()) { + EGG::ThreadMonitor::getInstance()->registerThread(thread, *(EGG::UnknownStruct *)threadArg); + } +} diff --git a/src/toBeSorted/nand_request_thread.cpp b/src/toBeSorted/nand_request_thread.cpp index 286a522f..d288fb33 100644 --- a/src/toBeSorted/nand_request_thread.cpp +++ b/src/toBeSorted/nand_request_thread.cpp @@ -4,6 +4,7 @@ #include "egg/core/eggAssertHeap.h" // IWYU pragma: export #include "egg/core/eggThread.h" #include "m/m_heap.h" +#include "m/m_thread.h" #include "rvl/NAND/NANDCheck.h" #include "rvl/NAND/NANDCore.h" #include "rvl/NAND/nand.h" @@ -13,8 +14,6 @@ #include -extern "C" void fn_802F2920(OSThread *, size_t); - NandRequestThread::NandRequestThread( int priority, EGG::Heap *commandHeap, void *bufFromGameHeap, size_t bufSize, void *mThreadArg, EGG::Heap *heap ) @@ -27,7 +26,7 @@ NandRequestThread::NandRequestThread( mBufSize = bufSize; setThreadCurrentHeap(mHeap::g_assertHeap); - fn_802F2920(mOSThread, bufSize); + mThread::registerThread(mOSThread, mThreadArg); OSInitMessageQueue(&mMessageQueue, &mMessageBuffer, 1); OSInitMutex(&mMutex); OSResumeThread(mOSThread); From a72e4e4bbfcabe0d2d961fe61d6c2d14ec88b826 Mon Sep 17 00:00:00 2001 From: Sean Miller Date: Tue, 14 Apr 2026 14:51:17 +0100 Subject: [PATCH 09/12] Rename eggUnk.cpp to eggThreadMonitor.cpp --- config/SOUE01/splits.txt | 2 +- configure.py | 2 +- include/egg/core/{eggUnk.h => eggThreadMonitor.h} | 0 src/egg/core/{eggUnk.cpp => eggThreadMonitor.cpp} | 2 +- src/m/m_thread.cpp | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) rename include/egg/core/{eggUnk.h => eggThreadMonitor.h} (100%) rename src/egg/core/{eggUnk.cpp => eggThreadMonitor.cpp} (97%) diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index ba189404..7364650b 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -4891,7 +4891,7 @@ egg/core/eggThread.cpp: .sbss start:0x80576770 end:0x80576778 .bss start:0x80673B10 end:0x80673B20 -egg/core/eggUnk.cpp: +egg/core/eggThreadMonitor.cpp: .text start:0x80496DE0 end:0x8049716C align:16 .sbss start:0x80576778 end:0x80576780 diff --git a/configure.py b/configure.py index 504b169d..0fb8c381 100644 --- a/configure.py +++ b/configure.py @@ -1232,7 +1232,7 @@ config.libs = [ Object(Matching, "egg/core/eggAssertHeap.cpp"), Object(Matching, "egg/core/eggDisposer.cpp"), Object(Matching, "egg/core/eggThread.cpp"), - Object(Matching, "egg/core/eggUnk.cpp"), + Object(Matching, "egg/core/eggThreadMonitor.cpp"), Object(Matching, "egg/core/eggSystem.cpp"), Object(Matching, "egg/core/eggDisplay.cpp"), Object(Matching, "egg/core/eggColorFader.cpp"), diff --git a/include/egg/core/eggUnk.h b/include/egg/core/eggThreadMonitor.h similarity index 100% rename from include/egg/core/eggUnk.h rename to include/egg/core/eggThreadMonitor.h diff --git a/src/egg/core/eggUnk.cpp b/src/egg/core/eggThreadMonitor.cpp similarity index 97% rename from src/egg/core/eggUnk.cpp rename to src/egg/core/eggThreadMonitor.cpp index e49285ca..c7b2a5c6 100644 --- a/src/egg/core/eggUnk.cpp +++ b/src/egg/core/eggThreadMonitor.cpp @@ -1,4 +1,4 @@ -#include "egg/core/eggUnk.h" +#include "egg/core/eggThreadMonitor.h" #include "rvl/OS.h" diff --git a/src/m/m_thread.cpp b/src/m/m_thread.cpp index 49fd62ba..3311b080 100644 --- a/src/m/m_thread.cpp +++ b/src/m/m_thread.cpp @@ -1,6 +1,6 @@ #include "m/m_thread.h" -#include "egg/core/eggUnk.h" +#include "egg/core/eggThreadMonitor.h" #include "rvl/OS/OSThread.h" void mThread::registerThread(OSThread *thread, void *threadArg) { From 9eb87eb75ec6f8845b4066dd8e7684d752e8b2b9 Mon Sep 17 00:00:00 2001 From: Sean Miller Date: Tue, 14 Apr 2026 15:00:13 +0100 Subject: [PATCH 10/12] More natural cast in eggSystem.cpp --- src/egg/core/eggSystem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/egg/core/eggSystem.cpp b/src/egg/core/eggSystem.cpp index 3783af8c..315c07b0 100644 --- a/src/egg/core/eggSystem.cpp +++ b/src/egg/core/eggSystem.cpp @@ -56,7 +56,7 @@ void ConfigurationData::initMemory() { } else { debugHeapSize = 0; } - void *debugHeapPtr = (void *)((u32)root2HeapPtr + root2HeapSize); + void *debugHeapPtr = (u8 *)root2HeapPtr + root2HeapSize; mRootHeapMem1 = ExpHeap::create(root1HeapPtr, root1HeapSize, 0); mRootHeapMem1->setName("EGGRootMEM1"); From 0aeec983a4d18b12367a7c68c05e89abb05cff35 Mon Sep 17 00:00:00 2001 From: Sean Miller Date: Thu, 16 Apr 2026 13:15:04 +0100 Subject: [PATCH 11/12] Rename ThreadMonitor to ThreadMgr --- config/SOUE01/splits.txt | 2 +- config/SOUE01/symbols.txt | 10 +++++----- configure.py | 2 +- .../egg/core/{eggThreadMonitor.h => eggThreadMgr.h} | 6 +++--- .../core/{eggThreadMonitor.cpp => eggThreadMgr.cpp} | 12 ++++++------ src/m/m_thread.cpp | 6 +++--- 6 files changed, 19 insertions(+), 19 deletions(-) rename include/egg/core/{eggThreadMonitor.h => eggThreadMgr.h} (93%) rename src/egg/core/{eggThreadMonitor.cpp => eggThreadMgr.cpp} (81%) diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 7364650b..57f14241 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -4891,7 +4891,7 @@ egg/core/eggThread.cpp: .sbss start:0x80576770 end:0x80576778 .bss start:0x80673B10 end:0x80673B20 -egg/core/eggThreadMonitor.cpp: +egg/core/eggThreadMgr.cpp: .text start:0x80496DE0 end:0x8049716C align:16 .sbss start:0x80576778 end:0x80576780 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index e8d15920..3df76444 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -26254,10 +26254,10 @@ switchThreadCallback__Q23EGG6ThreadFP8OSThreadP8OSThread = .text:0x80496C70; // setCommonMesgQueue__Q23EGG6ThreadFiPQ23EGG4Heap = .text:0x80496D60; // type:function size:0x5C start__Q23EGG6ThreadFPv = .text:0x80496DC0; // type:function size:0x10 run__Q23EGG6ThreadFv = .text:0x80496DD0; // type:function size:0x8 scope:weak -getThreadIndex__Q23EGG13ThreadMonitorFP8OSThread = .text:0x80496DE0; // type:function size:0x44 -doRegisterThread__Q23EGG13ThreadMonitorFP8OSThread = .text:0x80496E30; // type:function size:0xD8 -sortByPriority__Q23EGG13ThreadMonitorFv = .text:0x80496F10; // type:function size:0x1CC -registerThread__Q23EGG13ThreadMonitorFP8OSThreadQ23EGG13UnknownStruct = .text:0x804970E0; // type:function size:0x8C +getThreadIndex__Q23EGG13ThreadMgrFP8OSThread = .text:0x80496DE0; // type:function size:0x44 +doRegisterThread__Q23EGG13ThreadMgrFP8OSThread = .text:0x80496E30; // type:function size:0xD8 +sortByPriority__Q23EGG13ThreadMgrFv = .text:0x80496F10; // type:function size:0x1CC +registerThread__Q23EGG13ThreadMgrFP8OSThreadQ23EGG13UnknownStruct = .text:0x804970E0; // type:function size:0x8C initMemory__Q23EGG17ConfigurationDataFv = .text:0x80497170; // type:function size:0x174 run__Q23EGG17ConfigurationDataFv = .text:0x804972F0; // type:function size:0x23C PreRetraceCallback = .text:0x80497530; // type:function size:0x40 @@ -43334,7 +43334,7 @@ sFreeCallbackArg__Q23EGG4Heap = .sbss:0x80576760; // type:object size:0x4 data:4 sCreateCallback__Q23EGG4Heap = .sbss:0x80576764; // type:object size:0x4 data:4byte sDestroyCallback__Q23EGG4Heap = .sbss:0x80576768; // type:object size:0x4 data:4byte sOldSwitchThreadCallback__Q23EGG6Thread = .sbss:0x80576770; // type:object size:0x4 data:4byte -sInstance__Q23EGG13ThreadMonitor = .sbss:0x80576778; // type:object size:0x4 data:4byte +sInstance__Q23EGG13ThreadMgr = .sbss:0x80576778; // type:object size:0x4 data:4byte mConfigData__Q23EGG10BaseSystem = .sbss:0x80576780; // type:object size:0x4 data:4byte sTickPeriod__Q23EGG7Display = .sbss:0x80576788; // type:object size:0x4 data:4byte spSelector = .sbss:0x80576790; // type:object size:0x4 scope:local data:4byte diff --git a/configure.py b/configure.py index 0fb8c381..1e647092 100644 --- a/configure.py +++ b/configure.py @@ -1232,7 +1232,7 @@ config.libs = [ Object(Matching, "egg/core/eggAssertHeap.cpp"), Object(Matching, "egg/core/eggDisposer.cpp"), Object(Matching, "egg/core/eggThread.cpp"), - Object(Matching, "egg/core/eggThreadMonitor.cpp"), + Object(Matching, "egg/core/eggThreadMgr.cpp"), Object(Matching, "egg/core/eggSystem.cpp"), Object(Matching, "egg/core/eggDisplay.cpp"), Object(Matching, "egg/core/eggColorFader.cpp"), diff --git a/include/egg/core/eggThreadMonitor.h b/include/egg/core/eggThreadMgr.h similarity index 93% rename from include/egg/core/eggThreadMonitor.h rename to include/egg/core/eggThreadMgr.h index 4d2eaaa4..9d292692 100644 --- a/include/egg/core/eggThreadMonitor.h +++ b/include/egg/core/eggThreadMgr.h @@ -30,11 +30,11 @@ struct ThreadInfo { }; // This is a complete guess -class ThreadMonitor { +class ThreadMgr { public: void registerThread(OSThread *thread, UnknownStruct); - static ThreadMonitor *getInstance() { + static ThreadMgr *getInstance() { return sInstance; } @@ -57,7 +57,7 @@ private: /* 0xF8 */ bool mSortEnabled; // size unsure, but this is the limit seen - static ThreadMonitor *sInstance; + static ThreadMgr *sInstance; }; } // namespace EGG diff --git a/src/egg/core/eggThreadMonitor.cpp b/src/egg/core/eggThreadMgr.cpp similarity index 81% rename from src/egg/core/eggThreadMonitor.cpp rename to src/egg/core/eggThreadMgr.cpp index c7b2a5c6..e5fcd44a 100644 --- a/src/egg/core/eggThreadMonitor.cpp +++ b/src/egg/core/eggThreadMgr.cpp @@ -1,12 +1,12 @@ -#include "egg/core/eggThreadMonitor.h" +#include "egg/core/eggThreadMgr.h" #include "rvl/OS.h" namespace EGG { -ThreadMonitor *ThreadMonitor::sInstance; // Never initialized +ThreadMgr *ThreadMgr::sInstance; // Never initialized -s32 ThreadMonitor::getThreadIndex(OSThread *thread) { +s32 ThreadMgr::getThreadIndex(OSThread *thread) { for (s32 i = 0; i < mThreadCount; i++) { if (mThreadList[i].mThread == thread) { return i; @@ -15,7 +15,7 @@ s32 ThreadMonitor::getThreadIndex(OSThread *thread) { return -1; } -s32 ThreadMonitor::doRegisterThread(OSThread *thread) { +s32 ThreadMgr::doRegisterThread(OSThread *thread) { if (mThreadCount != mMaxThreads) { s32 i = mThreadCount; @@ -37,7 +37,7 @@ s32 ThreadMonitor::doRegisterThread(OSThread *thread) { return -1; } -void ThreadMonitor::sortByPriority() { +void ThreadMgr::sortByPriority() { // Selection sort on thread priority for (s32 i = 0; i < mThreadCount - 1; i++) { OSPriority minPrio = 31; @@ -59,7 +59,7 @@ void ThreadMonitor::sortByPriority() { } } -void ThreadMonitor::registerThread(OSThread *thread, UnknownStruct arg) { +void ThreadMgr::registerThread(OSThread *thread, UnknownStruct arg) { s32 i = getThreadIndex(thread); if (i == -1) { i = doRegisterThread(thread); diff --git a/src/m/m_thread.cpp b/src/m/m_thread.cpp index 3311b080..e9a1a136 100644 --- a/src/m/m_thread.cpp +++ b/src/m/m_thread.cpp @@ -1,10 +1,10 @@ #include "m/m_thread.h" -#include "egg/core/eggThreadMonitor.h" +#include "egg/core/eggThreadMgr.h" #include "rvl/OS/OSThread.h" void mThread::registerThread(OSThread *thread, void *threadArg) { - if (threadArg && EGG::ThreadMonitor::getInstance()) { - EGG::ThreadMonitor::getInstance()->registerThread(thread, *(EGG::UnknownStruct *)threadArg); + if (threadArg && EGG::ThreadMgr::getInstance()) { + EGG::ThreadMgr::getInstance()->registerThread(thread, *(EGG::UnknownStruct *)threadArg); } } From f05d556cf90f4073818117187017be4a9bcdbb13 Mon Sep 17 00:00:00 2001 From: Sean Miller Date: Thu, 16 Apr 2026 13:41:44 +0100 Subject: [PATCH 12/12] Split eggPerformanceView.h into eggPerf.h and eggProcessMeter.h --- include/d/d_sys.h | 2 +- .../egg/core/{eggPerformanceView.h => eggPerf.h} | 8 +++----- include/egg/core/eggProcessMeter.h | 13 +++++++++++++ include/egg/core/eggThreadMgr.h | 6 +++--- src/egg/core/eggSystem.cpp | 2 +- 5 files changed, 21 insertions(+), 10 deletions(-) rename include/egg/core/{eggPerformanceView.h => eggPerf.h} (79%) create mode 100644 include/egg/core/eggProcessMeter.h diff --git a/include/d/d_sys.h b/include/d/d_sys.h index 25b07596..cf602af8 100644 --- a/include/d/d_sys.h +++ b/include/d/d_sys.h @@ -3,7 +3,7 @@ #include "common.h" #include "egg/core/eggHeap.h" -#include "egg/core/eggPerformanceView.h" +#include "egg/core/eggProcessMeter.h" #include "egg/core/eggSystem.h" #include "nw4r/ut/ut_Color.h" diff --git a/include/egg/core/eggPerformanceView.h b/include/egg/core/eggPerf.h similarity index 79% rename from include/egg/core/eggPerformanceView.h rename to include/egg/core/eggPerf.h index 98cff48e..5bd1ff15 100644 --- a/include/egg/core/eggPerformanceView.h +++ b/include/egg/core/eggPerf.h @@ -1,5 +1,5 @@ -#ifndef EGG_PROCESS_METER_H -#define EGG_PROCESS_METER_H +#ifndef EGG_PERF_H +#define EGG_PERF_H #include "egg/core/eggThread.h" @@ -19,8 +19,6 @@ public: /* 0x28 */ virtual bool isVisible() = 0; }; -class ProcessMeter : public Thread, public PerformanceView {}; - }; // namespace EGG -#endif // EGG_PROCESS_METER_H +#endif // EGG_PERF_H diff --git a/include/egg/core/eggProcessMeter.h b/include/egg/core/eggProcessMeter.h new file mode 100644 index 00000000..a3bec411 --- /dev/null +++ b/include/egg/core/eggProcessMeter.h @@ -0,0 +1,13 @@ +#ifndef EGG_PROCESS_METER_H +#define EGG_PROCESS_METER_H + +#include "egg/core/eggPerf.h" +#include "egg/core/eggThread.h" + +namespace EGG { + +class ProcessMeter : public Thread, public PerformanceView {}; + +}; // namespace EGG + +#endif // EGG_PROCESS_METER_H diff --git a/include/egg/core/eggThreadMgr.h b/include/egg/core/eggThreadMgr.h index 9d292692..b1b21e2f 100644 --- a/include/egg/core/eggThreadMgr.h +++ b/include/egg/core/eggThreadMgr.h @@ -1,5 +1,5 @@ -#ifndef EGG_UNK_H -#define EGG_UNK_H +#ifndef EGG_THREAD_MGR_H +#define EGG_THREAD_MGR_H #include "common.h" @@ -62,4 +62,4 @@ private: } // namespace EGG -#endif +#endif // EGG_THREAD_MGR_H diff --git a/src/egg/core/eggSystem.cpp b/src/egg/core/eggSystem.cpp index 315c07b0..6af92258 100644 --- a/src/egg/core/eggSystem.cpp +++ b/src/egg/core/eggSystem.cpp @@ -5,7 +5,7 @@ #include "egg/core/eggDisplay.h" #include "egg/core/eggExpHeap.h" #include "egg/core/eggHeap.h" -#include "egg/core/eggPerformanceView.h" +#include "egg/core/eggPerf.h" #include "egg/core/eggSceneManager.h" #include "rvl/OS.h"