diff --git a/src/xenia/kernel/kernel_state.h b/src/xenia/kernel/kernel_state.h index 497853f56..975dbf6f3 100644 --- a/src/xenia/kernel/kernel_state.h +++ b/src/xenia/kernel/kernel_state.h @@ -388,6 +388,7 @@ class KernelState { public: uint32_t dash_context_ = 0; + X_DASH_APP_INFO dash_app_info_ = {}; std::unordered_map host_object_type_enum_to_guest_object_type_ptr_; uint32_t GetKernelGuestGlobals() const { return kernel_guest_globals_; } diff --git a/src/xenia/kernel/xam/xam_info.cc b/src/xenia/kernel/xam/xam_info.cc index c2d027671..dfc0229c2 100644 --- a/src/xenia/kernel/xam/xam_info.cc +++ b/src/xenia/kernel/xam/xam_info.cc @@ -728,6 +728,25 @@ dword_result_t XamIsXbox1TitleId_entry(dword_t title_id) { } DECLARE_XAM_EXPORT1(XamIsXbox1TitleId, kNone, kImplemented); +void XamSetActiveDashAppInfo_entry(pointer_t dash_app) { + if (!dash_app) { + kernel_state()->dash_app_info_ = {}; + return; + } + std::memcpy(&kernel_state()->dash_app_info_, dash_app, + sizeof(X_DASH_APP_INFO)); +} +DECLARE_XAM_EXPORT1(XamSetActiveDashAppInfo, kNone, kImplemented); + +void XamGetActiveDashAppInfo_entry(pointer_t dash_app) { + if (!dash_app) { + return; + } + std::memcpy(dash_app, &kernel_state()->dash_app_info_, + sizeof(X_DASH_APP_INFO)); +} +DECLARE_XAM_EXPORT1(XamGetActiveDashAppInfo, kNone, kImplemented); + } // namespace xam } // namespace kernel } // namespace xe diff --git a/src/xenia/xbox.h b/src/xenia/xbox.h index 05abe803e..e7e4faf0f 100644 --- a/src/xenia/xbox.h +++ b/src/xenia/xbox.h @@ -779,6 +779,14 @@ struct MESSAGEBOX_RESULT { #define DPAD_LEFT_PASSCODE 0x00005812 #define DPAD_RIGHT_PASSCODE 0x00005813 +#pragma pack(push, 4) +struct X_DASH_APP_INFO { + uint64_t unk1; + uint32_t unk2; +}; +static_assert_size(X_DASH_APP_INFO, 0xC); +#pragma pack(pop) + // clang-format on } // namespace xe