From bab60d8ade6975d8a8bac4d7f98335f855d02d14 Mon Sep 17 00:00:00 2001 From: hexkyz Date: Tue, 10 Nov 2026 20:42:30 +0000 Subject: [PATCH 1/7] ams: add enum recognition for 23.5.0 --- fusee/program/source/fusee_setup_horizon.cpp | 2 ++ fusee/program/source/fusee_stratosphere.cpp | 16 ++++++++++++++++ .../libexosphere/include/exosphere/pkg2.hpp | 2 +- libraries/libexosphere/source/fuse/fuse_api.cpp | 1 + .../include/stratosphere/hos/hos_types.hpp | 1 + .../include/vapours/ams/ams_api_version.h | 6 +++--- .../include/vapours/ams/ams_target_firmware.h | 4 +++- 7 files changed, 27 insertions(+), 5 deletions(-) diff --git a/fusee/program/source/fusee_setup_horizon.cpp b/fusee/program/source/fusee_setup_horizon.cpp index b978e513b..7936abde5 100644 --- a/fusee/program/source/fusee_setup_horizon.cpp +++ b/fusee/program/source/fusee_setup_horizon.cpp @@ -271,6 +271,8 @@ namespace ams::nxboot { return ams::TargetFirmware_22_0_0; } else if (std::memcmp(package1 + 0x10, "20260730", 8) == 0) { return ams::TargetFirmware_23_0_0; + } else if (std::memcmp(package1 + 0x10, "20260930", 8) == 0) { + return ams::TargetFirmware_23_5_0; } break; default: diff --git a/fusee/program/source/fusee_stratosphere.cpp b/fusee/program/source/fusee_stratosphere.cpp index 884d691a5..a93f6244b 100644 --- a/fusee/program/source/fusee_stratosphere.cpp +++ b/fusee/program/source/fusee_stratosphere.cpp @@ -200,6 +200,9 @@ namespace ams::nxboot { FsVersion_23_0_0, FsVersion_23_0_0_Exfat, + + FsVersion_23_5_0, + FsVersion_23_5_0_Exfat, FsVersion_Count, }; @@ -314,6 +317,9 @@ namespace ams::nxboot { { 0x34, 0x38, 0x3E, 0xE7, 0x99, 0x92, 0x63, 0x40 }, /* FsVersion_23_0_0 */ { 0xFD, 0xAF, 0x16, 0x32, 0x88, 0xE1, 0x08, 0x05 }, /* FsVersion_23_0_0_Exfat */ + + { 0x01, 0xED, 0x6B, 0x87, 0x4C, 0x1F, 0xEF, 0x41 }, /* FsVersion_23_5_0 */ + { 0x7B, 0x90, 0x28, 0x37, 0xF2, 0x00, 0x27, 0x49 }, /* FsVersion_23_5_0_Exfat */ }; const InitialProcessBinaryHeader *FindInitialProcessBinary(const pkg2::Package2Header *header, const u8 *data, ams::TargetFirmware target_firmware) { @@ -749,6 +755,16 @@ namespace ams::nxboot { AddPatch(fs_meta, 0x1BE8D5, NogcPatch0, sizeof(NogcPatch0)); AddPatch(fs_meta, 0x191540, NogcPatch1, sizeof(NogcPatch1)); break; + case FsVersion_23_5_0: + AddPatch(fs_meta, 0x1BE8CD, NogcPatch0, sizeof(NogcPatch0)); + AddPatch(fs_meta, 0x1B36E5, NogcPatch0, sizeof(NogcPatch0)); + AddPatch(fs_meta, 0x186350, NogcPatch1, sizeof(NogcPatch1)); + break; + case FsVersion_23_5_0_Exfat: + AddPatch(fs_meta, 0x1BE8CD, NogcPatch0, sizeof(NogcPatch0)); + AddPatch(fs_meta, 0x1BE8E5, NogcPatch0, sizeof(NogcPatch0)); + AddPatch(fs_meta, 0x191550, NogcPatch1, sizeof(NogcPatch1)); + break; default: break; } diff --git a/libraries/libexosphere/include/exosphere/pkg2.hpp b/libraries/libexosphere/include/exosphere/pkg2.hpp index be84a6ae7..bda1b3eb5 100644 --- a/libraries/libexosphere/include/exosphere/pkg2.hpp +++ b/libraries/libexosphere/include/exosphere/pkg2.hpp @@ -24,7 +24,7 @@ namespace ams::pkg2 { constexpr inline int PayloadCount = 3; constexpr inline int MinimumValidDataVersion = 0; /* We allow older package2 to load; this value is currently 0x18 in Nintendo's code. */ - constexpr inline int CurrentBootloaderVersion = 0x18; + constexpr inline int CurrentBootloaderVersion = 0x19; struct Package2Meta { using Magic = util::FourCC<'P','K','2','1'>; diff --git a/libraries/libexosphere/source/fuse/fuse_api.cpp b/libraries/libexosphere/source/fuse/fuse_api.cpp index 2c0eb1f14..090ab14db 100644 --- a/libraries/libexosphere/source/fuse/fuse_api.cpp +++ b/libraries/libexosphere/source/fuse/fuse_api.cpp @@ -177,6 +177,7 @@ namespace ams::fuse { } constexpr const TargetFirmware FuseVersionIncrementFirmwares[] = { + TargetFirmware_23_5_0, TargetFirmware_23_0_0, TargetFirmware_22_0_0, TargetFirmware_21_0_0, diff --git a/libraries/libstratosphere/include/stratosphere/hos/hos_types.hpp b/libraries/libstratosphere/include/stratosphere/hos/hos_types.hpp index 9c90970a5..eb3f079c2 100644 --- a/libraries/libstratosphere/include/stratosphere/hos/hos_types.hpp +++ b/libraries/libstratosphere/include/stratosphere/hos/hos_types.hpp @@ -105,6 +105,7 @@ namespace ams::hos { Version_22_5_0 = ::ams::TargetFirmware_22_5_0, Version_23_0_0 = ::ams::TargetFirmware_23_0_0, Version_23_0_1 = ::ams::TargetFirmware_23_0_1, + Version_23_5_0 = ::ams::TargetFirmware_23_5_0, Version_Current = ::ams::TargetFirmware_Current, diff --git a/libraries/libvapours/include/vapours/ams/ams_api_version.h b/libraries/libvapours/include/vapours/ams/ams_api_version.h index dd2b85fc4..492de4d05 100644 --- a/libraries/libvapours/include/vapours/ams/ams_api_version.h +++ b/libraries/libvapours/include/vapours/ams/ams_api_version.h @@ -17,10 +17,10 @@ #define ATMOSPHERE_RELEASE_VERSION_MAJOR 1 #define ATMOSPHERE_RELEASE_VERSION_MINOR 12 -#define ATMOSPHERE_RELEASE_VERSION_MICRO 1 +#define ATMOSPHERE_RELEASE_VERSION_MICRO 2 #define ATMOSPHERE_RELEASE_VERSION ATMOSPHERE_RELEASE_VERSION_MAJOR, ATMOSPHERE_RELEASE_VERSION_MINOR, ATMOSPHERE_RELEASE_VERSION_MICRO #define ATMOSPHERE_SUPPORTED_HOS_VERSION_MAJOR 23 -#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MINOR 0 -#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MICRO 1 +#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MINOR 5 +#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MICRO 0 diff --git a/libraries/libvapours/include/vapours/ams/ams_target_firmware.h b/libraries/libvapours/include/vapours/ams/ams_target_firmware.h index d16f94e70..bf5bbdabd 100644 --- a/libraries/libvapours/include/vapours/ams/ams_target_firmware.h +++ b/libraries/libvapours/include/vapours/ams/ams_target_firmware.h @@ -103,8 +103,9 @@ #define ATMOSPHERE_TARGET_FIRMWARE_22_5_0 ATMOSPHERE_TARGET_FIRMWARE(22, 5, 0) #define ATMOSPHERE_TARGET_FIRMWARE_23_0_0 ATMOSPHERE_TARGET_FIRMWARE(23, 0, 0) #define ATMOSPHERE_TARGET_FIRMWARE_23_0_1 ATMOSPHERE_TARGET_FIRMWARE(23, 0, 1) +#define ATMOSPHERE_TARGET_FIRMWARE_23_5_0 ATMOSPHERE_TARGET_FIRMWARE(23, 5, 0) -#define ATMOSPHERE_TARGET_FIRMWARE_CURRENT ATMOSPHERE_TARGET_FIRMWARE_23_0_1 +#define ATMOSPHERE_TARGET_FIRMWARE_CURRENT ATMOSPHERE_TARGET_FIRMWARE_23_5_0 #define ATMOSPHERE_TARGET_FIRMWARE_MIN ATMOSPHERE_TARGET_FIRMWARE(0, 0, 0) #define ATMOSPHERE_TARGET_FIRMWARE_MAX ATMOSPHERE_TARGET_FIRMWARE_CURRENT @@ -200,6 +201,7 @@ namespace ams { TargetFirmware_22_5_0 = ATMOSPHERE_TARGET_FIRMWARE_22_5_0, TargetFirmware_23_0_0 = ATMOSPHERE_TARGET_FIRMWARE_23_0_0, TargetFirmware_23_0_1 = ATMOSPHERE_TARGET_FIRMWARE_23_0_1, + TargetFirmware_23_5_0 = ATMOSPHERE_TARGET_FIRMWARE_23_5_0, TargetFirmware_Current = ATMOSPHERE_TARGET_FIRMWARE_CURRENT, From 1eb3b08c770ccbbdf8deb05c695fabc095e4ca0b Mon Sep 17 00:00:00 2001 From: hexkyz Date: Tue, 10 Nov 2026 20:55:47 +0000 Subject: [PATCH 2/7] loader: update USB 3.0 patches for 23.5.0 --- stratosphere/loader/source/ldr_embedded_usb_patches.inc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stratosphere/loader/source/ldr_embedded_usb_patches.inc b/stratosphere/loader/source/ldr_embedded_usb_patches.inc index 1ed107817..f19892681 100644 --- a/stratosphere/loader/source/ldr_embedded_usb_patches.inc +++ b/stratosphere/loader/source/ldr_embedded_usb_patches.inc @@ -102,5 +102,6 @@ constexpr inline const EmbeddedPatch Usb30ForceEnablePatches[] = { { ParseModuleId("766D0C2277207B40AD9B8DE309396D50CCE94885"), util::size(Usb30ForceEnablePatches_21_0_0), Usb30ForceEnablePatches_21_0_0 }, /* 21.0.0 */ { ParseModuleId("B734339F2280170AF0200573F9B943242CEF8C15"), util::size(Usb30ForceEnablePatches_22_0_0), Usb30ForceEnablePatches_22_0_0 }, /* 22.0.0 - 22.1.0 */ { ParseModuleId("AD8D36F2029822A4C498F055ADBDAA789EB913C6"), util::size(Usb30ForceEnablePatches_22_0_0), Usb30ForceEnablePatches_22_0_0 }, /* 22.5.0 */ - { ParseModuleId("760E48C572F8192C9BC6DC8FEB3D6213F0551505"), util::size(Usb30ForceEnablePatches_22_0_0), Usb30ForceEnablePatches_22_0_0 }, /* 23.0.0 */ + { ParseModuleId("760E48C572F8192C9BC6DC8FEB3D6213F0551505"), util::size(Usb30ForceEnablePatches_22_0_0), Usb30ForceEnablePatches_22_0_0 }, /* 23.0.0 - 23.0.1 */ + { ParseModuleId("1DBD36057473928B76875E8B209A17FDB3E4C231"), util::size(Usb30ForceEnablePatches_22_0_0), Usb30ForceEnablePatches_22_0_0 }, /* 23.5.0 */ }; From c721b0d2f6dc14eb4932b14200aef41ad4b0da31 Mon Sep 17 00:00:00 2001 From: hexkyz Date: Tue, 10 Nov 2026 21:30:06 +0000 Subject: [PATCH 3/7] web: update browser patches for 23.5.0 --- .../source/ldr_embedded_web_patches.inc | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/stratosphere/loader/source/ldr_embedded_web_patches.inc b/stratosphere/loader/source/ldr_embedded_web_patches.inc index 53e476c81..b77842833 100644 --- a/stratosphere/loader/source/ldr_embedded_web_patches.inc +++ b/stratosphere/loader/source/ldr_embedded_web_patches.inc @@ -30,6 +30,15 @@ constexpr inline const EmbeddedPatchEntry SystemWebMemoryPatches_23_0_0[] = { { 0x862498, "\x01\x20\xA1\x52", 4 }, }; +constexpr inline const EmbeddedPatchEntry SystemWebMemoryPatches_23_5_0[] = { + { 0x611468, "\x09\x00\xA8\xD2", 4 }, + { 0x729FE8, "\x02\x00\x80\x52", 4 }, + { 0x729EA8, "\x01\x60\xA1\x52", 4 }, + { 0x729EC0, "\x03\x60\xA1\x52", 4 }, + { 0x72A53C, "\x01\x20\xA1\x52", 4 }, + { 0x72A604, "\x01\x20\xA1\x52", 4 }, +}; + constexpr inline const EmbeddedPatchEntry OpenWebMemoryPatches_23_0_0[] = { { 0x611428, "\x09\x00\xA8\xD2", 4 }, { 0x828E68, "\x02\x00\x80\x52", 4 }, @@ -39,6 +48,15 @@ constexpr inline const EmbeddedPatchEntry OpenWebMemoryPatches_23_0_0[] = { { 0x829480, "\x01\x20\xA1\x52", 4 }, }; +constexpr inline const EmbeddedPatchEntry OpenWebMemoryPatches_23_5_0[] = { + { 0x6114E8, "\x09\x00\xA8\xD2", 4 }, + { 0x8E4C70, "\x02\x00\x80\x52", 4 }, + { 0x8E4B30, "\x01\x60\xA1\x52", 4 }, + { 0x8E4B48, "\x03\x60\xA1\x52", 4 }, + { 0x8E51C4, "\x01\x20\xA1\x52", 4 }, + { 0x8E528C, "\x01\x20\xA1\x52", 4 }, +}; + constexpr inline const EmbeddedPatchEntry OfflineWebMemoryPatches_23_0_0[] = { { 0x6DE0DC, "\x09\x00\xA8\xD2", 4 }, { 0x130744, "\x02\x00\x80\x52", 4 }, @@ -48,10 +66,22 @@ constexpr inline const EmbeddedPatchEntry OfflineWebMemoryPatches_23_0_0[] = { { 0x130CD0, "\x01\x20\xA1\x52", 4 }, }; +constexpr inline const EmbeddedPatchEntry OfflineWebMemoryPatches_23_5_0[] = { + { 0x6E28FC, "\x09\x00\xA8\xD2", 4 }, + { 0x168144, "\x02\x00\x80\x52", 4 }, + { 0x168014, "\x01\x60\xA1\x52", 4 }, + { 0x168024, "\x02\x60\xA1\x52", 4 }, + { 0x168630, "\x01\x20\xA1\x52", 4 }, + { 0x1686D0, "\x01\x20\xA1\x52", 4 }, +}; + constexpr inline const EmbeddedPatch WebMemoryPatches[] = { - { ParseModuleId("97BF9C2D43EB002FB5B3578E7714F428104ED596"), util::size(SystemWebMemoryPatches_23_0_0), SystemWebMemoryPatches_23_0_0 }, /* 23.0.0 */ + { ParseModuleId("97BF9C2D43EB002FB5B3578E7714F428104ED596"), util::size(SystemWebMemoryPatches_23_0_0), SystemWebMemoryPatches_23_0_0 }, /* 23.0.0 - 23.0.1 */ + { ParseModuleId("BFC1836C97C456CA4E56DEABF7FBF275E5522363"), util::size(SystemWebMemoryPatches_23_5_0), SystemWebMemoryPatches_23_5_0 }, /* 23.5.0 */ - { ParseModuleId("1470453424A9CDE689BE6DA86457ED1C79F5F403"), util::size(OpenWebMemoryPatches_23_0_0), OpenWebMemoryPatches_23_0_0 }, /* 23.0.0 */ + { ParseModuleId("1470453424A9CDE689BE6DA86457ED1C79F5F403"), util::size(OpenWebMemoryPatches_23_0_0), OpenWebMemoryPatches_23_0_0 }, /* 23.0.0 - 23.0.1 */ + { ParseModuleId("C01A479EB77D4118D092EEF9F7E6AA0F8D1B0FE1"), util::size(OpenWebMemoryPatches_23_5_0), OpenWebMemoryPatches_23_5_0 }, /* 23.5.0 */ - { ParseModuleId("86DAFFA68DA38660317018ADC7AD415BCCDDC583"), util::size(OfflineWebMemoryPatches_23_0_0), OfflineWebMemoryPatches_23_0_0 }, /* 23.0.0 */ + { ParseModuleId("86DAFFA68DA38660317018ADC7AD415BCCDDC583"), util::size(OfflineWebMemoryPatches_23_0_0), OfflineWebMemoryPatches_23_0_0 }, /* 23.0.0 - 23.0.1 */ + { ParseModuleId("0F20276C46BAEFF61762EBB4765DFA08EB56385B"), util::size(OfflineWebMemoryPatches_23_5_0), OfflineWebMemoryPatches_23_5_0 }, /* 23.5.0 */ }; From ce8ae4a5b320ef854bd7179da8c28f2b1baa5bc3 Mon Sep 17 00:00:00 2001 From: hexkyz Date: Tue, 10 Nov 2026 21:52:52 +0000 Subject: [PATCH 4/7] emummc: update for 23.5.0 --- emummc/README.md | 2 +- emummc/source/FS/FS_offsets.c | 8 ++++ emummc/source/FS/FS_versions.h | 3 ++ emummc/source/FS/offsets/2350.h | 59 +++++++++++++++++++++++++++ emummc/source/FS/offsets/2350_exfat.h | 59 +++++++++++++++++++++++++++ 5 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 emummc/source/FS/offsets/2350.h create mode 100644 emummc/source/FS/offsets/2350_exfat.h diff --git a/emummc/README.md b/emummc/README.md index 0d921bd3c..51e79bc3f 100644 --- a/emummc/README.md +++ b/emummc/README.md @@ -2,7 +2,7 @@ *A SDMMC driver replacement for Nintendo's Filesystem Services, by **m4xw*** ### Supported Horizon Versions -**1.0.0 - 23.0.1** +**1.0.0 - 23.5.0** ## Features * Arbitrary SDMMC backend selection diff --git a/emummc/source/FS/FS_offsets.c b/emummc/source/FS/FS_offsets.c index f7a2bacf8..301cbee72 100644 --- a/emummc/source/FS/FS_offsets.c +++ b/emummc/source/FS/FS_offsets.c @@ -89,6 +89,8 @@ #include "offsets/2250_exfat.h" #include "offsets/2300.h" #include "offsets/2300_exfat.h" +#include "offsets/2350.h" +#include "offsets/2350_exfat.h" #include "../utils/fatal.h" #define GET_OFFSET_STRUCT_NAME(vers) g_offsets##vers @@ -189,6 +191,8 @@ DEFINE_OFFSET_STRUCT(_2250); DEFINE_OFFSET_STRUCT(_2250_EXFAT); DEFINE_OFFSET_STRUCT(_2300); DEFINE_OFFSET_STRUCT(_2300_EXFAT); +DEFINE_OFFSET_STRUCT(_2350); +DEFINE_OFFSET_STRUCT(_2350_EXFAT); const fs_offsets_t *get_fs_offsets(enum FS_VER version) { switch (version) { @@ -338,6 +342,10 @@ const fs_offsets_t *get_fs_offsets(enum FS_VER version) { return &(GET_OFFSET_STRUCT_NAME(_2300)); case FS_VER_23_0_0_EXFAT: return &(GET_OFFSET_STRUCT_NAME(_2300_EXFAT)); + case FS_VER_23_5_0: + return &(GET_OFFSET_STRUCT_NAME(_2350)); + case FS_VER_23_5_0_EXFAT: + return &(GET_OFFSET_STRUCT_NAME(_2350_EXFAT)); default: fatal_abort(Fatal_UnknownVersion); } diff --git a/emummc/source/FS/FS_versions.h b/emummc/source/FS/FS_versions.h index d2c240b20..a41ca397c 100644 --- a/emummc/source/FS/FS_versions.h +++ b/emummc/source/FS/FS_versions.h @@ -130,6 +130,9 @@ enum FS_VER FS_VER_23_0_0, FS_VER_23_0_0_EXFAT, + + FS_VER_23_5_0, + FS_VER_23_5_0_EXFAT, FS_VER_MAX, }; diff --git a/emummc/source/FS/offsets/2350.h b/emummc/source/FS/offsets/2350.h new file mode 100644 index 000000000..7338e906e --- /dev/null +++ b/emummc/source/FS/offsets/2350.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_2350_H__ +#define __FS_2350_H__ + +// Accessor vtable getters +#define FS_OFFSET_2350_SDMMC_ACCESSOR_GC 0x1B3650 +#define FS_OFFSET_2350_SDMMC_ACCESSOR_SD 0x1B5650 +#define FS_OFFSET_2350_SDMMC_ACCESSOR_NAND 0x1B3C80 + +// Hooks +#define FS_OFFSET_2350_SDMMC_WRAPPER_READ 0x1AF580 +#define FS_OFFSET_2350_SDMMC_WRAPPER_WRITE 0x1AF5E0 +#define FS_OFFSET_2350_RTLD 0x2F520 +#define FS_OFFSET_2350_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x4C))) + +#define FS_OFFSET_2350_CLKRST_SET_MIN_V_CLK_RATE 0x1D27F0 + +// Misc funcs +#define FS_OFFSET_2350_LOCK_MUTEX 0x1A80A0 +#define FS_OFFSET_2350_UNLOCK_MUTEX 0x1A80F0 + +#define FS_OFFSET_2350_SDMMC_WRAPPER_CONTROLLER_OPEN 0x1AF540 +#define FS_OFFSET_2350_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1AF560 + +// Misc Data +#define FS_OFFSET_2350_SD_MUTEX 0xFF5408 +#define FS_OFFSET_2350_NAND_MUTEX 0xFF0D70 +#define FS_OFFSET_2350_ACTIVE_PARTITION 0xFF0DB0 +#define FS_OFFSET_2350_SDMMC_DAS_HANDLE 0xFD2BE8 + +// NOPs +#define FS_OFFSET_2350_SD_DAS_INIT 0x2CA98 + +// Nintendo Paths +#define FS_OFFSET_2350_NINTENDO_PATHS \ +{ \ + {.opcode_reg = 3, .adrp_offset = 0x00072D8C, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 3, .adrp_offset = 0x00081BB4, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 4, .adrp_offset = 0x0008A678, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 4, .adrp_offset = 0x0009F98C, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ +} + +#endif // __FS_2350_H__ diff --git a/emummc/source/FS/offsets/2350_exfat.h b/emummc/source/FS/offsets/2350_exfat.h new file mode 100644 index 000000000..1d18bf326 --- /dev/null +++ b/emummc/source/FS/offsets/2350_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_2350_EXFAT_H__ +#define __FS_2350_EXFAT_H__ + +// Accessor vtable getters +#define FS_OFFSET_2350_EXFAT_SDMMC_ACCESSOR_GC 0x1BE850 +#define FS_OFFSET_2350_EXFAT_SDMMC_ACCESSOR_SD 0x1C0850 +#define FS_OFFSET_2350_EXFAT_SDMMC_ACCESSOR_NAND 0x1BEE80 + +// Hooks +#define FS_OFFSET_2350_EXFAT_SDMMC_WRAPPER_READ 0x1BA780 +#define FS_OFFSET_2350_EXFAT_SDMMC_WRAPPER_WRITE 0x1BA7E0 +#define FS_OFFSET_2350_EXFAT_RTLD 0x2F530 +#define FS_OFFSET_2350_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x4C))) + +#define FS_OFFSET_2350_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x1DD9F0 + +// Misc funcs +#define FS_OFFSET_2350_EXFAT_LOCK_MUTEX 0x1B32A0 +#define FS_OFFSET_2350_EXFAT_UNLOCK_MUTEX 0x1B32F0 + +#define FS_OFFSET_2350_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x1BA740 +#define FS_OFFSET_2350_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1BA760 + +// Misc Data +#define FS_OFFSET_2350_EXFAT_SD_MUTEX 0x1006408 +#define FS_OFFSET_2350_EXFAT_NAND_MUTEX 0x1001D70 +#define FS_OFFSET_2350_EXFAT_ACTIVE_PARTITION 0x1001DB0 +#define FS_OFFSET_2350_EXFAT_SDMMC_DAS_HANDLE 0xFDFBE8 + +// NOPs +#define FS_OFFSET_2350_EXFAT_SD_DAS_INIT 0x2CAA8 + +// Nintendo Paths +#define FS_OFFSET_2350_EXFAT_NINTENDO_PATHS \ +{ \ + {.opcode_reg = 3, .adrp_offset = 0x00072D9C, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 3, .adrp_offset = 0x00081BC4, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 4, .adrp_offset = 0x0008A688, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 4, .adrp_offset = 0x0009F99C, .add_rel_offset = 0x00000004}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ +} + +#endif // __FS_2350_EXFAT_H__ \ No newline at end of file From 55319fd40f4a57e5042288a91542b19924d62e26 Mon Sep 17 00:00:00 2001 From: hexkyz Date: Tue, 10 Nov 2026 22:54:49 +0000 Subject: [PATCH 5/7] docs: add changelog for 1.12.2 --- docs/changelog.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index 557afde9f..8849ae201 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,4 +1,7 @@ # Changelog +## 1.12.2 ++ Basic support was added for 23.5.0. ++ General system stability improvements to enhance the user's experience. ## 1.12.1 + Support was added for the new c-ares resolver in `dns.mitm`. + Firmware 23.0.0 introduced a new set of commands to the `sfdnsres` service. These commands provide c-ares async support for DNS resolution and are now used by most sysmodules. From 6623efc81715a6196ebd6d49354ebd77aadb10cc Mon Sep 17 00:00:00 2001 From: hexkyz Date: Tue, 10 Nov 2026 22:55:43 +0000 Subject: [PATCH 6/7] git subrepo push emummc subrepo: subdir: "emummc" merged: "dfac26960" upstream: origin: "https://github.com/m4xw/emummc" branch: "develop" commit: "dfac26960" git-subrepo: version: "0.4.9" origin: "???" commit: "???" --- emummc/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/emummc/.gitrepo b/emummc/.gitrepo index 4200412ec..3bcadbaaa 100644 --- a/emummc/.gitrepo +++ b/emummc/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/m4xw/emummc branch = develop - commit = 11a2fd2a25a526c9df92506d69da1f679b1bd997 - parent = 6eb8c3e7ce4209c60bac362f1b88804318cccad2 + commit = dfac26960c3460c59c3bbaaa07c822155345b4df + parent = 55319fd40f4a57e5042288a91542b19924d62e26 method = merge cmdver = 0.4.9 From 4e3f37038d9e82dde7054897213ab32b2ecf651f Mon Sep 17 00:00:00 2001 From: hexkyz Date: Tue, 10 Nov 2026 22:56:12 +0000 Subject: [PATCH 7/7] git subrepo push libraries subrepo: subdir: "libraries" merged: "75c688910" upstream: origin: "https://github.com/Atmosphere-NX/Atmosphere-libs" branch: "master" commit: "75c688910" git-subrepo: version: "0.4.9" origin: "???" commit: "???" --- libraries/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/.gitrepo b/libraries/.gitrepo index e67b1e41e..73a1dd898 100644 --- a/libraries/.gitrepo +++ b/libraries/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/Atmosphere-NX/Atmosphere-libs branch = master - commit = cf48d23375cf36742876f4b014971b2ebabc6dc8 - parent = ff43bc566adb33c51a43b9ef45b0d3898ad39040 + commit = 75c688910baf76c0f5e62a3a7fe90bc0dc7f70a1 + parent = 6623efc81715a6196ebd6d49354ebd77aadb10cc method = merge cmdver = 0.4.9