From ff1a11a332844e76a24f3f764198623bc918d1b0 Mon Sep 17 00:00:00 2001 From: TotalJustice <47043333+ITotalJustice@users.noreply.github.com> Date: Sat, 20 May 2023 23:49:41 +0100 Subject: [PATCH] add emunand detection --- src/main.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index c9dce6f..d204b1e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,6 +13,7 @@ constexpr u16 REGEX_SKIP = 0x100; u32 FW_VERSION{}; // set on startup u32 AMS_VERSION{}; // set on startup +bool IS_EMUNAND{}; // set on startup struct DebugEventInfo { u32 event_type; @@ -196,6 +197,25 @@ constexpr PatchEntry patches[] = { { "es", 0x0100000000000033, es_patterns, MAKEHOSVERSION(2,0,0) }, }; +struct EmummcPaths { + char unk[0x80]; + char nintendo[0x80]; +}; + +void smcAmsGetEmunandConfig(EmummcPaths* out_paths) { + SecmonArgs args{}; + args.X[0] = 0xF0000404; /* smcAmsGetEmunandConfig */ + args.X[1] = 0; /* EXO_EMUMMC_MMC_NAND*/ + args.X[2] = (u64)out_paths; /* out path */ + svcCallSecureMonitor(&args); +} + +bool is_emunand() { + EmummcPaths paths{}; + smcAmsGetEmunandConfig(&paths); + return (paths.unk[0] != '\0') || (paths.nintendo[0] != '\0'); +} + auto patcher(Handle handle, std::span data, u64 addr, std::span patterns) -> bool { for (auto& p : patterns) { // skip if version isn't valid @@ -318,6 +338,9 @@ auto apply_patch(const PatchEntry& patch) -> bool { } // namespace int main(int argc, char* argv[]) { + // check if we are emunand + IS_EMUNAND = is_emunand(); + for (auto& patch : patches) { apply_patch(patch); }