From bf12bb3d43435b6ab85e1ce43744a517a840e974 Mon Sep 17 00:00:00 2001 From: Sepalani Date: Mon, 30 Mar 2020 17:24:42 +0400 Subject: [PATCH] Boot: Add ConsoleType enum class --- Source/Core/Core/Boot/Boot_BS2Emu.cpp | 13 ++++--- Source/Core/Core/Core.h | 53 +++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/Source/Core/Core/Boot/Boot_BS2Emu.cpp b/Source/Core/Core/Boot/Boot_BS2Emu.cpp index 33e004598b..0c7de549a6 100644 --- a/Source/Core/Core/Boot/Boot_BS2Emu.cpp +++ b/Source/Core/Core/Boot/Boot_BS2Emu.cpp @@ -177,7 +177,8 @@ void CBoot::SetupGCMemory() // Console type - DevKit (retail ID == 0x00000003) see YAGCD 4.2.1.1.2 // TODO: determine why some games fail when using a retail ID. // (Seem to take different EXI paths, see Ikaruga for example) - PowerPC::HostWrite_U32(0x10000006, 0x8000002C); + const u32 console_type = static_cast(Core::ConsoleType::LatestDevkit); + PowerPC::HostWrite_U32(console_type, 0x8000002C); // Fake the VI Init of the IPL (YAGCD 4.2.1.4) PowerPC::HostWrite_U32(DiscIO::IsNTSC(SConfig::GetInstance().m_region) ? 0 : 1, 0x800000CC); @@ -372,10 +373,12 @@ bool CBoot::SetupWiiMemory(IOS::HLE::IOSC::ConsoleType console_type) Memory::Write_U32(0x0D15EA5E, 0x00000020); // Another magic word Memory::Write_U32(0x00000001, 0x00000024); // Unknown Memory::Write_U32(Memory::GetRamSizeReal(), 0x00000028); // MEM1 size 24MB - u32 board_model = console_type == IOS::HLE::IOSC::ConsoleType::RVT ? 0x10000021 : 0x00000023; - Memory::Write_U32(board_model, 0x0000002c); // Board Model - Memory::Write_U32(0x00000000, 0x00000030); // Init - Memory::Write_U32(0x817FEC60, 0x00000034); // Init + const Core::ConsoleType board_model = console_type == IOS::HLE::IOSC::ConsoleType::RVT ? + Core::ConsoleType::NDEV2_1 : + Core::ConsoleType::RVL_Retail3; + Memory::Write_U32(static_cast(board_model), 0x0000002c); // Board Model + Memory::Write_U32(0x00000000, 0x00000030); // Init + Memory::Write_U32(0x817FEC60, 0x00000034); // Init // 38, 3C should get start, size of FST through apploader Memory::Write_U32(0x8008f7b8, 0x000000e4); // Thread Init Memory::Write_U32(Memory::GetRamSizeReal(), 0x000000f0); // "Simulated memory size" (debug mode?) diff --git a/Source/Core/Core/Core.h b/Source/Core/Core/Core.h index 08d9b7a27d..b4c3122d57 100644 --- a/Source/Core/Core/Core.h +++ b/Source/Core/Core/Core.h @@ -37,6 +37,59 @@ enum class State Starting, }; +// Console type values based on: +// - YAGCD 4.2.1.1.2 +// - OSInit (GameCube ELF from Finding Nemo) +// - OSReportInfo (Wii ELF from Rayman Raving Rabbids) +enum class ConsoleType : u32 +{ + // 0x0XXXXXXX Retail units - Gamecube + HW1 = 1, + HW2 = 2, + LatestProductionBoard = 3, + Reserved = 4, + + // 0x0XXXXXXX Retail units - Wii + PreProductionBoard0 = 0x10, // Pre-production board 0 + PreProductionBoard1 = 0x11, // Pre-production board 1 + PreProductionBoard2_1 = 0x12, // Pre-production board 2-1 + PreProductionBoard2_2 = 0x20, // Pre-production board 2-2 + RVL_Retail1 = 0x21, + RVL_Retail2 = 0x22, + RVL_Retail3 = 0x23, + RVA1 = 0x100, // Revolution Arcade + + // 0x1XXXXXXX Devkits - Gamecube + // Emulators + MacEmulator = 0x10000000, // Mac Emulator + PcEmulator = 0x10000001, // PC Emulator + + // Embedded PowerPC series + Arthur = 0x10000002, // EPPC Arthur + Minnow = 0x10000003, // EPPC Minnow + + // Development HW + // Version = (console_type & 0x0fffffff) - 3 + FirstDevkit = 0x10000004, + SecondDevkit = 0x10000005, + LatestDevkit = 0x10000006, + ReservedDevkit = 0x10000007, + + // 0x1XXXXXXX Devkits - Wii + RevolutionEmulator = 0x10000008, // Revolution Emulator + NDEV1_0 = 0x10000010, // NDEV 1.0 + NDEV1_1 = 0x10000011, // NDEV 1.1 + NDEV1_2 = 0x10000012, // NDEV 1.2 + NDEV2_0 = 0x10000020, // NDEV 2.0 + NDEV2_1 = 0x10000021, // NDEV 2.1 + + // 0x2XXXXXXX TDEV-based emulation HW + // Version = (console_type & 0x0fffffff) - 3 + HW2TDEVSystem = 0x20000005, + LatestTDEVSystem = 0x20000006, + ReservedTDEVSystem = 0x20000007, +}; + bool Init(std::unique_ptr boot, const WindowSystemInfo& wsi); void Stop(); void Shutdown();