1010#define STATE_FILENAME (" iop_cdvdman/state.xml" )
1111#define STATE_CALLBACK_ADDRESS (" CallbackAddress" )
1212#define STATE_STATUS (" Status" )
13+ #define STATE_DISCCHANGED (" DiscChanged" )
1314#define STATE_PENDING_COMMAND (" PendingCommand" )
1415
1516#define FUNCTION_CDINIT " CdInit"
@@ -52,6 +53,7 @@ void CCdvdman::LoadState(Framework::CZipArchiveReader& archive)
5253 CRegisterStateFile registerFile (*archive.BeginReadFile (STATE_FILENAME));
5354 m_callbackPtr = registerFile.GetRegister32 (STATE_CALLBACK_ADDRESS);
5455 m_status = registerFile.GetRegister32 (STATE_STATUS);
56+ m_discChanged = registerFile.GetRegister32 (STATE_DISCCHANGED);
5557 m_pendingCommand = static_cast <COMMAND>(registerFile.GetRegister32 (STATE_PENDING_COMMAND));
5658}
5759
@@ -60,6 +62,7 @@ void CCdvdman::SaveState(Framework::CZipArchiveWriter& archive) const
6062 auto registerFile = new CRegisterStateFile (STATE_FILENAME);
6163 registerFile->SetRegister32 (STATE_CALLBACK_ADDRESS, m_callbackPtr);
6264 registerFile->SetRegister32 (STATE_STATUS, m_status);
65+ registerFile->SetRegister32 (STATE_DISCCHANGED, m_discChanged);
6366 registerFile->SetRegister32 (STATE_PENDING_COMMAND, m_pendingCommand);
6467 archive.InsertFile (registerFile);
6568}
@@ -533,7 +536,16 @@ uint32 CCdvdman::CdTrayReq(uint32 mode, uint32 trayCntPtr)
533536 mode, trayCntPtr);
534537
535538 auto trayCnt = reinterpret_cast <uint32*>(m_ram + trayCntPtr);
536- (*trayCnt) = 0 ;
539+
540+ if (mode == CDVD_TRAY_CHECK && m_discChanged)
541+ {
542+ (*trayCnt) = 1 ;
543+ m_discChanged = false ;
544+ }
545+ else
546+ {
547+ (*trayCnt) = 0 ;
548+ }
537549
538550 return 1 ;
539551}
0 commit comments