From e401414aabb37c903b4f02018d5a7fba3d767321 Mon Sep 17 00:00:00 2001 From: lizzie Date: Thu, 9 Jul 2026 03:45:30 +0200 Subject: [PATCH] [core/hle] update fw constants to 22.5.0, ams -> 1.11.2, implement /digest file (#4165) adds `/digest` file implementation alongisde the hashes and constants for firmwareless installs and yes ams updated as well Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4165 Reviewed-by: Maufeat Reviewed-by: MaranBr --- .../system_archive/system_version.cpp | 53 +++++++++++-------- .../file_sys/system_archive/system_version.h | 5 +- src/core/hle/api_version.h | 19 +++---- 3 files changed, 44 insertions(+), 33 deletions(-) diff --git a/src/core/file_sys/system_archive/system_version.cpp b/src/core/file_sys/system_archive/system_version.cpp index c4ed91ce01..2dbe4a8a01 100644 --- a/src/core/file_sys/system_archive/system_version.cpp +++ b/src/core/file_sys/system_archive/system_version.cpp @@ -11,30 +11,39 @@ namespace FileSys::SystemArchive { -std::string GetLongDisplayVersion() { - return HLE::ApiVersion::DISPLAY_TITLE; -} - VirtualDir SystemVersion() { - LOG_WARNING(Common_Filesystem, "called - Using hardcoded firmware version '{}'", - GetLongDisplayVersion()); + LOG_WARNING(Common_Filesystem, "called, using hardcoded firmware version: {}, {}", HLE::ApiVersion::VERSION_HASH, HLE::ApiVersion::DISPLAY_TITLE); - VirtualFile file = std::make_shared(std::vector(0x100), "file"); - file->WriteObject(HLE::ApiVersion::HOS_VERSION_MAJOR, 0); - file->WriteObject(HLE::ApiVersion::HOS_VERSION_MINOR, 1); - file->WriteObject(HLE::ApiVersion::HOS_VERSION_MICRO, 2); - file->WriteObject(HLE::ApiVersion::SDK_REVISION_MAJOR, 4); - file->WriteObject(HLE::ApiVersion::SDK_REVISION_MINOR, 5); - file->WriteArray(HLE::ApiVersion::PLATFORM_STRING, - std::min(sizeof(HLE::ApiVersion::PLATFORM_STRING), 0x20ULL), 0x8); - file->WriteArray(HLE::ApiVersion::VERSION_HASH, - std::min(sizeof(HLE::ApiVersion::VERSION_HASH), 0x40ULL), 0x28); - file->WriteArray(HLE::ApiVersion::DISPLAY_VERSION, - std::min(sizeof(HLE::ApiVersion::DISPLAY_VERSION), 0x18ULL), 0x68); - file->WriteArray(HLE::ApiVersion::DISPLAY_TITLE, - std::min(sizeof(HLE::ApiVersion::DISPLAY_TITLE), 0x80ULL), 0x80); - return std::make_shared(std::vector{file}, - std::vector{}, "data"); + // the "/file" + struct VersionFileHeader { + u8 version_major = HLE::ApiVersion::HOS_VERSION_MAJOR; + u8 version_minor = HLE::ApiVersion::HOS_VERSION_MINOR; + u8 version_micro = HLE::ApiVersion::HOS_VERSION_MICRO; + std::array padding_1{}; + u8 sdk_revision_major = HLE::ApiVersion::SDK_REVISION_MAJOR; + u8 sdk_revision_minor = HLE::ApiVersion::SDK_REVISION_MINOR; + std::array padding_2{}; + std::array platform_string{}; + std::array version_hash{}; + std::array display_version{}; + std::array display_title{}; + }; + static_assert(sizeof(VersionFileHeader) == 0x100); + VersionFileHeader version_file_header = {}; + std::memcpy(&version_file_header.platform_string, HLE::ApiVersion::PLATFORM_STRING, sizeof(HLE::ApiVersion::PLATFORM_STRING)); + std::memcpy(&version_file_header.version_hash, HLE::ApiVersion::VERSION_HASH, sizeof(HLE::ApiVersion::VERSION_HASH)); + std::memcpy(&version_file_header.display_version, HLE::ApiVersion::DISPLAY_VERSION, sizeof(HLE::ApiVersion::DISPLAY_VERSION)); + std::memcpy(&version_file_header.display_title, HLE::ApiVersion::DISPLAY_TITLE, sizeof(HLE::ApiVersion::DISPLAY_TITLE)); + + std::vector file_data(sizeof(VersionFileHeader)); + std::memcpy(file_data.data(), &version_file_header, sizeof(version_file_header)); + VirtualFile file = std::make_shared(file_data, "file"); + + // the "/digest" + std::vector digest_data(sizeof(HLE::ApiVersion::VERSION_DIGEST)); + std::memcpy(digest_data.data(), HLE::ApiVersion::VERSION_DIGEST, sizeof(HLE::ApiVersion::VERSION_DIGEST)); + VirtualFile digest_file = std::make_shared(digest_data, "digest"); + return std::make_shared(std::vector{file, digest_file}, std::vector{}, "data"); } } // namespace FileSys::SystemArchive diff --git a/src/core/file_sys/system_archive/system_version.h b/src/core/file_sys/system_archive/system_version.h index e5f7b952e2..f9962d030b 100644 --- a/src/core/file_sys/system_archive/system_version.h +++ b/src/core/file_sys/system_archive/system_version.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -8,8 +11,6 @@ namespace FileSys::SystemArchive { -std::string GetLongDisplayVersion(); - VirtualDir SystemVersion(); } // namespace FileSys::SystemArchive diff --git a/src/core/hle/api_version.h b/src/core/hle/api_version.h index bffd30d863..29b4f4008c 100644 --- a/src/core/hle/api_version.h +++ b/src/core/hle/api_version.h @@ -6,6 +6,8 @@ #pragma once +#include +#include #include "common/common_types.h" // This file contains yuzu's HLE API version constants. @@ -15,23 +17,22 @@ namespace HLE::ApiVersion { // Horizon OS version constants. constexpr u8 HOS_VERSION_MAJOR = 22; -constexpr u8 HOS_VERSION_MINOR = 0; +constexpr u8 HOS_VERSION_MINOR = 5; constexpr u8 HOS_VERSION_MICRO = 0; // NintendoSDK version constants. - -constexpr u8 SDK_REVISION_MAJOR = 3; +constexpr u8 SDK_REVISION_MAJOR = 1; constexpr u8 SDK_REVISION_MINOR = 0; -constexpr char PLATFORM_STRING[] = "NX"; -constexpr char VERSION_HASH[] = "da42070c4ad25840c9ee25344bde9d0a8584f5a9"; -constexpr char DISPLAY_VERSION[] = "22.0.0"; -constexpr char DISPLAY_TITLE[] = "NintendoSDK Firmware for NX 22.0.0-3.0"; +constexpr char PLATFORM_STRING[0x20] = "NX"; +constexpr char VERSION_HASH[0x40] = "ae93061abbc7791fcf8d2f7e7b7b2d62163af697"; +constexpr char DISPLAY_VERSION[0x18] = "22.5.0"; +constexpr char DISPLAY_TITLE[0x80] = "NintendoSDK Firmware for NX 22.5.0-1.0 "; +constexpr char VERSION_DIGEST[0x40] = "CusHY#00160500#WxlZDREksAFSi6bQJEV6nm6-cHLg2jikdYRVN3bwqyE="; // Atmosphere version constants. - constexpr u8 ATMOSPHERE_RELEASE_VERSION_MAJOR = 1; -constexpr u8 ATMOSPHERE_RELEASE_VERSION_MINOR = 10; +constexpr u8 ATMOSPHERE_RELEASE_VERSION_MINOR = 11; constexpr u8 ATMOSPHERE_RELEASE_VERSION_MICRO = 2; constexpr u32 AtmosphereTargetFirmwareWithRevision(u8 major, u8 minor, u8 micro, u8 rev) {