From ed82bb968a2ec785485345aa202143df57c0f8fe Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Sun, 10 Mar 2019 16:51:42 -0400 Subject: set_sys: Implement GetFirmwareVersion(2) for libnx hosversion Uses the synthesized system archive 9 (SystemVersion) and reports v5.1.0-0.0 --- .../file_sys/system_archive/system_archive.cpp | 3 +- .../file_sys/system_archive/system_version.cpp | 48 ++++++++++++++++++++++ src/core/file_sys/system_archive/system_version.h | 13 ++++++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/core/file_sys/system_archive/system_version.cpp create mode 100644 src/core/file_sys/system_archive/system_version.h (limited to 'src/core/file_sys') diff --git a/src/core/file_sys/system_archive/system_archive.cpp b/src/core/file_sys/system_archive/system_archive.cpp index e3e79f40a..c9722ed77 100644 --- a/src/core/file_sys/system_archive/system_archive.cpp +++ b/src/core/file_sys/system_archive/system_archive.cpp @@ -6,6 +6,7 @@ #include "core/file_sys/romfs.h" #include "core/file_sys/system_archive/ng_word.h" #include "core/file_sys/system_archive/system_archive.h" +#include "core/file_sys/system_archive/system_version.h" namespace FileSys::SystemArchive { @@ -30,7 +31,7 @@ constexpr std::array SYSTEM_ARCHI {0x0100000000000806, "NgWord", &NgWord1}, {0x0100000000000807, "SsidList", nullptr}, {0x0100000000000808, "Dictionary", nullptr}, - {0x0100000000000809, "SystemVersion", nullptr}, + {0x0100000000000809, "SystemVersion", &SystemVersion}, {0x010000000000080A, "AvatarImage", nullptr}, {0x010000000000080B, "LocalNews", nullptr}, {0x010000000000080C, "Eula", nullptr}, diff --git a/src/core/file_sys/system_archive/system_version.cpp b/src/core/file_sys/system_archive/system_version.cpp new file mode 100644 index 000000000..3fc5f9586 --- /dev/null +++ b/src/core/file_sys/system_archive/system_version.cpp @@ -0,0 +1,48 @@ +// Copyright 2019 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "core/file_sys/system_archive/system_version.h" +#include "core/file_sys/vfs_vector.h" + +namespace FileSys::SystemArchive { + +namespace SystemVersionData { + +// This section should reflect the best system version to describe yuzu's HLE api. +// TODO(DarkLordZach): Update when HLE gets better. + +constexpr u8 VERSION_MAJOR = 5; +constexpr u8 VERSION_MINOR = 1; +constexpr u8 VERSION_MICRO = 0; + +constexpr u8 REVISION_MAJOR = 0; +constexpr u8 REVISION_MINOR = 0; + +constexpr char PLATFORM_STRING[] = "YUZU"; +constexpr char VERSION_HASH[] = ""; +constexpr char DISPLAY_VERSION[] = "5.1.0"; +constexpr char DISPLAY_TITLE[] = "YuzuEmulated Firmware for NX 5.1.0-0.0"; + +} // namespace SystemVersionData + +VirtualDir SystemVersion() { + VirtualFile file = std::make_shared(std::vector(0x100), "file"); + file->WriteObject(SystemVersionData::VERSION_MAJOR, 0); + file->WriteObject(SystemVersionData::VERSION_MINOR, 1); + file->WriteObject(SystemVersionData::VERSION_MICRO, 2); + file->WriteObject(SystemVersionData::REVISION_MAJOR, 4); + file->WriteObject(SystemVersionData::REVISION_MINOR, 5); + file->WriteArray(SystemVersionData::PLATFORM_STRING, + std::min(sizeof(SystemVersionData::PLATFORM_STRING), 0x20ull), 0x8); + file->WriteArray(SystemVersionData::VERSION_HASH, + std::min(sizeof(SystemVersionData::VERSION_HASH), 0x40ull), 0x28); + file->WriteArray(SystemVersionData::DISPLAY_VERSION, + std::min(sizeof(SystemVersionData::DISPLAY_VERSION), 0x18ull), 0x68); + file->WriteArray(SystemVersionData::DISPLAY_TITLE, + std::min(sizeof(SystemVersionData::DISPLAY_TITLE), 0x80ull), 0x80); + return std::make_shared(std::vector{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 new file mode 100644 index 000000000..9fb794b36 --- /dev/null +++ b/src/core/file_sys/system_archive/system_version.h @@ -0,0 +1,13 @@ +// Copyright 2019 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include "core/file_sys/vfs_types.h" + +namespace FileSys::SystemArchive { + +VirtualDir SystemVersion(); + +} // namespace FileSys::SystemArchive -- cgit v1.2.3 From 73f2ee5484d4b1836cd94becd65af2342b2cdaca Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Sun, 10 Mar 2019 19:16:17 -0400 Subject: system_version: Correct sizes on VectorVfsFile construction --- src/core/file_sys/system_archive/system_version.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/core/file_sys') diff --git a/src/core/file_sys/system_archive/system_version.cpp b/src/core/file_sys/system_archive/system_version.cpp index 3fc5f9586..52df10f55 100644 --- a/src/core/file_sys/system_archive/system_version.cpp +++ b/src/core/file_sys/system_archive/system_version.cpp @@ -34,13 +34,13 @@ VirtualDir SystemVersion() { file->WriteObject(SystemVersionData::REVISION_MAJOR, 4); file->WriteObject(SystemVersionData::REVISION_MINOR, 5); file->WriteArray(SystemVersionData::PLATFORM_STRING, - std::min(sizeof(SystemVersionData::PLATFORM_STRING), 0x20ull), 0x8); + std::min(sizeof(SystemVersionData::PLATFORM_STRING), 0x20ull), 0x8); file->WriteArray(SystemVersionData::VERSION_HASH, - std::min(sizeof(SystemVersionData::VERSION_HASH), 0x40ull), 0x28); + std::min(sizeof(SystemVersionData::VERSION_HASH), 0x40ull), 0x28); file->WriteArray(SystemVersionData::DISPLAY_VERSION, - std::min(sizeof(SystemVersionData::DISPLAY_VERSION), 0x18ull), 0x68); + std::min(sizeof(SystemVersionData::DISPLAY_VERSION), 0x18ull), 0x68); file->WriteArray(SystemVersionData::DISPLAY_TITLE, - std::min(sizeof(SystemVersionData::DISPLAY_TITLE), 0x80ull), 0x80); + std::min(sizeof(SystemVersionData::DISPLAY_TITLE), 0x80ull), 0x80); return std::make_shared(std::vector{file}, std::vector{}, "data"); } -- cgit v1.2.3 From debc7442f2904cd11e025b4101ad007561470289 Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Sun, 10 Mar 2019 19:54:13 -0400 Subject: set_sys: Use official nintendo version string --- src/core/file_sys/errors.h | 3 +++ src/core/file_sys/system_archive/system_version.cpp | 20 ++++++++++++-------- src/core/file_sys/system_archive/system_version.h | 3 +++ 3 files changed, 18 insertions(+), 8 deletions(-) (limited to 'src/core/file_sys') diff --git a/src/core/file_sys/errors.h b/src/core/file_sys/errors.h index e4a4ee4ab..bb4654366 100644 --- a/src/core/file_sys/errors.h +++ b/src/core/file_sys/errors.h @@ -11,6 +11,9 @@ namespace FileSys { constexpr ResultCode ERROR_PATH_NOT_FOUND{ErrorModule::FS, 1}; constexpr ResultCode ERROR_ENTITY_NOT_FOUND{ErrorModule::FS, 1002}; constexpr ResultCode ERROR_SD_CARD_NOT_FOUND{ErrorModule::FS, 2001}; +constexpr ResultCode ERROR_OUT_OF_BOUNDS{ErrorModule::FS, 3005}; +constexpr ResultCode ERROR_FAILED_MOUNT_ARCHIVE{ErrorModule::FS, 3223}; +constexpr ResultCode ERROR_INVALID_ARGUMENT{ErrorModule::FS, 6001}; constexpr ResultCode ERROR_INVALID_OFFSET{ErrorModule::FS, 6061}; constexpr ResultCode ERROR_INVALID_SIZE{ErrorModule::FS, 6062}; diff --git a/src/core/file_sys/system_archive/system_version.cpp b/src/core/file_sys/system_archive/system_version.cpp index 52df10f55..6e22f97b0 100644 --- a/src/core/file_sys/system_archive/system_version.cpp +++ b/src/core/file_sys/system_archive/system_version.cpp @@ -16,16 +16,20 @@ constexpr u8 VERSION_MAJOR = 5; constexpr u8 VERSION_MINOR = 1; constexpr u8 VERSION_MICRO = 0; -constexpr u8 REVISION_MAJOR = 0; +constexpr u8 REVISION_MAJOR = 3; constexpr u8 REVISION_MINOR = 0; -constexpr char PLATFORM_STRING[] = "YUZU"; -constexpr char VERSION_HASH[] = ""; +constexpr char PLATFORM_STRING[] = "NX"; +constexpr char VERSION_HASH[] = "23f9df53e25709d756e0c76effcb2473bd3447dd"; constexpr char DISPLAY_VERSION[] = "5.1.0"; -constexpr char DISPLAY_TITLE[] = "YuzuEmulated Firmware for NX 5.1.0-0.0"; +constexpr char DISPLAY_TITLE[] = "NintendoSDK Firmware for NX 5.1.0-3.0"; } // namespace SystemVersionData +std::string GetLongDisplayVersion() { + return SystemVersionData::DISPLAY_TITLE; +} + VirtualDir SystemVersion() { VirtualFile file = std::make_shared(std::vector(0x100), "file"); file->WriteObject(SystemVersionData::VERSION_MAJOR, 0); @@ -34,13 +38,13 @@ VirtualDir SystemVersion() { file->WriteObject(SystemVersionData::REVISION_MAJOR, 4); file->WriteObject(SystemVersionData::REVISION_MINOR, 5); file->WriteArray(SystemVersionData::PLATFORM_STRING, - std::min(sizeof(SystemVersionData::PLATFORM_STRING), 0x20ull), 0x8); + std::min(sizeof(SystemVersionData::PLATFORM_STRING), 0x20ULL), 0x8); file->WriteArray(SystemVersionData::VERSION_HASH, - std::min(sizeof(SystemVersionData::VERSION_HASH), 0x40ull), 0x28); + std::min(sizeof(SystemVersionData::VERSION_HASH), 0x40ULL), 0x28); file->WriteArray(SystemVersionData::DISPLAY_VERSION, - std::min(sizeof(SystemVersionData::DISPLAY_VERSION), 0x18ull), 0x68); + std::min(sizeof(SystemVersionData::DISPLAY_VERSION), 0x18ULL), 0x68); file->WriteArray(SystemVersionData::DISPLAY_TITLE, - std::min(sizeof(SystemVersionData::DISPLAY_TITLE), 0x80ull), 0x80); + std::min(sizeof(SystemVersionData::DISPLAY_TITLE), 0x80ULL), 0x80); return std::make_shared(std::vector{file}, std::vector{}, "data"); } diff --git a/src/core/file_sys/system_archive/system_version.h b/src/core/file_sys/system_archive/system_version.h index 9fb794b36..deed79b26 100644 --- a/src/core/file_sys/system_archive/system_version.h +++ b/src/core/file_sys/system_archive/system_version.h @@ -4,10 +4,13 @@ #pragma once +#include #include "core/file_sys/vfs_types.h" namespace FileSys::SystemArchive { +std::string GetLongDisplayVersion(); + VirtualDir SystemVersion(); } // namespace FileSys::SystemArchive -- cgit v1.2.3