mirror of
https://github.com/patchzyy/wiicompiled
synced 2026-10-21 22:04:15 -04:00
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:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user