diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 96f03704e..b9c8628bf 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -921,6 +921,21 @@ void Module::APTInterface::CheckNew3DS(Kernel::HLERequestContext& ctx) { LOG_WARNING(Service_APT, "(STUBBED) called"); } +void Module::APTInterface::IsTitleAllowed(Kernel::HLERequestContext& ctx) { + IPC::RequestParser rp(ctx, 0x105, 4, 0); // 0x01050100 + const u64 program_id = rp.Pop(); + const auto media_type = rp.PopEnum(); + rp.Skip(1, false); // Padding + + // We allow all titles to be launched, so this function is a no-op + IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); + rb.Push(RESULT_SUCCESS); + rb.Push(true); + + LOG_DEBUG(Service_APT, "called, title_id={:016X} media_type={}", program_id, + static_cast(media_type)); +} + Module::APTInterface::APTInterface(std::shared_ptr apt, const char* name, u32 max_session) : ServiceFramework(name, max_session), apt(std::move(apt)) {} diff --git a/src/core/hle/service/apt/apt.h b/src/core/hle/service/apt/apt.h index b413715b1..85cb99cf3 100644 --- a/src/core/hle/service/apt/apt.h +++ b/src/core/hle/service/apt/apt.h @@ -646,6 +646,19 @@ public: */ void CheckNew3DS(Kernel::HLERequestContext& ctx); + /** + * APT::IsTitleAllowed service function + * Inputs: + * 0 : Header Code[0x01050100] + * 1-2 : Program id + * 3 : Media type + * 4 : Padding + * Outputs: + * 1: Result code, 0 on success, otherwise error code + * 2: u8 output, 0 if the title is not allowed, 1 if it is + */ + void IsTitleAllowed(Kernel::HLERequestContext& ctx); + protected: bool application_reset_prepared{}; std::shared_ptr apt; diff --git a/src/core/hle/service/apt/apt_a.cpp b/src/core/hle/service/apt/apt_a.cpp index 0d6e64d30..abe1a948b 100644 --- a/src/core/hle/service/apt/apt_a.cpp +++ b/src/core/hle/service/apt/apt_a.cpp @@ -100,7 +100,7 @@ APT_A::APT_A(std::shared_ptr apt) {0x01010000, &APT_A::CheckNew3DSApp, "CheckNew3DSApp"}, {0x01020000, &APT_A::CheckNew3DS, "CheckNew3DS"}, {0x01040000, nullptr, "IsStandardMemoryLayout"}, - {0x01050100, nullptr, "IsTitleAllowed"}, + {0x01050100, &APT_A::IsTitleAllowed, "IsTitleAllowed"}, }; RegisterHandlers(functions); } diff --git a/src/core/hle/service/apt/apt_s.cpp b/src/core/hle/service/apt/apt_s.cpp index b0824628d..de5151470 100644 --- a/src/core/hle/service/apt/apt_s.cpp +++ b/src/core/hle/service/apt/apt_s.cpp @@ -100,7 +100,7 @@ APT_S::APT_S(std::shared_ptr apt) {0x01010000, &APT_S::CheckNew3DSApp, "CheckNew3DSApp"}, {0x01020000, &APT_S::CheckNew3DS, "CheckNew3DS"}, {0x01040000, nullptr, "IsStandardMemoryLayout"}, - {0x01050100, nullptr, "IsTitleAllowed"}, + {0x01050100, &APT_S::IsTitleAllowed, "IsTitleAllowed"}, }; RegisterHandlers(functions); }