[XAM] Enable storing IPTV name.

Still needs to be exposed in UI (optional)
This commit is contained in:
Gliniak
2026-05-19 23:31:53 +02:00
parent 072ef7eff7
commit a11908fa76
4 changed files with 26 additions and 1 deletions

View File

@@ -31,6 +31,7 @@ XamState::XamState(Emulator* emulator, KernelState* kernel_state)
achievement_manager_ = std::make_unique<AchievementManager>();
LoadLanguageLocaleFallback();
LoadIptvServiceName();
AppManager::RegisterApps(kernel_state, app_manager_.get());
}
@@ -60,6 +61,17 @@ void XamState::LoadLanguageLocaleFallback() {
}
}
void XamState::LoadIptvServiceName() {
constexpr uint32_t address = 0x80D10000;
if (kernel_state_->memory()
->LookupHeap(0x80000000)
->AllocFixed(address, 0x78, 0x1000, kMemoryAllocationCommit,
kMemoryProtectRead | kMemoryProtectWrite)) {
iptv_name_address_ = address;
}
}
UserProfile* XamState::GetUserProfile(uint32_t user_index) const {
if (user_index >= XUserMaxUserCount && user_index < XUserIndexLatest) {
return nullptr;

View File

@@ -66,6 +66,8 @@ class XamState {
return language_fallback_address_[index];
}
uint32_t GetIptvNameAddress() const { return iptv_name_address_; }
X_DASH_APP_INFO dash_app_info_ = {};
uint32_t dash_backstack_nodes_count_ = 0;
X_DASH_BACKSTACK_DATA dash_backstack_data_[2] = {};
@@ -76,6 +78,7 @@ class XamState {
private:
void LoadLanguageLocaleFallback();
void LoadIptvServiceName();
KernelState* kernel_state_;
@@ -89,6 +92,7 @@ class XamState {
// Custom XAM stuff
std::array<uint32_t, 0x12> language_fallback_address_{};
uint32_t iptv_name_address_{};
};
} // namespace xam

View File

@@ -14,6 +14,7 @@
#include "xenia/base/filesystem.h"
#include "xenia/base/byte_order.h"
#include "xenia/base/string_util.h"
#include "xenia/xbox.h"
#include <ranges>
@@ -113,6 +114,10 @@ void XConfig::SetDefaults() {
memcpy(xconfig_data_.user.tz_dlt_date.data(), tz.tz_dlt_date.data(), 4);
xconfig_data_.user.tz_std_bias = tz.tz_std_bias;
xconfig_data_.user.tz_dlt_bias = tz.tz_dlt_bias;
xe::string_util::copy_and_swap_truncating(
xconfig_data_.iptv.service_provider_name.data(), u"Xenia TV",
xconfig_data_.iptv.service_provider_name.size());
}
void XConfig::FlushToFile() {

View File

@@ -799,7 +799,7 @@ struct XConfigData {
struct Iptv {
xe::be<uint32_t> checksum; // 0x000
xe::be<uint32_t> version; // 0x004
std::array<uint8_t, 120> service_provider_name; // 0x008 wchar
std::array<char16_t, 60> service_provider_name; // 0x008 wchar
std::array<uint8_t, 128> provisioning_server_url; // 0x080 wchar
std::array<uint8_t, 128> support_info; // 0x100 wchar
std::array<uint8_t, 128> bootstrap_server_url; // 0x180 wchar
@@ -1033,6 +1033,10 @@ class XConfig {
// XCONFIG_CONSOLE_PC_TITLE_EXEMPTIONS,
// Console, keyboard_layout),
// -- XCONFIG_IPTV (0x7) --------------------------------------------
XCONFIG_FIELD(XCONFIG_IPTV_CATEGORY, XCONFIG_IPTV_SERVICE_PROVIDER_NAME,
Iptv, service_provider_name),
// -- XCONFIG_SYSTEM (0xA) ---------------------------------------------
XCONFIG_FIELD(XCONFIG_SYSTEM_CATEGORY, XCONFIG_SYSTEM_ALARM_TIME, System,
alarm_time),