diff options
author | Daniel Silsby | 2019-11-12 18:48:44 -0500 |
---|---|---|
committer | twinaphex | 2020-02-08 15:50:27 +0100 |
commit | 0204c39a68a1fd4bf667aa8ece5a769f2983b7d0 (patch) | |
tree | 9fb392148568d907cbf70f059b7526f1ad5dd589 | |
parent | 79573c20e473b4f8490a50b772a1636a50c1b594 (diff) | |
download | pcsx_rearmed-0204c39a68a1fd4bf667aa8ece5a769f2983b7d0.tar.gz pcsx_rearmed-0204c39a68a1fd4bf667aa8ece5a769f2983b7d0.tar.bz2 pcsx_rearmed-0204c39a68a1fd4bf667aa8ece5a769f2983b7d0.zip |
cdrom: add missing BCD->int convert in cdrFreeze()
For some Eboot .PBP game images, when loading a savestate, a zlib error
like 'uncompress failed with -5 for block 5383, sector 86132' would be
output to stdout/stderr. The savestate would still be playable, though.
Traced it down to cdrFreeze() failing to convert cdr.Prev from BCD->int
when calling ReadTrack(). Note that the odd 'cdr.Prev[0]++;' line seems
to be someone's hacky way of forcing ReadTrack() to avoid skipping what
it thinks is a duplicate sector read.
-rw-r--r-- | libpcsxcore/cdrom.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index a65ca54..a417a52 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -1499,7 +1499,9 @@ int cdrFreeze(void *f, int Mode) { pTransfer = cdr.Transfer + tmp; // read right sub data - memcpy(tmpp, cdr.Prev, 3); + tmpp[0] = btoi(cdr.Prev[0]); + tmpp[1] = btoi(cdr.Prev[1]); + tmpp[2] = btoi(cdr.Prev[2]); cdr.Prev[0]++; ReadTrack(tmpp); |