mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Try to fix Q also when looking if pregap is 0.
This commit is contained in:
@@ -196,6 +196,7 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
bool goneBack = false;
|
bool goneBack = false;
|
||||||
bool goFront = false;
|
bool goFront = false;
|
||||||
bool forward = false;
|
bool forward = false;
|
||||||
|
bool crcOk = false;
|
||||||
|
|
||||||
// Check if pregap is 0
|
// Check if pregap is 0
|
||||||
for(retries = 0; retries < 10; retries++)
|
for(retries = 0; retries < 10; retries++)
|
||||||
@@ -222,9 +223,50 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
subBuf[4], subBuf[5], subBuf[6], subBuf[7], subBuf[8], subBuf[9],
|
subBuf[4], subBuf[5], subBuf[6], subBuf[7], subBuf[8], subBuf[9],
|
||||||
subBuf[10], subBuf[11], crc[0], crc[1]);
|
subBuf[10], subBuf[11], crc[0], crc[1]);
|
||||||
|
|
||||||
if(crc[0] != subBuf[10] ||
|
crcOk = crc[0] == subBuf[10] && crc[1] == subBuf[11];
|
||||||
crc[1] != subBuf[11])
|
|
||||||
continue;
|
// Try to do a simple correction
|
||||||
|
if(!crcOk)
|
||||||
|
{
|
||||||
|
// Data track cannot have 11xxb in CONTROL
|
||||||
|
if((subBuf[0] & 0x40) > 0)
|
||||||
|
subBuf[0] &= 0x7F;
|
||||||
|
|
||||||
|
// ADR only uses two bits
|
||||||
|
subBuf[0] &= 0xF3;
|
||||||
|
|
||||||
|
// Don't care about other Q modes
|
||||||
|
if((subBuf[0] & 0xF) == 1)
|
||||||
|
{
|
||||||
|
// ZERO only used in DDCD
|
||||||
|
subBuf[6] = 0;
|
||||||
|
|
||||||
|
// Fix BCD numbering
|
||||||
|
for(int i = 1; i < 10; i++)
|
||||||
|
{
|
||||||
|
if((subBuf[i] & 0xF0) > 0xA0)
|
||||||
|
subBuf[i] &= 0x7F;
|
||||||
|
|
||||||
|
if((subBuf[i] & 0x0F) > 0x0A)
|
||||||
|
subBuf[i] &= 0xF7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CRC16CCITTContext.Data(subBuf, 10, out crc);
|
||||||
|
|
||||||
|
crcOk = crc[0] == subBuf[10] && crc[1] == subBuf[11];
|
||||||
|
|
||||||
|
if(crcOk)
|
||||||
|
{
|
||||||
|
DicConsole.DebugWriteLine("Pregap calculator",
|
||||||
|
"LBA: {0}, Try {1}, Sense {2}, Q (FIXED): {3:X2} {4:X2} {5:X2} {6:X2} {7:X2} {8:X2} {9:X2} {10:X2} {11:X2} {12:X2} CRC 0x{13:X2}{14:X2}, Calculated CRC: 0x{15:X2}{16:X2}",
|
||||||
|
lba, retries + 1, sense, subBuf[0], subBuf[1], subBuf[2],
|
||||||
|
subBuf[3], subBuf[4], subBuf[5], subBuf[6], subBuf[7], subBuf[8],
|
||||||
|
subBuf[9], subBuf[10], subBuf[11], crc[0], crc[1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
BcdToBinaryQ(subBuf);
|
BcdToBinaryQ(subBuf);
|
||||||
|
|
||||||
@@ -258,8 +300,6 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
sense = supportsRwSubchannel ? GetSectorForPregapRaw(dev, (uint)lba - 10, dbDev, out subBuf)
|
sense = supportsRwSubchannel ? GetSectorForPregapRaw(dev, (uint)lba - 10, dbDev, out subBuf)
|
||||||
: GetSectorForPregapQ16(dev, (uint)lba - 10, dbDev, out subBuf);
|
: GetSectorForPregapQ16(dev, (uint)lba - 10, dbDev, out subBuf);
|
||||||
|
|
||||||
bool crcOk = false;
|
|
||||||
|
|
||||||
for(retries = 0; retries < 10; retries++)
|
for(retries = 0; retries < 10; retries++)
|
||||||
{
|
{
|
||||||
sense = supportsRwSubchannel ? GetSectorForPregapRaw(dev, (uint)lba, dbDev, out subBuf)
|
sense = supportsRwSubchannel ? GetSectorForPregapRaw(dev, (uint)lba, dbDev, out subBuf)
|
||||||
|
|||||||
Reference in New Issue
Block a user