diff --git a/Source/Core/Core/HW/DVD/DVDInterface.cpp b/Source/Core/Core/HW/DVD/DVDInterface.cpp index a7b04ddcd3..ae9bc7189e 100644 --- a/Source/Core/Core/HW/DVD/DVDInterface.cpp +++ b/Source/Core/Core/HW/DVD/DVDInterface.cpp @@ -375,6 +375,13 @@ void Reset(bool spinup) s_DICFG.Hex = 0; s_DICFG.CONFIG = 1; // Disable bootrom descrambler + ResetDrive(spinup); +} + +// Resets state on the MN102 chip in the drive itself, but not the DI registers exposed on the +// emulated device, or any inserted disc. +void ResetDrive(bool spinup) +{ s_stream = false; s_stop_at_track_end = false; s_audio_position = 0; @@ -453,7 +460,7 @@ void SetDisc(std::unique_ptr disc, DVDThread::SetDisc(std::move(disc)); SetLidOpen(); - Reset(false); + ResetDrive(false); } bool IsDiscInside() diff --git a/Source/Core/Core/HW/DVD/DVDInterface.h b/Source/Core/Core/HW/DVD/DVDInterface.h index 7a013c484f..4b7de92ed3 100644 --- a/Source/Core/Core/HW/DVD/DVDInterface.h +++ b/Source/Core/Core/HW/DVD/DVDInterface.h @@ -111,6 +111,7 @@ enum class EjectCause void Init(); void Reset(bool spinup = true); +void ResetDrive(bool spinup); void Shutdown(); void DoState(PointerWrap& p); diff --git a/Source/Core/Core/IOS/DI/DI.cpp b/Source/Core/Core/IOS/DI/DI.cpp index ebc5016453..a56b5e27e0 100644 --- a/Source/Core/Core/IOS/DI/DI.cpp +++ b/Source/Core/Core/IOS/DI/DI.cpp @@ -268,7 +268,7 @@ std::optional DI::StartIOCtl(const IOCtlRequest& request) { const bool spinup = Memory::Read_U32(request.address + 4); INFO_LOG(IOS_DI, "DVDLowReset %s spinup", spinup ? "with" : "without"); - DVDInterface::Reset(spinup); + DVDInterface::ResetDrive(spinup); ResetDIRegisters(); return DIResult::Success; } diff --git a/Source/Core/Core/IOS/MIOS.cpp b/Source/Core/Core/IOS/MIOS.cpp index 9148619977..901ffe6711 100644 --- a/Source/Core/Core/IOS/MIOS.cpp +++ b/Source/Core/Core/IOS/MIOS.cpp @@ -37,7 +37,7 @@ static void ReinitHardware() // HACK However, resetting DI will reset the DTK config, which is set by the system menu // (and not by MIOS), causing games that use DTK to break. Perhaps MIOS doesn't actually // reset DI fully, in such a way that the DTK config isn't cleared? - // DVDInterface::Reset(); + // DVDInterface::ResetDrive(true); PowerPC::Reset(); Wiimote::ResetAllWiimotes(); // Note: this is specific to Dolphin and is required because we initialised it in Wii mode.