From 2799234fbb1635e9d37007979a383807fcf1b56c Mon Sep 17 00:00:00 2001 From: The-Little-Wolf <116989599+The-Little-Wolf@users.noreply.github.com> Date: Mon, 29 Jun 2026 15:26:07 -0700 Subject: [PATCH] [Xam/XMP] - Stub XMPGetNumSongsInTitlePlaylist - Stub XMPGetNumSongsInTitlePlaylist --- src/xenia/kernel/xam/apps/xmp_app.cc | 22 ++++++++++++++++++++++ src/xenia/kernel/xam/apps/xmp_app.h | 7 +++++++ 2 files changed, 29 insertions(+) diff --git a/src/xenia/kernel/xam/apps/xmp_app.cc b/src/xenia/kernel/xam/apps/xmp_app.cc index 5534215fa..f3c78c2d1 100644 --- a/src/xenia/kernel/xam/apps/xmp_app.cc +++ b/src/xenia/kernel/xam/apps/xmp_app.cc @@ -563,6 +563,28 @@ X_HRESULT XmpApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr, kernel_state_->BroadcastNotification(kXNotificationXmpDashInitChanged, 1); return X_E_SUCCESS; } + case 0x00070031: { + // XMPGetNumSongsInTitlePlaylist + // Song count exist at playlist_ptr->0x78, if playlist_ptr->0xc == 0 or 1 + // return song count, else return zero + assert_true(!buffer_length || + buffer_length == sizeof(XMP_GET_NUM_SONGS_IN_TITLE_PLAYLIST)); + XMP_GET_NUM_SONGS_IN_TITLE_PLAYLIST* args = + reinterpret_cast(buffer); + + XELOGD( + "XMPGetNumSongsInTitlePlaylist({:08X}, {:08X}, {:08X}), " + "unimplemented", + uint32_t(args->xmp_client.get()), args->playlist_ptr.get(), + args->song_count_ptr.get()); + + if (!args->playlist_ptr || !args->song_count_ptr) { + return X_E_INVALIDARG; + } + xe::store_and_swap( + memory_->TranslateVirtual(args->song_count_ptr), 0); + return X_E_SUCCESS; + } case 0x0007003D: { // XMPCaptureOutput assert_true(!buffer_length || diff --git a/src/xenia/kernel/xam/apps/xmp_app.h b/src/xenia/kernel/xam/apps/xmp_app.h index a2b2dab58..5fbb136a4 100644 --- a/src/xenia/kernel/xam/apps/xmp_app.h +++ b/src/xenia/kernel/xam/apps/xmp_app.h @@ -194,6 +194,13 @@ struct XMP_DASH_INIT { }; static_assert_size(XMP_DASH_INIT, 0x18); +struct XMP_GET_NUM_SONGS_IN_TITLE_PLAYLIST { + xe::be xmp_client; + xe::be playlist_ptr; + xe::be song_count_ptr; +}; +static_assert_size(XMP_GET_NUM_SONGS_IN_TITLE_PLAYLIST, 0xC); + struct XMP_CAPTURE_OUTPUT { xe::be xmp_client; xe::be callback;