DVDInterface: Move fast disc speed check to ExecuteReadCommand
This breaks the workaround used for Star Wars: Rouge Leader, but that problem has gotten a more proper solution in 4.0-4889.
This commit is contained in:
parent
7df55d220f
commit
de86d539f2
|
@ -544,18 +544,9 @@ void RegisterMMIO(MMIO::Mapping* mmio, u32 base)
|
||||||
DVDCommandResult result = ExecuteCommand(
|
DVDCommandResult result = ExecuteCommand(
|
||||||
m_DICMDBUF[0].Hex, m_DICMDBUF[1].Hex, m_DICMDBUF[2].Hex,
|
m_DICMDBUF[0].Hex, m_DICMDBUF[1].Hex, m_DICMDBUF[2].Hex,
|
||||||
m_DIMAR.Hex, m_DILENGTH.Hex, true);
|
m_DIMAR.Hex, m_DILENGTH.Hex, true);
|
||||||
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bFastDiscSpeed)
|
|
||||||
{
|
// The transfer is finished after a delay
|
||||||
// Make sure fast disc speed performs "instant" reads; in addition
|
CoreTiming::ScheduleEvent((int)result.ticks_until_completion, tc, result.interrupt_type);
|
||||||
// to being used to speed up games, fast disc speed is used as a
|
|
||||||
// workaround for crashes in Star Wars Rogue Leader.
|
|
||||||
TransferComplete(result.interrupt_type, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// The transfer is finished after a delay
|
|
||||||
CoreTiming::ScheduleEvent((int)result.ticks_until_completion, tc, result.interrupt_type);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
@ -621,7 +612,10 @@ DVDCommandResult ExecuteReadCommand(u64 DVD_offset, u32 output_address,
|
||||||
}
|
}
|
||||||
|
|
||||||
DVDCommandResult result;
|
DVDCommandResult result;
|
||||||
result.ticks_until_completion = SimulateDiscReadTime(DVD_offset, DVD_length);
|
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bFastDiscSpeed)
|
||||||
|
result.ticks_until_completion = 0; // An optional hack to speed up loading times
|
||||||
|
else
|
||||||
|
result.ticks_until_completion = SimulateDiscReadTime(DVD_offset, DVD_length);
|
||||||
|
|
||||||
if (!g_bDiscInside)
|
if (!g_bDiscInside)
|
||||||
{
|
{
|
||||||
|
|
|
@ -67,9 +67,6 @@ IPCCommandResult CWII_IPC_HLE_Device_di::IOCtl(u32 _CommandAddress)
|
||||||
BufferOut, BufferOutSize, false);
|
BufferOut, BufferOutSize, false);
|
||||||
Memory::Write_U32(result.interrupt_type, _CommandAddress + 0x4);
|
Memory::Write_U32(result.interrupt_type, _CommandAddress + 0x4);
|
||||||
|
|
||||||
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bFastDiscSpeed)
|
|
||||||
result.ticks_until_completion = 0; // An optional hack to speed up loading times
|
|
||||||
|
|
||||||
return { true, result.ticks_until_completion };
|
return { true, result.ticks_until_completion };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue