NTSC-U and NTSC-J support (#326)

* add ntsc-u and ntsc-j support

Co-authored-by: DarthMDev <mgracer48@yahoo.com>
Co-authored-by: rooklz <rookieb@muzo-works.com>

* hash inc files and require project for shards

* port remaining stale rr us hooks

* drop map report generation

* drop one-off region porters

---------

Co-authored-by: DarthMDev <mgracer48@yahoo.com>
Co-authored-by: rooklz <rookieb@muzo-works.com>
This commit is contained in:
patchzyy
2026-10-21 17:37:44 +02:00
committed by GitHub
parent ad95c5c7da
commit e9f1fdd77c
95 changed files with 64733 additions and 646 deletions
+22 -22
View File
@@ -20,7 +20,7 @@ constexpr uint32_t kJobSize = 0x18u;
bool ShouldRetryThpPrepareAfterClose(uint32_t callback, uint32_t arg, uint32_t result)
{
if (callback != 0x80529D68u || result != 0) {
if (callback != MKW_GADDR(80529D68) || result != 0) {
return false;
}
if (arg == 0 || !Memory::Contains(arg + 0xACu, 4)) {
@@ -30,11 +30,11 @@ bool ShouldRetryThpPrepareAfterClose(uint32_t callback, uint32_t arg, uint32_t r
if (state != 0) {
return false;
}
if (!Memory::Contains(0x809BECF0u, 4) || !Memory::Contains(0x809BEBA0u, 4)) {
if (!Memory::Contains(MKW_GADDR(809BECF0), 4) || !Memory::Contains(MKW_GADDR(809BEBA0), 4)) {
return false;
}
const uint32_t thpInit = Memory::Read32(0x809BECF0u);
const uint32_t thpOpen = Memory::Read32(0x809BEBA0u);
const uint32_t thpInit = Memory::Read32(MKW_GADDR(809BECF0));
const uint32_t thpOpen = Memory::Read32(MKW_GADDR(809BEBA0));
return thpInit != 0 && thpOpen != 0;
}
@@ -52,23 +52,23 @@ uint32_t RunMovieManagerPrepareAsync(uint32_t manager, CpuContext* cpu)
CpuContextScope scope(cpu);
cpu->gpr[3] = manager + 0x28u;
cpu->gpr[4] = 0;
InvokeIndirectCpu(0x80550CC0u, cpu);
InvokeIndirectCpu(MKW_GADDR(80550CC0), cpu);
return cpu->gpr[3];
};
uint32_t openResult = callThpPlayerOpen();
if (openResult == 0 && ShouldRetryThpPrepareAfterClose(0x80529D68u, manager, 0)) {
if (openResult == 0 && ShouldRetryThpPrepareAfterClose(MKW_GADDR(80529D68), manager, 0)) {
{
CpuContextScope scope(cpu);
InvokeIndirectCpu(0x80551658u, cpu); // THP__PlayerStop
InvokeIndirectCpu(0x80550F48u, cpu); // THP__PlayerClose
InvokeIndirectCpu(MKW_GADDR(80551658), cpu); // THP__PlayerStop
InvokeIndirectCpu(MKW_GADDR(80550F48), cpu); // THP__PlayerClose
}
if (Memory::Contains(0x809BEBA0u, 8) && Memory::Read32(0x809BEBA0u) != 0) {
Memory::Write32(0x809BEBA0u, 0);
Memory::Write8(0x809BEBA4u, 0);
Memory::Write8(0x809BEBA5u, 0);
Memory::Write8(0x809BEBA6u, 0);
Memory::Write8(0x809BEBA7u, 0);
if (Memory::Contains(MKW_GADDR(809BEBA0), 8) && Memory::Read32(MKW_GADDR(809BEBA0)) != 0) {
Memory::Write32(MKW_GADDR(809BEBA0), 0);
Memory::Write8(MKW_GADDR(809BEBA4), 0);
Memory::Write8(MKW_GADDR(809BEBA5), 0);
Memory::Write8(MKW_GADDR(809BEBA6), 0);
Memory::Write8(MKW_GADDR(809BEBA7), 0);
}
openResult = callThpPlayerOpen();
}
@@ -81,8 +81,8 @@ uint32_t RunMovieManagerPrepareAsync(uint32_t manager, CpuContext* cpu)
{
CpuContextScope scope(cpu);
cpu->gpr[3] = manager + 0x10u;
InvokeIndirectCpu(0x80551D38u, cpu); // THP__PlayerGetVideoInfo
InvokeIndirectCpu(0x80550F9Cu, cpu); // THP__PlayerCalcNeedMemory
InvokeIndirectCpu(MKW_GADDR(80551D38), cpu); // THP__PlayerGetVideoInfo
InvokeIndirectCpu(MKW_GADDR(80550F9C), cpu); // THP__PlayerCalcNeedMemory
}
const uint32_t needMemory = cpu->gpr[3];
Memory::Write32(manager + 0x20u, needMemory);
@@ -92,18 +92,18 @@ uint32_t RunMovieManagerPrepareAsync(uint32_t manager, CpuContext* cpu)
{
CpuContextScope scope(cpu);
cpu->gpr[3] = setBufferArg;
InvokeIndirectCpu(0x80551054u, cpu); // THP__PlayerSetBuffer
InvokeIndirectCpu(MKW_GADDR(80551054), cpu); // THP__PlayerSetBuffer
}
const uint32_t mode = Memory::Read32(manager + 0xA8u);
const uint32_t audioSystem = Memory::Read32(0x8088FDB8u + (mode << 2));
const uint32_t audioSystem = Memory::Read32(MKW_GADDR(8088FDB8) + (mode << 2));
uint32_t prepareResult = 0;
{
CpuContextScope scope(cpu);
cpu->gpr[3] = Memory::Read32(manager + 0x24u);
cpu->gpr[4] = audioSystem;
cpu->gpr[5] = 0;
InvokeIndirectCpu(0x80551378u, cpu); // THP__PlayerPrepare
InvokeIndirectCpu(MKW_GADDR(80551378), cpu); // THP__PlayerPrepare
prepareResult = cpu->gpr[3];
}
if (prepareResult != 0) {
@@ -162,7 +162,7 @@ extern "C" void TaskThread_run_HLE_80242d7c(CpuContext* ctx) {
cpu->gpr[3] = taskThread + kTaskMessageQueueOffset;
cpu->gpr[4] = outMsgPtr;
cpu->gpr[5] = 1; // OS_MESSAGE_BLOCK
InvokeIndirectCpu(0x801A7424u, cpu); // OSReceiveMessage
InvokeIndirectCpu(MKW_GADDR(801A7424), cpu); // OSReceiveMessage
}
const uint32_t job = Memory::Read32(outMsgPtr);
@@ -176,7 +176,7 @@ extern "C" void TaskThread_run_HLE_80242d7c(CpuContext* ctx) {
if (callback != 0) {
CpuContextScope scope(cpu);
if (callback == 0x80529D68u) {
if (callback == MKW_GADDR(80529D68)) {
RunMovieManagerPrepareAsync(arg, cpu);
} else {
cpu->gpr[3] = arg;
@@ -198,7 +198,7 @@ extern "C" void TaskThread_run_HLE_80242d7c(CpuContext* ctx) {
cpu->gpr[3] = doneQueue;
cpu->gpr[4] = token;
cpu->gpr[5] = 0; // OS_MESSAGE_NOBLOCK
InvokeIndirectCpu(0x801A735Cu, cpu); // OSSendMessage
InvokeIndirectCpu(MKW_GADDR(801A735C), cpu); // OSSendMessage
}
}
}