mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 05:40:01 -06:00
Core: Fix IPL device m_cursor overflow
Not sure if the behavior I'm implementing here is what real hardware does, but since this is a buffer overflow, I'd like to get it fixed quickly. Hardware verification can happen later. https://bugs.dolphin-emu.org/issues/13506
This commit is contained in:
@ -320,6 +320,8 @@ void CEXIIPL::TransferByte(u8& data)
|
|||||||
if (!m_command.is_write())
|
if (!m_command.is_write())
|
||||||
{
|
{
|
||||||
u32 dev_addr = address - ROM_BASE + m_cursor++;
|
u32 dev_addr = address - ROM_BASE + m_cursor++;
|
||||||
|
// TODO: Is this address wrapping correct? Needs a hardware test
|
||||||
|
dev_addr %= ROM_SIZE;
|
||||||
// Technically we should descramble here iff descrambling logic is enabled.
|
// Technically we should descramble here iff descrambling logic is enabled.
|
||||||
// At the moment, we pre-decrypt the whole thing and
|
// At the moment, we pre-decrypt the whole thing and
|
||||||
// ignore the "enabled" bit - see CEXIIPL::CEXIIPL
|
// ignore the "enabled" bit - see CEXIIPL::CEXIIPL
|
||||||
@ -346,6 +348,8 @@ void CEXIIPL::TransferByte(u8& data)
|
|||||||
{
|
{
|
||||||
auto& sram = m_system.GetSRAM();
|
auto& sram = m_system.GetSRAM();
|
||||||
u32 dev_addr = address - SRAM_BASE + m_cursor++;
|
u32 dev_addr = address - SRAM_BASE + m_cursor++;
|
||||||
|
// TODO: Is this address wrapping correct? Needs a hardware test
|
||||||
|
dev_addr %= SRAM_SIZE;
|
||||||
if (m_command.is_write())
|
if (m_command.is_write())
|
||||||
sram[dev_addr] = data;
|
sram[dev_addr] = data;
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user