From 619a7b207462d6a4812612cdf88b50e377dd970b Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Thu, 16 Sep 2021 16:52:08 -0700 Subject: [PATCH] git subrepo pull emummc subrepo: subdir: "emummc" merged: "4e1ac0a7" upstream: origin: "https://github.com/m4xw/emuMMC" branch: "develop" commit: "c6a2e9cc" git-subrepo: version: "0.4.1" origin: "???" commit: "???" --- emummc/.gitrepo | 2 +- emummc/README.md | 16 ++++---- emummc/source/FS/FS_offsets.c | 8 ++++ emummc/source/FS/FS_versions.h | 3 ++ emummc/source/FS/offsets/1300.h | 59 +++++++++++++++++++++++++++ emummc/source/FS/offsets/1300_exfat.h | 59 +++++++++++++++++++++++++++ 6 files changed, 138 insertions(+), 9 deletions(-) create mode 100644 emummc/source/FS/offsets/1300.h create mode 100644 emummc/source/FS/offsets/1300_exfat.h diff --git a/emummc/.gitrepo b/emummc/.gitrepo index bdfcb3537..7ffb0cdc8 100644 --- a/emummc/.gitrepo +++ b/emummc/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/m4xw/emuMMC branch = develop - commit = 29deabb2cd46434c0d1b237cb74a823c02869f62 + commit = c6a2e9ccbef43567fc0707361119585efdf05b4c parent = 38f9a76ba028995ed3274da3a45b0254f09d1f59 method = rebase cmdver = 0.4.1 diff --git a/emummc/README.md b/emummc/README.md index a767aec34..b06b5a493 100644 --- a/emummc/README.md +++ b/emummc/README.md @@ -1,21 +1,21 @@ # emuMMC -*A SDMMC driver replacement for Nintendo's Filesystem Services, by **m4xw*** +*A SDMMC driver replacement for Nintendo's Filesystem Services, by **m4xw*** ### Supported Horizon Versions -**1.0.0 - 11.0.0** +**1.0.0 - 13.0.0** ## Features -* Arbitrary SDMMC backend selection +* Arbitrary SDMMC backend selection **This allows loading eMMC from SD or even SD from eMMC** -* On the fly hooking / patching, fully self-infesting +* On the fly hooking / patching, fully self-infesting **Only one payload required for all versions!** -* File-based SDMMC backend support (from SD) +* File-based SDMMC backend support (from SD) **This allows loading eMMC images from hekate-backups (split or not)** -* SDMMC device based sector offset (*currently eMMC only*) +* SDMMC device based sector offset (*currently eMMC only*) **Raw partition support for eMMC from SD with less performance overhead** -* Full support for `/Nintendo` folder redirection to a arbitrary path +* Full support for `/Nintendo` folder redirection to a arbitrary path **No 8 char length restriction!** -* exosphere based context configuration +* exosphere based context configuration **This includes full support for multiple emuMMC images** ## Compiling diff --git a/emummc/source/FS/FS_offsets.c b/emummc/source/FS/FS_offsets.c index 6165926aa..bc3519987 100644 --- a/emummc/source/FS/FS_offsets.c +++ b/emummc/source/FS/FS_offsets.c @@ -55,6 +55,8 @@ #include "offsets/1200_exfat.h" #include "offsets/1203.h" #include "offsets/1203_exfat.h" +#include "offsets/1300.h" +#include "offsets/1300_exfat.h" #include "../utils/fatal.h" #define GET_OFFSET_STRUCT_NAME(vers) g_offsets##vers @@ -121,6 +123,8 @@ DEFINE_OFFSET_STRUCT(_1200); DEFINE_OFFSET_STRUCT(_1200_EXFAT); DEFINE_OFFSET_STRUCT(_1203); DEFINE_OFFSET_STRUCT(_1203_EXFAT); +DEFINE_OFFSET_STRUCT(_1300); +DEFINE_OFFSET_STRUCT(_1300_EXFAT); const fs_offsets_t *get_fs_offsets(enum FS_VER version) { switch (version) { @@ -202,6 +206,10 @@ const fs_offsets_t *get_fs_offsets(enum FS_VER version) { return &(GET_OFFSET_STRUCT_NAME(_1203)); case FS_VER_12_0_3_EXFAT: return &(GET_OFFSET_STRUCT_NAME(_1203_EXFAT)); + case FS_VER_13_0_0: + return &(GET_OFFSET_STRUCT_NAME(_1300)); + case FS_VER_13_0_0_EXFAT: + return &(GET_OFFSET_STRUCT_NAME(_1300_EXFAT)); default: fatal_abort(Fatal_UnknownVersion); } diff --git a/emummc/source/FS/FS_versions.h b/emummc/source/FS/FS_versions.h index 825d1a636..7436a0caf 100644 --- a/emummc/source/FS/FS_versions.h +++ b/emummc/source/FS/FS_versions.h @@ -80,6 +80,9 @@ enum FS_VER FS_VER_12_0_3, FS_VER_12_0_3_EXFAT, + FS_VER_13_0_0, + FS_VER_13_0_0_EXFAT, + FS_VER_MAX, }; diff --git a/emummc/source/FS/offsets/1300.h b/emummc/source/FS/offsets/1300.h new file mode 100644 index 000000000..2503527ae --- /dev/null +++ b/emummc/source/FS/offsets/1300.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2019 m4xw + * Copyright (c) 2019 Atmosphere-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef __FS_1300_H__ +#define __FS_1300_H__ + +// Accessor vtable getters +#define FS_OFFSET_1300_SDMMC_ACCESSOR_GC 0x158C80 +#define FS_OFFSET_1300_SDMMC_ACCESSOR_SD 0x15AA90 +#define FS_OFFSET_1300_SDMMC_ACCESSOR_NAND 0x1591B0 + +// Hooks +#define FS_OFFSET_1300_SDMMC_WRAPPER_READ 0x154620 +#define FS_OFFSET_1300_SDMMC_WRAPPER_WRITE 0x1546E0 +#define FS_OFFSET_1300_RTLD 0x688 +#define FS_OFFSET_1300_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C))) + +#define FS_OFFSET_1300_CLKRST_SET_MIN_V_CLK_RATE 0x153820 + +// Misc funcs +#define FS_OFFSET_1300_LOCK_MUTEX 0x29690 +#define FS_OFFSET_1300_UNLOCK_MUTEX 0x296E0 + +#define FS_OFFSET_1300_SDMMC_WRAPPER_CONTROLLER_OPEN 0x154500 +#define FS_OFFSET_1300_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x154590 + +// Misc Data +#define FS_OFFSET_1300_SD_MUTEX 0xE133E8 +#define FS_OFFSET_1300_NAND_MUTEX 0xE0E768 +#define FS_OFFSET_1300_ACTIVE_PARTITION 0xE0E7A8 +#define FS_OFFSET_1300_SDMMC_DAS_HANDLE 0xDF6E18 + +// NOPs +#define FS_OFFSET_1300_SD_DAS_INIT 0x27744 + +// Nintendo Paths +#define FS_OFFSET_1300_NINTENDO_PATHS \ +{ \ + {.opcode_reg = 3, .adrp_offset = 0x0006EBE0, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 3, .adrp_offset = 0x0007BEEC, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 4, .adrp_offset = 0x00082294, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 4, .adrp_offset = 0x0009422C, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ +} + +#endif // __FS_1300_H__ diff --git a/emummc/source/FS/offsets/1300_exfat.h b/emummc/source/FS/offsets/1300_exfat.h new file mode 100644 index 000000000..08dfc3965 --- /dev/null +++ b/emummc/source/FS/offsets/1300_exfat.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2019 m4xw + * Copyright (c) 2019 Atmosphere-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef __FS_1300_EXFAT_H__ +#define __FS_1300_EXFAT_H__ + +// Accessor vtable getters +#define FS_OFFSET_1300_EXFAT_SDMMC_ACCESSOR_GC 0x158C80 +#define FS_OFFSET_1300_EXFAT_SDMMC_ACCESSOR_SD 0x15AA90 +#define FS_OFFSET_1300_EXFAT_SDMMC_ACCESSOR_NAND 0x1591B0 + +// Hooks +#define FS_OFFSET_1300_EXFAT_SDMMC_WRAPPER_READ 0x154620 +#define FS_OFFSET_1300_EXFAT_SDMMC_WRAPPER_WRITE 0x1546E0 +#define FS_OFFSET_1300_EXFAT_RTLD 0x688 +#define FS_OFFSET_1300_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C))) + +#define FS_OFFSET_1300_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x153820 + +// Misc funcs +#define FS_OFFSET_1300_EXFAT_LOCK_MUTEX 0x29690 +#define FS_OFFSET_1300_EXFAT_UNLOCK_MUTEX 0x296E0 + +#define FS_OFFSET_1300_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x154500 +#define FS_OFFSET_1300_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x154590 + +// Misc Data +#define FS_OFFSET_1300_EXFAT_SD_MUTEX 0xE203E8 +#define FS_OFFSET_1300_EXFAT_NAND_MUTEX 0xE1B768 +#define FS_OFFSET_1300_EXFAT_ACTIVE_PARTITION 0xE1B7A8 +#define FS_OFFSET_1300_EXFAT_SDMMC_DAS_HANDLE 0xE03E18 + +// NOPs +#define FS_OFFSET_1300_EXFAT_SD_DAS_INIT 0x27744 + +// Nintendo Paths +#define FS_OFFSET_1300_EXFAT_NINTENDO_PATHS \ +{ \ + {.opcode_reg = 3, .adrp_offset = 0x0006EBE0, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 3, .adrp_offset = 0x0007BEEC, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 4, .adrp_offset = 0x00082294, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 4, .adrp_offset = 0x0009422C, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ +} + +#endif // __FS_1300_EXFAT_H__