mirror of
https://github.com/patchzyy/wiicompiled
synced 2026-10-25 23:34:34 -04:00
v0.9.0 (v1.0 beta) (#338)
* move aurora to the aurora-wiicompiled submodule (#315) * Update settings_overlay.cpp (#257) * Simplify controller settings menu (#317) * simplify controller settings menu * platform pairing hint * build for x86-64-v2 on older linux cpus (#319) * Real Wii Remote support over Bluetooth (#323) * pass real wii remotes through emulated bluetooth * build bluetooth tests on macos ci * address review comments * cancel replaced bluetooth reads * Run GX on its own thread (#325) * 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> * Keyboard input for friend code entry (#327) * keyboard input for friend code entry * add new guest imports to synthetic test * replace per-address region table with range map (#328) * paste friend codes from clipboard (#329) * Verify dependency archive hashes (#330) * verify dependency archive hashes * verify cached cppwinrt tool * check dependency path types * Check CPU support before building (#331) * check cpu support before building * build for x86-64-v2 on windows and intel macs * bump aurora for fog fsel fix * add vsync option (#333) * Add exe icons (#334) * add exe icons * rebuild icon resource on ico change * drop icon rebuild tracking * Fix bugs found in forks (#336) * port fixes found in forks * fill whole disk id * dump kamek overlay on crash (#335) * bump aurora and version to 0.9.0 --------- Co-authored-by: DarthMDev <mgracer48@yahoo.com> Co-authored-by: rooklz <rookieb@muzo-works.com>
This commit is contained in:
@@ -334,8 +334,8 @@ void SystemBridge::Initialize() {
|
||||
// These set up vtables and other critical infrastructure
|
||||
RT_LOG(RT_TAG_RUNTIME) << "Running static constructors for main DOL..." << std::endl;
|
||||
|
||||
const uint32_t dolCtorStart = 0x80244DE0;
|
||||
const uint32_t dolCtorEnd = 0x80244EA0;
|
||||
const uint32_t dolCtorStart = MKW_GADDR(80244DE0);
|
||||
const uint32_t dolCtorEnd = MKW_GADDR(80244EA0);
|
||||
|
||||
int dolCount = 0;
|
||||
for (uint32_t addr = dolCtorStart; addr < dolCtorEnd; addr += 4) {
|
||||
@@ -374,8 +374,8 @@ void SystemBridge::Initialize() {
|
||||
RT_LOG(RT_TAG_RUNTIME) << "Running static constructors for StaticR.rel..." << std::endl;
|
||||
|
||||
// Define range for StaticR.rel .ctors
|
||||
const uint32_t ctorStart = 0x8088f400;
|
||||
const uint32_t ctorEnd = 0x8088f704;
|
||||
const uint32_t ctorStart = MKW_GADDR(8088f400);
|
||||
const uint32_t ctorEnd = MKW_GADDR(8088f704);
|
||||
|
||||
int count = 0;
|
||||
for (uint32_t addr = ctorStart; addr < ctorEnd; addr += 4) {
|
||||
@@ -413,14 +413,18 @@ void SystemBridge::Initialize() {
|
||||
}
|
||||
|
||||
void SystemBridge::WriteGuestMemorySnapshot(std::ostream& os, const std::filesystem::path& mem1Path) {
|
||||
auto writeRegion = [&](const char* label, uint32_t base, uint32_t size,
|
||||
const std::filesystem::path& path) {
|
||||
std::ofstream dump(path, std::ios::binary | std::ios::trunc);
|
||||
dump.write(reinterpret_cast<const char*>(Memory::GetPointer(base, size)), size);
|
||||
os << "[runtime] " << label << " snapshot written to " << RuntimeConfigFile::PathToUtf8(path)
|
||||
<< (dump.good() ? "" : " (write failed)") << std::endl;
|
||||
};
|
||||
|
||||
constexpr uint32_t kMem1Base = 0x80000000u;
|
||||
constexpr uint32_t kMem1Size = 0x01800000u;
|
||||
if (Memory::Contains(kMem1Base, kMem1Size)) {
|
||||
std::ofstream dump(mem1Path, std::ios::binary | std::ios::trunc);
|
||||
dump.write(reinterpret_cast<const char*>(Memory::GetPointer(kMem1Base, kMem1Size)),
|
||||
kMem1Size);
|
||||
os << "[runtime] MEM1 snapshot written to " << RuntimeConfigFile::PathToUtf8(mem1Path)
|
||||
<< (dump.good() ? "" : " (write failed)") << std::endl;
|
||||
writeRegion("MEM1", kMem1Base, kMem1Size, mem1Path);
|
||||
}
|
||||
constexpr uint32_t kMem2Base = 0x90000000u;
|
||||
for (uint32_t mem2Size : {0x08000000u, 0x04000000u}) {
|
||||
@@ -429,13 +433,16 @@ void SystemBridge::WriteGuestMemorySnapshot(std::ostream& os, const std::filesys
|
||||
}
|
||||
std::filesystem::path mem2Path = mem1Path;
|
||||
mem2Path += ".mem2";
|
||||
std::ofstream dump(mem2Path, std::ios::binary | std::ios::trunc);
|
||||
dump.write(reinterpret_cast<const char*>(Memory::GetPointer(kMem2Base, mem2Size)),
|
||||
mem2Size);
|
||||
os << "[runtime] MEM2 snapshot written to " << RuntimeConfigFile::PathToUtf8(mem2Path)
|
||||
<< (dump.good() ? "" : " (write failed)") << std::endl;
|
||||
writeRegion("MEM2", kMem2Base, mem2Size, mem2Path);
|
||||
break;
|
||||
}
|
||||
constexpr uint32_t kKamekBase = 0x81800000u;
|
||||
constexpr uint32_t kKamekSize = 0x00200000u;
|
||||
if (Memory::Contains(kKamekBase, kKamekSize)) {
|
||||
std::filesystem::path kamekPath = mem1Path;
|
||||
kamekPath += ".kamek";
|
||||
writeRegion("Kamek overlay", kKamekBase, kKamekSize, kamekPath);
|
||||
}
|
||||
}
|
||||
|
||||
void SystemBridge::DumpCrashHeuristics(std::ostream& os, const CpuContext* cpu,
|
||||
@@ -484,7 +491,7 @@ void SystemBridge::SeedLowMemDefaults(const Memory::Config& config) {
|
||||
};
|
||||
|
||||
std::vector<SeedEntry> entries;
|
||||
constexpr uint32_t kMem1ArenaLoDefault = 0x80399180u;
|
||||
const uint32_t kMem1ArenaLoDefault = ::GuestRegion::CurrentFacts().mem1ArenaLo;
|
||||
uint32_t mem1ArenaHiDefault = 0x817f0520u;
|
||||
constexpr uint32_t kBusClockHz =
|
||||
static_cast<uint32_t>(TimeBaseContract::kBusClockHz);
|
||||
@@ -508,10 +515,10 @@ void SystemBridge::SeedLowMemDefaults(const Memory::Config& config) {
|
||||
// Retro Rewind reads the region byte directly from here while building its
|
||||
// Retro-WFC payload URL, and OSGetAppGamename reads the app code mirrors
|
||||
// at 0x80003180/0x80003194 while building NAS auth fields.
|
||||
entries.push_back({0x80000000u, 0x524D4350u, "Disc game code"}); // RMCP
|
||||
entries.push_back({0x80000000u, ::GuestRegion::CurrentFacts().gameCode, "Disc game code"});
|
||||
entries.push_back({0x80000004u, 0x30310100u, "Disc maker/id"}); // 01 + disc 1
|
||||
entries.push_back({0x80003180u, 0x524D4350u, "OS app game code"}); // RMCP
|
||||
entries.push_back({0x80003194u, 0x524D4350u, "OS app gamename"}); // RMCP
|
||||
entries.push_back({0x80003180u, ::GuestRegion::CurrentFacts().gameCode, "OS app game code"});
|
||||
entries.push_back({0x80003194u, ::GuestRegion::CurrentFacts().gameCode, "OS app gamename"});
|
||||
if (RuntimeProduct::IsRetroRewind()) {
|
||||
entries.push_back({0x800017D8u, 0x00000001u, "Retro Rewind recomp runtime marker", true});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user