diff --git a/Source/Core/Core/HW/DVD/DVDInterface.cpp b/Source/Core/Core/HW/DVD/DVDInterface.cpp index 9ecb58dc03..ff4d623fa4 100644 --- a/Source/Core/Core/HW/DVD/DVDInterface.cpp +++ b/Source/Core/Core/HW/DVD/DVDInterface.cpp @@ -1233,8 +1233,17 @@ void SetHighError(u32 high_error) void FinishExecutingCommand(ReplyType reply_type, DIInterruptType interrupt_type, s64 cycles_late, const std::vector& data) { - s_DIMAR += s_DILENGTH; - s_DILENGTH = 0; + // The data parameter contains the requested data iff this was called from DVDThread, and is + // empty otherwise. DVDThread is the only source of ReplyType::NoReply and ReplyType::DTK. + + u32 transfer_size = 0; + if (reply_type == ReplyType::NoReply) + transfer_size = static_cast(data.size()); + else if (reply_type == ReplyType::Interrupt || reply_type == ReplyType::IOS) + transfer_size = s_DILENGTH; + + s_DIMAR += transfer_size; + s_DILENGTH -= transfer_size; switch (reply_type) {