ROM matching improvements (#384)

* fix: match JDRResolution

* fix: match MSL __exception

* fix: match MSL dolphin_trk

* fix: JDRResolution formatting

* fix: match OS __start

* fix: match OS/OS.c

* fix: match OS/OSThread.c
This commit is contained in:
Hyblocker authored and GitHub committed 2026-11-02 14:23:49 +03:00
1 parent 7e390c4687
commit f8a1365914
10 files changed
+168 -76

No files matched your search

+7 -6
View File
@@ -174,6 +174,7 @@ config.asflags = [
f"-I {msl_include}/MSL_C/MSL_Common",
f"-I {msl_include}/MSL_C++/MSL_Common",
f"-I build/{config.version}/include",
f"--defsym VERSION_{config.version}=1",
f"--defsym BUILD_VERSION={version_num}",
]
config.ldflags = [
@@ -429,7 +430,7 @@ config.libs = [
Object(Matching, "JSystem/JDrama/JDRNameRefGen.cpp"),
Object(Matching, "JSystem/JDrama/JDRPlacement.cpp"),
Object(MatchingFor("GMSJ01", "GMSP01", "GMSE01", "GMSP01_NX"), "JSystem/JDrama/JDRRenderMode.cpp"),
Object(MatchingFor("GMSJ01", "GMSP01", "GMSE01", "GMSP01_NX"), "JSystem/JDrama/JDRResolution.cpp"),
Object(Matching, "JSystem/JDrama/JDRResolution.cpp"),
Object(Matching, "JSystem/JDrama/JDRScreen.cpp"),
Object(NonMatching, "JSystem/JDrama/JDRSmJ3DAct.cpp"),
Object(Matching, "JSystem/JDrama/JDRSmJ3DScn.cpp"),
@@ -659,8 +660,8 @@ config.libs = [
Object(Matching, "TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Processor/ppc/Generic/flush_cache.c"),
Object(Matching, "TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Portable/mem_TRK.c"),
Object(Matching, "TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Processor/ppc/Generic/targimpl.c"),
Object(MatchingFor("GMSJ01"), "TRK_MINNOW_DOLPHIN/__exception.s"),
Object(MatchingFor("GMSJ01", "GMSP01"), "TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Os/dolphin/dolphin_trk.c"),
Object(Matching, "TRK_MINNOW_DOLPHIN/__exception.s"),
Object(Matching, "TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Os/dolphin/dolphin_trk.c"),
Object(Matching, "TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Processor/ppc/Generic/mpc_7xx_603e.c"),
Object(Matching, "TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Portable/main_TRK.c"),
Object(Matching, "TRK_MINNOW_DOLPHIN/debugger/embedded/MetroTRK/Os/dolphin/dolphin_trk_glue.c"),
@@ -674,7 +675,7 @@ config.libs = [
Object(Matching, "dolphin/db/db.c"),
]),
DolphinLib("os", [
Object(MatchingFor("GMSJ01", "GMSP01"), "dolphin/os/OS.c"),
Object(Matching, "dolphin/os/OS.c"),
Object(Matching, "dolphin/os/OSAlarm.c"),
Object(Matching, "dolphin/os/OSAlloc.c"),
Object(Matching, "dolphin/os/OSArena.c"),
@@ -694,9 +695,9 @@ config.libs = [
Object(Matching, "dolphin/os/OSRtc.c"),
Object(Matching, "dolphin/os/OSStopwatch.c"),
Object(Matching, "dolphin/os/OSSync.c"),
Object(MatchingFor("GMSJ01", "GMSP01"), "dolphin/os/OSThread.c"),
Object(Matching, "dolphin/os/OSThread.c"),
Object(Matching, "dolphin/os/OSTime.c"),
Object(MatchingFor("GMSJ01", "GMSP01"), "dolphin/os/__start.c"),
Object(Matching, "dolphin/os/__start.c"),
Object(Matching, "dolphin/os/__ppc_eabi_init.cpp"),
]),
DolphinLibUnpatched("mtx", [
@@ -5,7 +5,8 @@
namespace JDrama {
#if defined(VERSION_GMSP01) || defined(VERSION_GMSP01_NX)
#if defined(VERSION_GMSJ01_01) || defined(VERSION_GMSP01) \
|| defined(VERSION_GMSP01_NX)
u16 GetVIWidthMax(u32 tvFormat);
u16 GetVIHeightMax(u32 tvFormat);
#else
+4 -2
View File
@@ -74,7 +74,8 @@ void JDrama::CalcRenderModeXFBHeight(GXRenderModeObj* rmo, u16 param_2)
void JDrama::CalcRenderModeVIXOrigin(GXRenderModeObj* rmo)
{
#if defined(VERSION_GMSP01) || defined(VERSION_GMSP01_NX)
#if defined(VERSION_GMSJ01_01) || defined(VERSION_GMSP01) \
|| defined(VERSION_GMSP01_NX)
rmo->viXOrigin = (GetVIWidthMax(rmo->viTVmode >> 2) - rmo->viWidth) / 2;
#else
rmo->viXOrigin = (GetVIWidthMax() - rmo->viWidth) / 2;
@@ -83,7 +84,8 @@ void JDrama::CalcRenderModeVIXOrigin(GXRenderModeObj* rmo)
void JDrama::CalcRenderModeVIYOrigin(GXRenderModeObj* rmo)
{
#if defined(VERSION_GMSP01) || defined(VERSION_GMSP01_NX)
#if defined(VERSION_GMSJ01_01) || defined(VERSION_GMSP01) \
|| defined(VERSION_GMSP01_NX)
rmo->viYOrigin = (GetVIHeightMax(rmo->viTVmode >> 2) - rmo->viHeight) / 2;
#else
rmo->viYOrigin = (GetVIHeightMax() - rmo->viHeight) / 2;
+8 -4
View File
@@ -1,13 +1,15 @@
#include <JSystem/JDrama/JDRResolution.hpp>
#include <dolphin/vi.h>
#if defined(VERSION_GMSP01) || defined(VERSION_GMSP01_NX)
#if defined(VERSION_GMSJ01_01) || defined(VERSION_GMSP01) \
|| defined(VERSION_GMSP01_NX)
u16 JDrama::GetVIWidthMax(u32 tvFormat)
#else
u16 JDrama::GetVIWidthMax()
#endif
{
#if !(defined(VERSION_GMSP01) || defined(VERSION_GMSP01_NX))
#if !(defined(VERSION_GMSJ01_01) || defined(VERSION_GMSP01) \
|| defined(VERSION_GMSP01_NX))
const u32 tvFormat = VIGetTvFormat();
#endif
switch (tvFormat) {
@@ -23,13 +25,15 @@ u16 JDrama::GetVIWidthMax()
}
}
#if defined(VERSION_GMSP01) || defined(VERSION_GMSP01_NX)
#if defined(VERSION_GMSJ01_01) || defined(VERSION_GMSP01) \
|| defined(VERSION_GMSP01_NX)
u16 JDrama::GetVIHeightMax(u32 tvFormat)
#else
u16 JDrama::GetVIHeightMax()
#endif
{
#if !(defined(VERSION_GMSP01) || defined(VERSION_GMSP01_NX))
#if !(defined(VERSION_GMSJ01_01) || defined(VERSION_GMSP01) \
|| defined(VERSION_GMSP01_NX))
const u32 tvFormat = VIGetTvFormat();
#endif
switch (tvFormat) {
+73 -48
View File
@@ -5,6 +5,31 @@
.section .init, "ax"
.balign 4
.ifdef VERSION_GMSJ01
.equ OS_EXCEPTION_VECTOR_HI, 0x8008
.equ OS_EXCEPTION_VECTOR_LO, 0xadd8
.endif
.ifdef VERSION_GMSJ01_01
.equ OS_EXCEPTION_VECTOR_HI, 0x8031
.equ OS_EXCEPTION_VECTOR_LO, 0xfdb8
.endif
.ifdef VERSION_GMSE01
.equ OS_EXCEPTION_VECTOR_HI, 0x8034
.equ OS_EXCEPTION_VECTOR_LO, 0x04b8
.endif
.ifdef VERSION_GMSP01
.equ OS_EXCEPTION_VECTOR_HI, 0x8033
.equ OS_EXCEPTION_VECTOR_LO, 0x8638
.endif
.ifdef VERSION_GMSP01_NX
.equ OS_EXCEPTION_VECTOR_HI, 0x8033
.equ OS_EXCEPTION_VECTOR_LO, 0x6ff8
.endif
# .init:0x0 | 0x80003298 | size: 0x0
.sym gTRKInterruptVectorTable, global
.4byte 0x4D657472 /* invalid */
@@ -150,8 +175,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x200
rfi
@@ -208,8 +233,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x300
rfi
@@ -272,8 +297,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x400
rfi
@@ -336,8 +361,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x500
rfi
@@ -400,8 +425,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x600
rfi
@@ -464,8 +489,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x700
rfi
@@ -528,8 +553,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x800
rfi
@@ -592,8 +617,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x900
rfi
@@ -784,8 +809,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0xc00
rfi
@@ -848,8 +873,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0xd00
rfi
@@ -912,8 +937,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0xe00
rfi
@@ -984,8 +1009,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0xf20
rfi
@@ -999,8 +1024,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0xf00
rfi
@@ -1058,8 +1083,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x1000
rfi
@@ -1123,8 +1148,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x1100
rfi
@@ -1189,8 +1214,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x1200
rfi
@@ -1239,8 +1264,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x1300
rfi
@@ -1306,8 +1331,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x1400
rfi
@@ -1434,8 +1459,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x1600
rfi
@@ -1498,8 +1523,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x1700
rfi
@@ -1818,8 +1843,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x1c00
rfi
@@ -1882,8 +1907,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x1d00
rfi
@@ -1946,8 +1971,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x1e00
rfi
@@ -2010,8 +2035,8 @@
mfmsr r3
ori r3, r3, 0x30
mtsrr1 r3
lis r3, 0x8008
ori r3, r3, 0xadd8
lis r3, OS_EXCEPTION_VECTOR_HI
ori r3, r3, OS_EXCEPTION_VECTOR_LO
mtsrr0 r3
li r3, 0x1f00
rfi
@@ -64,12 +64,23 @@ asm void InitMetroTRK()
mtspr 0x3f2, r0
mtspr 0x3f5, r0
//Restore stack pointer
#if defined(VERSION_GMSP01) || defined(VERSION_GMSP01_NX)
lis r1, 0x80420D48@h
ori r1, r1, 0x80420D48@l
#else
#if defined(VERSION_GMSJ01)
lis r1, 0x80426008@h
ori r1, r1, 0x80426008@l
#elif defined(VERSION_GMSJ01_01)
lis r1, 0x8041A518@h
ori r1, r1, 0x8041A518@l
#elif defined(VERSION_GMSE01)
lis r1, 0x804297E8@h
ori r1, r1, 0x804297E8@l
#elif defined(VERSION_GMSP01)
lis r1, 0x80420D48@h
ori r1, r1, 0x80420D48@l
#elif defined(VERSION_GMSP01_NX)
lis r1, 0x8041E2F0@h
ori r1, r1, 0x8041E2F0@l
#else
#error "Unhandled ROM"
#endif
mr r3, r5
bl InitMetroTRKCommTable //Initialize comm table
+4
View File
@@ -26,7 +26,11 @@ extern void OSResetSystem(BOOL reset, u32 resetCode, BOOL forceMenu);
__declspec(section ".init") extern void __check_pad3(void);
__declspec(section ".init") extern void __start(void);
__declspec(section ".init") extern void __init_registers(void);
#if defined(VERSION_GMSJ01) || defined(VERSION_GMSP01)
__declspec(section ".init") extern void __init_data(void);
#else
__declspec(section ".init") extern void __init_data_80005380(void);
#endif
__declspec(section ".init") extern char _stack_addr[];
__declspec(section ".init") extern char _SDA_BASE_[];
+16 -4
View File
@@ -24,13 +24,25 @@ void EnableMetroTRKInterrupts(void);
extern unsigned long __DVDLongFileNameFlag;
extern unsigned long __PADSpec;
#if defined(VERSION_GMSP01) || defined(VERSION_GMSP01_NX)
extern unsigned char __ArenaLo[] AT_ADDRESS(0x80420D60);
extern char _stack_addr[] AT_ADDRESS(0x8041ED48);
#else
#if defined(VERSION_GMSJ01)
extern unsigned char __ArenaLo[] AT_ADDRESS(0x80426020);
extern char _stack_addr[] AT_ADDRESS(0x80424008);
#elif defined(VERSION_GMSJ01_01)
extern unsigned char __ArenaLo[] AT_ADDRESS(0x8041A520);
extern char _stack_addr[] AT_ADDRESS(0x80418518);
#elif defined(VERSION_GMSE01)
extern unsigned char __ArenaLo[] AT_ADDRESS(0x80429800);
extern char _stack_addr[] AT_ADDRESS(0x804277E8);
#elif defined(VERSION_GMSP01)
extern unsigned char __ArenaLo[] AT_ADDRESS(0x80420D60);
extern char _stack_addr[] AT_ADDRESS(0x8041ED48);
#elif defined(VERSION_GMSP01_NX)
extern unsigned char __ArenaLo[] AT_ADDRESS(0x8041E300);
extern char _stack_addr[] AT_ADDRESS(0x8041C2F0);
#else
#error "Unhandled ROM"
#endif
extern unsigned char __ArenaHi[];
// dummy entry points to the OS Exception vector
+15 -4
View File
@@ -70,12 +70,23 @@
} while (0);
// which header should these go in?
#if defined(VERSION_GMSP01) || defined(VERSION_GMSP01_NX)
extern char _stack_addr[] AT_ADDRESS(0x8041ED48);
extern unsigned char _stack_end[] AT_ADDRESS(0x8040ED44);
#else
#if defined(VERSION_GMSJ01)
extern char _stack_addr[] AT_ADDRESS(0x80424008);
extern unsigned char _stack_end[] AT_ADDRESS(0x80414004);
#elif defined(VERSION_GMSJ01_01)
extern char _stack_addr[] AT_ADDRESS(0x80418518);
extern unsigned char _stack_end[] AT_ADDRESS(0x80408518);
#elif defined(VERSION_GMSE01)
extern char _stack_addr[] AT_ADDRESS(0x804277E8);
extern unsigned char _stack_end[] AT_ADDRESS(0x804177E4);
#elif defined(VERSION_GMSP01)
extern char _stack_addr[] AT_ADDRESS(0x8041ED48);
extern unsigned char _stack_end[] AT_ADDRESS(0x8040ED44);
#elif defined(VERSION_GMSP01_NX)
extern char _stack_addr[] AT_ADDRESS(0x8041C2F0);
extern unsigned char _stack_end[] AT_ADDRESS(0x8040C2EC);
#else
#error "Unhandled ROM"
#endif
// .bss
+24 -3
View File
@@ -15,11 +15,20 @@
extern void InitMetroTRK();
#if defined(VERSION_GMSP01) || defined(VERSION_GMSP01_NX)
__declspec(section ".init") extern char _stack_addr[] AT_ADDRESS(0x8041ED48);
#else
#if defined(VERSION_GMSJ01)
__declspec(section ".init") extern char _stack_addr[] AT_ADDRESS(0x80424008);
#elif defined(VERSION_GMSJ01_01)
__declspec(section ".init") extern char _stack_addr[] AT_ADDRESS(0x80418518);
#elif defined(VERSION_GMSE01)
__declspec(section ".init") extern char _stack_addr[] AT_ADDRESS(0x804277E8);
#elif defined(VERSION_GMSP01)
__declspec(section ".init") extern char _stack_addr[] AT_ADDRESS(0x8041ED48);
#elif defined(VERSION_GMSP01_NX)
__declspec(section ".init") extern char _stack_addr[] AT_ADDRESS(0x8041C2F0);
#else
#error "Unhandled ROM"
#endif
__declspec(section ".init") extern char _SDA_BASE_[];
__declspec(section ".init") extern char _SDA2_BASE_[];
@@ -41,7 +50,11 @@ extern int main(int argc, char* argv[]);
extern void exit(int);
__declspec(section ".init") static void __init_registers(void);
#if defined(VERSION_GMSJ01) || defined(VERSION_GMSP01)
__declspec(section ".init") static void __init_data(void);
#else
__declspec(section ".init") void __init_data_80005380(void);
#endif
__declspec(section ".init") static void __check_pad3(void)
{
@@ -60,7 +73,11 @@ __declspec(section ".init") __declspec(weak) asm void __start(void)
stwu r1, -8(r1)
stw r0, 4(r1)
stw r0, 0(r1)
#if defined(VERSION_GMSJ01) || defined(VERSION_GMSP01)
bl __init_data
#else
bl __init_data_80005380
#endif
li r0, 0
lis r6, EXCEPTIONMASK_ADDR@ha
addi r6, r6, EXCEPTIONMASK_ADDR@l
@@ -186,7 +203,11 @@ asm static void __init_registers(void)
#endif // clang-format on
}
#if defined(VERSION_GMSJ01) || defined(VERSION_GMSP01)
static void __init_data(void)
#else
void __init_data_80005380(void)
#endif
{
__rom_copy_info* dci;
__bss_init_info* bii;