From 2de1b0b2dd9cf504ffbffdf04ba8b5eeb0cc9301 Mon Sep 17 00:00:00 2001 From: The-Little-Wolf <116989599+The-Little-Wolf@users.noreply.github.com> Date: Sun, 27 Jul 2025 15:35:28 -0700 Subject: [PATCH] [XAM/INFO] - Implement XamGetDashBackstackData - Implement XamGetDashBackstackData --- src/xenia/kernel/xam/xam.h | 5 +++++ src/xenia/kernel/xam/xam_info.cc | 16 ++++++++++++++++ src/xenia/kernel/xam/xam_state.h | 2 ++ 3 files changed, 23 insertions(+) diff --git a/src/xenia/kernel/xam/xam.h b/src/xenia/kernel/xam/xam.h index 438c1a47d..a03ce098e 100644 --- a/src/xenia/kernel/xam/xam.h +++ b/src/xenia/kernel/xam/xam.h @@ -199,6 +199,11 @@ struct X_DASH_APP_INFO { }; static_assert_size(X_DASH_APP_INFO, 0xC); +struct X_DASH_BACKSTACK_DATA { + uint8_t unk1[0x314]; +}; +static_assert_size(X_DASH_BACKSTACK_DATA, 0x314); + struct X_GUID { xe::be Data1; xe::be Data2; diff --git a/src/xenia/kernel/xam/xam_info.cc b/src/xenia/kernel/xam/xam_info.cc index 5af9a8cdb..6adbedac6 100644 --- a/src/xenia/kernel/xam/xam_info.cc +++ b/src/xenia/kernel/xam/xam_info.cc @@ -788,6 +788,22 @@ void XamGetActiveDashAppInfo_entry(pointer_t dash_app) { } DECLARE_XAM_EXPORT1(XamGetActiveDashAppInfo, kNone, kImplemented); +dword_result_t XamGetDashBackstackData_entry( + pointer_t backstack_data, lpdword_t count) { + auto xam_state_ = kernel_state()->xam_state(); + uint32_t total = xam_state_->dash_backstack_nodes_count_; + if (total) { + if (*count <= total) { + total = *count; + } + std::memcpy(backstack_data, &xam_state_->dash_backstack_data_, + sizeof(X_DASH_BACKSTACK_DATA) * total); + xam_state_->dash_backstack_nodes_count_ = 0; + } + return X_ERROR_SUCCESS; +} +DECLARE_XAM_EXPORT1(XamGetDashBackstackData, kNone, kImplemented); + void XampWebInstrumentationSetProfileCounts_entry(dword_t live_profiles, dword_t local_profiles, dword_t adult_profiles, diff --git a/src/xenia/kernel/xam/xam_state.h b/src/xenia/kernel/xam/xam_state.h index caf450f9d..4b0a7f618 100644 --- a/src/xenia/kernel/xam/xam_state.h +++ b/src/xenia/kernel/xam/xam_state.h @@ -58,6 +58,8 @@ class XamState { void LoadSpaInfo(const SpaInfo* info); X_DASH_APP_INFO dash_app_info_ = {}; + uint32_t dash_backstack_nodes_count_ = 0; + X_DASH_BACKSTACK_DATA dash_backstack_data_[2] = {}; std::atomic xam_dialogs_shown_ = {0}; std::atomic xam_nui_dialogs_shown_ = {0};