summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/HW/DVD/DVDThread.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/Source/Core/Core/HW/DVD/DVDThread.cpp b/Source/Core/Core/HW/DVD/DVDThread.cpp
index af60fb16c6..5f28518a91 100644
--- a/Source/Core/Core/HW/DVD/DVDThread.cpp
+++ b/Source/Core/Core/HW/DVD/DVDThread.cpp
@@ -342,20 +342,34 @@ static void FinishRead(u64 id, s64 cycles_late)
(CoreTiming::GetTicks() - request.time_started_ticks) /
(SystemTimers::GetTicksPerSecond() / 1000000));
+ DVDInterface::DIInterruptType interrupt;
if (buffer.size() != request.length)
{
- PanicAlertT("The disc could not be read (at 0x%" PRIx64 " - 0x%" PRIx64 ").",
- request.dvd_offset, request.dvd_offset + request.length);
+ if (request.dvd_offset != 0x118280000 && request.dvd_offset != 0x1FB500000)
+ {
+ PanicAlertT("The disc could not be read (at 0x%" PRIx64 " - 0x%" PRIx64 ").",
+ request.dvd_offset, request.dvd_offset + request.length);
+ }
+ else
+ {
+ // Part of the error 001 check.
+ INFO_LOG(DVDINTERFACE, "Ignoring out of bounds test read (at 0x%" PRIx64 " - 0x%" PRIx64 ")",
+ request.dvd_offset, request.dvd_offset + request.length);
+ }
+
+ DVDInterface::SetHighError(DVDInterface::ERROR_BLOCK_OOB);
+ interrupt = DVDInterface::DIInterruptType::DEINT;
}
else
{
if (request.copy_to_ram)
Memory::CopyToEmu(request.output_address, buffer.data(), request.length);
+
+ interrupt = DVDInterface::DIInterruptType::TCINT;
}
// Notify the emulated software that the command has been executed
- DVDInterface::FinishExecutingCommand(request.reply_type, DVDInterface::DIInterruptType::TCINT,
- cycles_late, buffer);
+ DVDInterface::FinishExecutingCommand(request.reply_type, interrupt, cycles_late, buffer);
}
static void DVDThread()