From f4d8e527b5c81e4a181f41105a71aec932d3810a Mon Sep 17 00:00:00 2001 From: skidau Date: Mon, 2 Jan 2012 15:14:30 +1100 Subject: [PATCH] Updated the Gecko code handler to the latest version from Gecko OS 1.9.3.1. Added a check to ensure that the number of codes fits in memory (maximum 231 codes). Store a copy of codehandler.bin in the Sys directory. --- Data/Sys/codehandler.bin | Bin 0 -> 4288 bytes Source/Core/Common/Src/CommonPaths.h | 2 +- Source/Core/Core/Src/GeckoCode.cpp | 24 +++++++++++++++--------- 3 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 Data/Sys/codehandler.bin diff --git a/Data/Sys/codehandler.bin b/Data/Sys/codehandler.bin new file mode 100644 index 0000000000000000000000000000000000000000..7a95e724b1e69655f521c67e22e2b8c0479007dd GIT binary patch literal 4288 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 C_^81E literal 0 HcmV?d00001 diff --git a/Source/Core/Common/Src/CommonPaths.h b/Source/Core/Common/Src/CommonPaths.h index 150453928e..d319fb541e 100644 --- a/Source/Core/Common/Src/CommonPaths.h +++ b/Source/Core/Common/Src/CommonPaths.h @@ -126,7 +126,7 @@ #define WII_USA_SETTING "setting-usa.txt" #define WII_JAP_SETTING "setting-jpn.txt" -#define GECKO_CODE_HANDLER "kenobiwii.bin" +#define GECKO_CODE_HANDLER "codehandler.bin" // Subdirs in Sys #define GC_SYS_DIR "GC" diff --git a/Source/Core/Core/Src/GeckoCode.cpp b/Source/Core/Core/Src/GeckoCode.cpp index 2bbe101cee..c0b7af3779 100644 --- a/Source/Core/Core/Src/GeckoCode.cpp +++ b/Source/Core/Core/Src/GeckoCode.cpp @@ -118,6 +118,7 @@ void SetActiveCodes(const std::vector& gcodes) bool InstallCodeHandler() { + u32 codelist_location = 0x800028B8; // Debugger on location (0x800022A8 = Debugger off, using codehandleronly.bin) std::string data; std::string _rCodeHandlerFilename = File::GetSysDirectory() + GECKO_CODE_HANDLER; if (!File::ReadFileToString(false, _rCodeHandlerFilename.c_str(), data)) @@ -127,14 +128,14 @@ bool InstallCodeHandler() Memory::WriteBigEData((const u8*)data.data(), 0x80001800, data.length()); // Turn off Pause on start - Memory::Write_U32(0, 0x80001808); + Memory::Write_U32(0, 0x80002774); // Write the Game ID into the location expected by WiiRD Memory::WriteBigEData(Memory::GetPointer(0x80000000), 0x80001800, 6); // Create GCT in memory - Memory::Write_U32(0x00d0c0de, 0x800027d0); - Memory::Write_U32(0x00d0c0de, 0x800027d4); + Memory::Write_U32(0x00d0c0de, codelist_location); + Memory::Write_U32(0x00d0c0de, codelist_location + 4); std::lock_guard lk(active_codes_lock); @@ -151,15 +152,20 @@ bool InstallCodeHandler() for (; current_code < codes_end; ++current_code) { const GeckoCode::Code& code = *current_code; - Memory::Write_U32(code.address, 0x800027d8 + i); - Memory::Write_U32(code.data, 0x800027d8 + i + 4); - i += 8; + + // Make sure we have enough memory to hold the code list + if ((codelist_location + 24 + i) < 0x80003000) + { + Memory::Write_U32(code.address, codelist_location + 8 + i); + Memory::Write_U32(code.data, codelist_location + 12 + i); + i += 8; + } } } } - Memory::Write_U32(0xff000000, 0x800027d8 + i); - Memory::Write_U32(0x00000000, 0x800027d8 + i + 4); + Memory::Write_U32(0xff000000, codelist_location + 8 + i); + Memory::Write_U32(0x00000000, codelist_location + 12 + i); // Turn on codes Memory::Write_U8(1, 0x80001807); @@ -214,7 +220,7 @@ bool RunGeckoCode(GeckoCode& gecko_code) gecko_code.enabled = false; PanicAlertT("GeckoCode failed to run (CT%i CST%i) (%s)" - "\n(either a bad code or the code type is not yet supported. Try using the native code handler by placing the kenobiwii.bin file into the Sys directory and restarting Dolphin.)" + "\n(either a bad code or the code type is not yet supported. Try using the native code handler by placing the codehandler.bin file into the Sys directory and restarting Dolphin.)" , code.type, code.subtype, gecko_code.name.c_str()); return false; }