Skip to content

Commit fda697c

Browse files
authored
Merge pull request #1181 from kernle32dll/fix-ironman
Inform about new disc via CdTrayReq
2 parents c6590e0 + b425b7d commit fda697c

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

Source/iop/Iop_Cdvdman.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
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
}

Source/iop/Iop_Cdvdman.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ namespace Iop
1212
class CCdvdman : public CModule
1313
{
1414
public:
15+
enum CDVD_TRAQ_REQUEST_MODE
16+
{
17+
CDVD_TRAY_OPEN = 0,
18+
CDVD_TRAY_CLOSE = 1,
19+
CDVD_TRAY_CHECK = 2,
20+
};
21+
1522
enum CDVD_STATUS
1623
{
1724
CDVD_STATUS_STOPPED = 0,
@@ -100,6 +107,7 @@ namespace Iop
100107

101108
uint32 m_callbackPtr = 0;
102109
uint32 m_status = CDVD_STATUS_PAUSED;
110+
uint32 m_discChanged = 1;
103111
uint32 m_streamPos = 0;
104112
uint32 m_streamBufferSize = 0;
105113
COMMAND m_pendingCommand = COMMAND_NONE;

0 commit comments

Comments
 (0)