From da0dc52a8478f233349a48d792c9b98cc45d1a60 Mon Sep 17 00:00:00 2001 From: BullyWiiPlaza Date: Mon, 28 Aug 2017 14:49:01 +0200 Subject: [PATCH] Implement working SD card cheats (thanks Maschell) --- src/main.cpp | 1 - src/sd_cheats.cpp | 25 +++++++++++++++++++++---- src/tcp_gecko.cpp | 1 + tcpgecko.elf | Bin 247468 -> 247724 bytes 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 4089dc9..2cfe38d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -20,7 +20,6 @@ #include "patcher/function_patcher_gx2.h" #include "patcher/function_patcher_coreinit.h" #include "utils/sd_ip_reader.hpp" -#include "sd_cheats.h" bool isCodeHandlerInstalled; diff --git a/src/sd_cheats.cpp b/src/sd_cheats.cpp index 869dfd9..381c4bf 100644 --- a/src/sd_cheats.cpp +++ b/src/sd_cheats.cpp @@ -1,6 +1,5 @@ #include // snprintf #include // memcpy, memset -#include "sd_cheats.h" #include "utils/logger.h" #include "fs/sd_fat_devoptab.h" #include "fs/fs_utils.h" @@ -8,6 +7,9 @@ #include "tcp_gecko.h" #include "kernel/syscalls.h" +#define CODE_HANDLER_ENABLED_ADDRESS 0x10014CFC +#define CODE_LIST_START_ADDRESS 0x01133000 + #define EXTENSION_SIZE 6 #define SD_FILE_PATH_HEADER_LENGTH 10 #define TITLE_ID_LEADING_ZEROS 3 @@ -30,6 +32,12 @@ void kernelCopyData2(unsigned char *destinationBuffer, unsigned char *sourceBuff DCFlushRange(destinationBuffer, (u32) length); } +void setCodeHandlerEnabled(bool enabled) { + unsigned int *codeHandlerEnabled = (unsigned int *) CODE_HANDLER_ENABLED_ADDRESS; + *codeHandlerEnabled = (unsigned int) enabled; + log_printf("Code handler status: %i\n", enabled); +} + void considerApplyingSDCheats() { u64 currentTitleID = OSGetTitleID(); @@ -38,19 +46,23 @@ void considerApplyingSDCheats() { } else { log_print("Title ID changed\n"); cachedTitleID = currentTitleID; + log_print("Mounting...\n"); int result = mount_sd_fat("sd"); if (result < 0) { log_printf("Mounting error: %i\n", result); return; + } else { + log_print("Mounted!\n"); } + // Construct the file path unsigned char filePath[CODES_FILE_PATH_SIZE]; memset(filePath, '0', sizeof(filePath)); memcpy(filePath, "sd:/codes/", SD_FILE_PATH_HEADER_LENGTH); // File path header - log_printf("Title ID: %lu\n", currentTitleID); char asciiTitleID[TITLE_ID_LENGTH]; snprintf(asciiTitleID, TITLE_ID_LENGTH, "%llX", currentTitleID); + log_printf("Title ID: %s\n", asciiTitleID); memcpy(filePath + SD_FILE_PATH_HEADER_LENGTH + TITLE_ID_LEADING_ZEROS, asciiTitleID, TITLE_ID_LENGTH); // Title ID memcpy(filePath + SD_FILE_PATH_HEADER_LENGTH + TITLE_ID_LENGTH, ".gctu", EXTENSION_SIZE); // Extension @@ -62,21 +74,26 @@ void considerApplyingSDCheats() { result = LoadFileToMem((const char *) filePath, &codes, &codesSize); if (result < 0) { - log_printf("Reading error: %i\n", result); + log_printf("LoadFileToMem() error: %i\n", result); + setCodeHandlerEnabled(false); // Error, we won't write any codes goto CLEANUP; } log_print("Copying...\n"); - kernelCopyData2((unsigned char *) 0x01133000, codes, codesSize); + kernelCopyData2((unsigned char *) CODE_LIST_START_ADDRESS, codes, codesSize); log_print("Copied!\n"); + setCodeHandlerEnabled(true); CLEANUP: + log_print("Unmounting...\n"); result = unmount_sd_fat("sd"); if (result < 0) { log_printf("Unmounting error: %i\n", result); + } else { + log_print("Unmouted!\n"); } } } \ No newline at end of file diff --git a/src/tcp_gecko.cpp b/src/tcp_gecko.cpp index 15b2419..e63ae45 100644 --- a/src/tcp_gecko.cpp +++ b/src/tcp_gecko.cpp @@ -1513,6 +1513,7 @@ static int startTCPGeckoThread(int argc, void *argv) { // considerApplyingSDCheats(); // log_print("Running code handler...\n"); codeHandlerFunction(); + // log_print("Code handler done executing...\n"); if (assemblySize > 0) { executeAssembly(); diff --git a/tcpgecko.elf b/tcpgecko.elf index d1d6e70d487cbc1caf37bfd9663926f61e2dc77d..6a79b43cfc4527b86a469fac2579e9b619b81f2d 100644 GIT binary patch delta 30830 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