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:
patchzyy
2026-10-23 18:00:55 +02:00
committed by GitHub
parent 4c166a7eb1
commit ac99413d45
467 changed files with 72272 additions and 65657 deletions
+25 -18
View File
@@ -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});
}