mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-03-12 14:46:49 +01:00
Fix CRC handling
2 different CRC bugs, and also an OOB bug.
This commit is contained in:
parent
40c4f3e8c1
commit
167d87e5cb
@ -556,6 +556,8 @@ u8 CEXISD::ReadForBlockWrite()
|
|||||||
u8 result;
|
u8 result;
|
||||||
if (actual_crc != block_crc)
|
if (actual_crc != block_crc)
|
||||||
{
|
{
|
||||||
|
ERROR_LOG_FMT(EXPANSIONINTERFACE, "Bad CRC: was {:04x}, should be {:04x}", actual_crc,
|
||||||
|
block_crc);
|
||||||
result = DATA_RESPONSE_BAD_CRC;
|
result = DATA_RESPONSE_BAD_CRC;
|
||||||
}
|
}
|
||||||
else if (!m_card.Seek(address, File::SeekOrigin::Begin))
|
else if (!m_card.Seek(address, File::SeekOrigin::Begin))
|
||||||
@ -612,14 +614,14 @@ void CEXISD::WriteForBlockWrite(u8 byte)
|
|||||||
state = State::ReadyForCommand;
|
state = State::ReadyForCommand;
|
||||||
block_state = BlockState::Nothing;
|
block_state = BlockState::Nothing;
|
||||||
}
|
}
|
||||||
else
|
else if (byte != 0xff)
|
||||||
{
|
{
|
||||||
ERROR_LOG_FMT(EXPANSIONINTERFACE, "Unexpected token for block write {:02x}", byte);
|
ERROR_LOG_FMT(EXPANSIONINTERFACE, "Unexpected token for block write {:02x}", byte);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BlockState::Block:
|
case BlockState::Block:
|
||||||
block_buffer[block_position++] = byte;
|
block_buffer[block_position++] = byte;
|
||||||
if (block_position > BLOCK_SIZE)
|
if (block_position >= BLOCK_SIZE)
|
||||||
{
|
{
|
||||||
block_state = BlockState::Checksum1;
|
block_state = BlockState::Checksum1;
|
||||||
}
|
}
|
||||||
@ -629,7 +631,7 @@ void CEXISD::WriteForBlockWrite(u8 byte)
|
|||||||
block_state = BlockState::Checksum2;
|
block_state = BlockState::Checksum2;
|
||||||
break;
|
break;
|
||||||
case BlockState::Checksum2:
|
case BlockState::Checksum2:
|
||||||
block_crc |= byte << 8;
|
block_crc |= byte;
|
||||||
block_state = BlockState::ChecksumWritten;
|
block_state = BlockState::ChecksumWritten;
|
||||||
break;
|
break;
|
||||||
case BlockState::ChecksumWritten:
|
case BlockState::ChecksumWritten:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user