mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Redo Reformat and cleanup.
Rider EAP was having a bug interpreting .editorconfig that didn't generate the code style as we wanted. This is now done with Rider-stable.
This commit is contained in:
@@ -80,8 +80,7 @@ public static class CompactDisc
|
||||
sub = Subchannel.ConvertQToRaw(sub);
|
||||
|
||||
// If not desired to fix, or to save, the subchannel, just save as is (or none)
|
||||
if(!fixSubchannelPosition &&
|
||||
desiredSubchannel != MmcSubchannel.None)
|
||||
if(!fixSubchannelPosition && desiredSubchannel != MmcSubchannel.None)
|
||||
outputPlugin.WriteSectorsTag(sub, sectorAddress, length, SectorTagType.CdSectorSubchannel);
|
||||
|
||||
subLog?.WriteEntry(sub, supportedSubchannel == MmcSubchannel.Raw, (long)sectorAddress, length, false, false);
|
||||
@@ -92,8 +91,7 @@ public static class CompactDisc
|
||||
updateStatus, smallestPregapLbaPerTrack, dumping,
|
||||
out newPregapSectors, sectorAddress);
|
||||
|
||||
if(!fixSubchannelPosition ||
|
||||
desiredSubchannel == MmcSubchannel.None)
|
||||
if(!fixSubchannelPosition || desiredSubchannel == MmcSubchannel.None)
|
||||
return indexesChanged;
|
||||
|
||||
int prePos = int.MinValue;
|
||||
@@ -121,8 +119,7 @@ public static class CompactDisc
|
||||
// Check P and weight
|
||||
for(int p = subPos; p < subPos + 12; p++)
|
||||
{
|
||||
if(deSub[p] != 0 &&
|
||||
deSub[p] != 255)
|
||||
if(deSub[p] != 0 && deSub[p] != 255)
|
||||
pOk = false;
|
||||
|
||||
for(var w = 0; w < 8; w++)
|
||||
@@ -192,10 +189,7 @@ public static class CompactDisc
|
||||
}
|
||||
|
||||
// RW is not a known pattern or packet, fix it
|
||||
if(!rwOk &&
|
||||
!rwPacket &&
|
||||
!cdtextPacket &&
|
||||
fixSubchannel)
|
||||
if(!rwOk && !rwPacket && !cdtextPacket && fixSubchannel)
|
||||
{
|
||||
for(int rw = subPos + 24; rw < subPos + 96; rw++)
|
||||
deSub[rw] = 0;
|
||||
@@ -209,10 +203,7 @@ public static class CompactDisc
|
||||
int aPos;
|
||||
|
||||
// Fix Q
|
||||
if(!crcOk &&
|
||||
fixSubchannel &&
|
||||
subPos > 0 &&
|
||||
subPos < deSub.Length - 96)
|
||||
if(!crcOk && fixSubchannel && subPos > 0 && subPos < deSub.Length - 96)
|
||||
{
|
||||
isrcs.TryGetValue(currentTrack, out string knownGoodIsrc);
|
||||
|
||||
@@ -258,9 +249,7 @@ public static class CompactDisc
|
||||
}
|
||||
}
|
||||
|
||||
if(!pOk ||
|
||||
!crcOk ||
|
||||
!rwOk)
|
||||
if(!pOk || !crcOk || !rwOk)
|
||||
continue;
|
||||
|
||||
var aframe = (byte)(q[9] / 16 * 10 + (q[9] & 0x0F));
|
||||
@@ -417,8 +406,7 @@ public static class CompactDisc
|
||||
continue;
|
||||
|
||||
// Pregap
|
||||
if(q[2] == 0 &&
|
||||
trackNo > 1)
|
||||
if(q[2] == 0 && trackNo > 1)
|
||||
{
|
||||
var pmin = (byte)(q[3] / 16 * 10 + (q[3] & 0x0F));
|
||||
var psec = (byte)(q[4] / 16 * 10 + (q[4] & 0x0F));
|
||||
@@ -443,9 +431,8 @@ public static class CompactDisc
|
||||
tracks[i].StartSector -= (ulong)dif;
|
||||
smallestPregapLbaPerTrack[trackNo] = qPos;
|
||||
|
||||
if(i > 0 &&
|
||||
tracks[i - 1].EndSector >= tracks[i].StartSector)
|
||||
tracks[i - 1].EndSector = tracks[i].StartSector - 1;
|
||||
if(i > 0 && tracks[i - 1].EndSector >= tracks[i].StartSector)
|
||||
tracks[i - 1].EndSector = tracks[i].StartSector - 1;
|
||||
|
||||
dumpLog?.WriteLine(string.Format(Localization.Core.Pregap_for_track_0_set_to_1_sectors,
|
||||
trackNo, tracks[i].Pregap));
|
||||
@@ -468,9 +455,8 @@ public static class CompactDisc
|
||||
tracks[i].Pregap = (ulong)qPos;
|
||||
tracks[i].StartSector -= tracks[i].Pregap - oldPregap;
|
||||
|
||||
if(i > 0 &&
|
||||
tracks[i - 1].EndSector >= tracks[i].StartSector)
|
||||
tracks[i - 1].EndSector = tracks[i].StartSector - 1;
|
||||
if(i > 0 && tracks[i - 1].EndSector >= tracks[i].StartSector)
|
||||
tracks[i - 1].EndSector = tracks[i].StartSector - 1;
|
||||
|
||||
dumpLog?.WriteLine(string.Format(Localization.Core.Pregap_for_track_0_set_to_1_sectors,
|
||||
trackNo, tracks[i].Pregap));
|
||||
@@ -495,12 +481,10 @@ public static class CompactDisc
|
||||
int aPos = amin * 60 * 75 + asec * 75 + aframe - 150;
|
||||
|
||||
// Do not set INDEX 1 to a value higher than what the TOC already said.
|
||||
if(q[2] == 1 &&
|
||||
aPos > (int)tracks[i].StartSector)
|
||||
if(q[2] == 1 && aPos > (int)tracks[i].StartSector)
|
||||
continue;
|
||||
|
||||
if(tracks[i].Indexes.ContainsKey(q[2]) &&
|
||||
aPos >= tracks[i].Indexes[q[2]])
|
||||
if(tracks[i].Indexes.ContainsKey(q[2]) && aPos >= tracks[i].Indexes[q[2]])
|
||||
continue;
|
||||
|
||||
dumpLog?.WriteLine(string.Format(Localization.Core.Setting_index_0_for_track_1_to_LBA_2, q[2],
|
||||
@@ -824,8 +808,7 @@ public static class CompactDisc
|
||||
Array.Copy(cdTextPack1, 0, cdTextPack1ForCrc, 0, 16);
|
||||
ushort calculatedCdtp1Crc = CRC16CCITTContext.Calculate(cdTextPack1ForCrc);
|
||||
|
||||
if(cdTextPack1Crc != calculatedCdtp1Crc &&
|
||||
cdTextPack1Crc != 0)
|
||||
if(cdTextPack1Crc != calculatedCdtp1Crc && cdTextPack1Crc != 0)
|
||||
status = false;
|
||||
}
|
||||
|
||||
@@ -836,8 +819,7 @@ public static class CompactDisc
|
||||
Array.Copy(cdTextPack2, 0, cdTextPack2ForCrc, 0, 16);
|
||||
ushort calculatedCdtp2Crc = CRC16CCITTContext.Calculate(cdTextPack2ForCrc);
|
||||
|
||||
if(cdTextPack2Crc != calculatedCdtp2Crc &&
|
||||
cdTextPack2Crc != 0)
|
||||
if(cdTextPack2Crc != calculatedCdtp2Crc && cdTextPack2Crc != 0)
|
||||
status = false;
|
||||
}
|
||||
|
||||
@@ -848,8 +830,7 @@ public static class CompactDisc
|
||||
Array.Copy(cdTextPack3, 0, cdTextPack3ForCrc, 0, 16);
|
||||
ushort calculatedCdtp3Crc = CRC16CCITTContext.Calculate(cdTextPack3ForCrc);
|
||||
|
||||
if(cdTextPack3Crc != calculatedCdtp3Crc &&
|
||||
cdTextPack3Crc != 0)
|
||||
if(cdTextPack3Crc != calculatedCdtp3Crc && cdTextPack3Crc != 0)
|
||||
status = false;
|
||||
}
|
||||
|
||||
@@ -861,8 +842,7 @@ public static class CompactDisc
|
||||
Array.Copy(cdTextPack4, 0, cdTextPack4ForCrc, 0, 16);
|
||||
ushort calculatedCdtp4Crc = CRC16CCITTContext.Calculate(cdTextPack4ForCrc);
|
||||
|
||||
if(cdTextPack4Crc == calculatedCdtp4Crc ||
|
||||
cdTextPack4Crc == 0)
|
||||
if(cdTextPack4Crc == calculatedCdtp4Crc || cdTextPack4Crc == 0)
|
||||
return status;
|
||||
|
||||
return false;
|
||||
@@ -1007,10 +987,7 @@ public static class CompactDisc
|
||||
q[0] = (byte)oldAdr;
|
||||
}
|
||||
|
||||
if(preCrcOk &&
|
||||
nextCrcOk &&
|
||||
(nextQ[0] & 0xF0) == (preQ[0] & 0xF0) &&
|
||||
(q[0] & 0xF0) != (nextQ[0] & 0xF0))
|
||||
if(preCrcOk && nextCrcOk && (nextQ[0] & 0xF0) == (preQ[0] & 0xF0) && (q[0] & 0xF0) != (nextQ[0] & 0xF0))
|
||||
{
|
||||
q[0] = (byte)((q[0] & 0x03) + (nextQ[0] & 0xF0));
|
||||
|
||||
@@ -1037,8 +1014,7 @@ public static class CompactDisc
|
||||
|
||||
if(preCrcOk && nextCrcOk)
|
||||
{
|
||||
if(preQ[1] == nextQ[1] &&
|
||||
preQ[1] != q[1])
|
||||
if(preQ[1] == nextQ[1] && preQ[1] != q[1])
|
||||
{
|
||||
q[1] = preQ[1];
|
||||
fixedTno = true;
|
||||
@@ -1053,8 +1029,7 @@ public static class CompactDisc
|
||||
|
||||
if(preCrcOk && nextCrcOk)
|
||||
{
|
||||
if(preQ[2] == nextQ[2] &&
|
||||
preQ[2] != q[2])
|
||||
if(preQ[2] == nextQ[2] && preQ[2] != q[2])
|
||||
{
|
||||
q[2] = preQ[2];
|
||||
fixedIndex = true;
|
||||
@@ -1145,9 +1120,7 @@ public static class CompactDisc
|
||||
}
|
||||
|
||||
// Next is not pregap and we didn't fix relative position with previous
|
||||
if(nextQ[2] > 0 &&
|
||||
nextCrcOk &&
|
||||
!fixedRelPos)
|
||||
if(nextQ[2] > 0 && nextCrcOk && !fixedRelPos)
|
||||
{
|
||||
rmin = (byte)(nextQ[3] / 16 * 10 + (nextQ[3] & 0x0F));
|
||||
rsec = (byte)(nextQ[4] / 16 * 10 + (nextQ[4] & 0x0F));
|
||||
@@ -1262,9 +1235,7 @@ public static class CompactDisc
|
||||
}
|
||||
|
||||
// Next is not pregap and we didn't fix relative position with previous
|
||||
if(nextQ[2] > 0 &&
|
||||
nextCrcOk &&
|
||||
!fixedAbsPos)
|
||||
if(nextQ[2] > 0 && nextCrcOk && !fixedAbsPos)
|
||||
{
|
||||
rmin = (byte)(nextQ[7] / 16 * 10 + (nextQ[7] & 0x0F));
|
||||
rsec = (byte)(nextQ[8] / 16 * 10 + (nextQ[8] & 0x0F));
|
||||
@@ -1350,12 +1321,7 @@ public static class CompactDisc
|
||||
|
||||
bool relOk = dPos == 1;
|
||||
|
||||
if(q[0] != preQ[0] ||
|
||||
q[1] != preQ[1] ||
|
||||
q[2] != preQ[2] ||
|
||||
q[6] != 0 ||
|
||||
!absOk ||
|
||||
!relOk)
|
||||
if(q[0] != preQ[0] || q[1] != preQ[1] || q[2] != preQ[2] || q[6] != 0 || !absOk || !relOk)
|
||||
return false;
|
||||
|
||||
CRC16CCITTContext.Data(q, 10, out qCrc);
|
||||
@@ -1388,12 +1354,7 @@ public static class CompactDisc
|
||||
|
||||
bool relOk = dPos == 1;
|
||||
|
||||
if(q[0] != nextQ[0] ||
|
||||
q[1] != nextQ[1] ||
|
||||
q[2] != nextQ[2] ||
|
||||
q[6] != 0 ||
|
||||
!absOk ||
|
||||
!relOk)
|
||||
if(q[0] != nextQ[0] || q[1] != nextQ[1] || q[2] != nextQ[2] || q[6] != 0 || !absOk || !relOk)
|
||||
return false;
|
||||
|
||||
CRC16CCITTContext.Data(q, 10, out qCrc);
|
||||
@@ -1488,9 +1449,7 @@ public static class CompactDisc
|
||||
return true;
|
||||
}
|
||||
|
||||
if(!fixCrc ||
|
||||
!nextCrcOk ||
|
||||
!preCrcOk)
|
||||
if(!fixCrc || !nextCrcOk || !preCrcOk)
|
||||
return false;
|
||||
|
||||
CRC16CCITTContext.Data(q, 10, out qCrc);
|
||||
@@ -1587,9 +1546,7 @@ public static class CompactDisc
|
||||
return true;
|
||||
}
|
||||
|
||||
if(!fixCrc ||
|
||||
!nextCrcOk ||
|
||||
!preCrcOk)
|
||||
if(!fixCrc || !nextCrcOk || !preCrcOk)
|
||||
return false;
|
||||
|
||||
CRC16CCITTContext.Data(q, 10, out qCrc);
|
||||
|
||||
@@ -80,10 +80,16 @@ public static class MMC
|
||||
0x50, 0x6C, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x35, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static readonly byte[] _operaId = { 0x01, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x01 };
|
||||
static readonly byte[] _operaId =
|
||||
{
|
||||
0x01, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x01
|
||||
};
|
||||
|
||||
// Only present on bootable CDs, but those make more than 99% of all available
|
||||
static readonly byte[] _fmTownsBootId = { 0x49, 0x50, 0x4C, 0x34, 0xEB, 0x55, 0x06 };
|
||||
static readonly byte[] _fmTownsBootId =
|
||||
{
|
||||
0x49, 0x50, 0x4C, 0x34, 0xEB, 0x55, 0x06
|
||||
};
|
||||
|
||||
/// <summary>Present on first two seconds of second track, says "COPYRIGHT BANDAI"</summary>
|
||||
static readonly byte[] _playdiaCopyright = "COPYRIGHT BANDAI"u8.ToArray();
|
||||
@@ -125,7 +131,10 @@ public static class MMC
|
||||
if(sector?.Length != 2352)
|
||||
return false;
|
||||
|
||||
byte[] syncMark = { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00 };
|
||||
byte[] syncMark =
|
||||
{
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00
|
||||
};
|
||||
|
||||
var testMark = new byte[12];
|
||||
Array.Copy(sector, 0, testMark, 0, 12);
|
||||
@@ -140,7 +149,10 @@ public static class MMC
|
||||
if(sector?.Length != 2352)
|
||||
return false;
|
||||
|
||||
byte[] syncMark = { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00 };
|
||||
byte[] syncMark =
|
||||
{
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00
|
||||
};
|
||||
|
||||
var testMark = new byte[12];
|
||||
|
||||
@@ -196,12 +208,14 @@ public static class MMC
|
||||
if(sector16?.Length != 2352)
|
||||
return false;
|
||||
|
||||
byte[] cdiMark = { 0x01, 0x43, 0x44, 0x2D };
|
||||
byte[] cdiMark =
|
||||
{
|
||||
0x01, 0x43, 0x44, 0x2D
|
||||
};
|
||||
|
||||
bool isData = IsData(sector0);
|
||||
|
||||
if(!isData ||
|
||||
sector0[0xF] != 2 && sector0[0xF] != 1)
|
||||
if(!isData || sector0[0xF] != 2 && sector0[0xF] != 1)
|
||||
return false;
|
||||
|
||||
var testMark = new byte[4];
|
||||
@@ -212,8 +226,7 @@ public static class MMC
|
||||
|
||||
static bool IsVideoNowColor(byte[] videoFrame)
|
||||
{
|
||||
if(videoFrame is null ||
|
||||
videoFrame.Length < _videoNowColorFrameMarker.Length)
|
||||
if(videoFrame is null || videoFrame.Length < _videoNowColorFrameMarker.Length)
|
||||
return false;
|
||||
|
||||
var buffer = new byte[_videoNowColorFrameMarker.Length];
|
||||
@@ -447,8 +460,7 @@ public static class MMC
|
||||
|
||||
break;
|
||||
case 0x20:
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.TOC_says_disc_type_is_CD_ROM_XA);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.TOC_says_disc_type_is_CD_ROM_XA);
|
||||
|
||||
mediaType = MediaType.CDROMXA;
|
||||
|
||||
@@ -457,7 +469,7 @@ public static class MMC
|
||||
}
|
||||
|
||||
foreach(FullTOC.TrackDataDescriptor track in
|
||||
decodedToc.Value.TrackDescriptors.Where(t => t.POINT is > 0 and <= 0x99))
|
||||
decodedToc.Value.TrackDescriptors.Where(t => t.POINT is > 0 and <= 0x99))
|
||||
{
|
||||
if(track.TNO == 1 &&
|
||||
((TocControl)(track.CONTROL & 0x0D) == TocControl.DataTrack ||
|
||||
@@ -467,8 +479,11 @@ public static class MMC
|
||||
if((TocControl)(track.CONTROL & 0x0D) == TocControl.DataTrack ||
|
||||
(TocControl)(track.CONTROL & 0x0D) == TocControl.DataTrackIncremental)
|
||||
{
|
||||
var startAddress = (uint)(track.PHOUR * 3600 * 75 + track.PMIN * 60 * 75 +
|
||||
track.PSEC * 75 + track.PFRAME - 150);
|
||||
var startAddress = (uint)(track.PHOUR * 3600 * 75 +
|
||||
track.PMIN * 60 * 75 +
|
||||
track.PSEC * 75 +
|
||||
track.PFRAME -
|
||||
150);
|
||||
|
||||
if(startAddress < startOfFirstDataTrack)
|
||||
startOfFirstDataTrack = startAddress;
|
||||
@@ -504,19 +519,14 @@ public static class MMC
|
||||
break;
|
||||
}
|
||||
|
||||
if(hasDataTrack &&
|
||||
!hasAudioTrack &&
|
||||
sessions == 1)
|
||||
if(hasDataTrack && !hasAudioTrack && sessions == 1)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.Disc_has_only_data_in_a_session_CD_ROM);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Disc_has_only_data_in_a_session_CD_ROM);
|
||||
|
||||
mediaType = MediaType.CDROM;
|
||||
}
|
||||
|
||||
if(hasVideoTrack &&
|
||||
!hasDataTrack &&
|
||||
sessions == 1)
|
||||
if(hasVideoTrack && !hasDataTrack && sessions == 1)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Disc_has_video_tracks_CD_Video);
|
||||
|
||||
@@ -534,7 +544,9 @@ public static class MMC
|
||||
TocControl.DataTrackIncremental)).
|
||||
Select(track => (uint)(track.PHOUR * 3600 * 75 +
|
||||
track.PMIN * 60 * 75 +
|
||||
track.PSEC * 75 + track.PFRAME - 150) +
|
||||
track.PSEC * 75 +
|
||||
track.PFRAME -
|
||||
150) +
|
||||
16))
|
||||
{
|
||||
sense = dev.ReadCd(out cmdBuf, out _, startAddress, 2352, 1, MmcSectorTypes.AllTypes, false, false,
|
||||
@@ -559,8 +571,7 @@ public static class MMC
|
||||
cmdBuf[15] != 0x02)
|
||||
continue;
|
||||
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.Disc_has_a_mode_two_data_track_CD_ROM_XA);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Disc_has_a_mode_two_data_track_CD_ROM_XA);
|
||||
|
||||
mediaType = MediaType.CDROMXA;
|
||||
|
||||
@@ -578,14 +589,14 @@ public static class MMC
|
||||
var firstSectorSecondSessionFirstTrack = (uint)(secondSessionFirstTrackTrack.PHOUR * 3600 * 75 +
|
||||
secondSessionFirstTrackTrack.PMIN * 60 * 75 +
|
||||
secondSessionFirstTrackTrack.PSEC * 75 +
|
||||
secondSessionFirstTrackTrack.PFRAME - 150);
|
||||
secondSessionFirstTrackTrack.PFRAME -
|
||||
150);
|
||||
|
||||
sense = dev.ReadCd(out cmdBuf, out _, firstSectorSecondSessionFirstTrack, 2352, 1, MmcSectorTypes.AllTypes,
|
||||
false, false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None,
|
||||
MmcSubchannel.None, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
firstTrackSecondSession = cmdBuf;
|
||||
else
|
||||
{
|
||||
@@ -593,8 +604,7 @@ public static class MMC
|
||||
false, false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None,
|
||||
MmcSubchannel.None, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
firstTrackSecondSession = cmdBuf;
|
||||
}
|
||||
|
||||
@@ -602,8 +612,7 @@ public static class MMC
|
||||
MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true,
|
||||
MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
firstTrackSecondSessionAudio = cmdBuf;
|
||||
else
|
||||
{
|
||||
@@ -611,8 +620,7 @@ public static class MMC
|
||||
MmcSectorTypes.Cdda, false, false, false, MmcHeaderCodes.None, true, false,
|
||||
MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
firstTrackSecondSessionAudio = cmdBuf;
|
||||
}
|
||||
}
|
||||
@@ -648,8 +656,11 @@ public static class MMC
|
||||
|
||||
if(firstTrack?.POINT is >= 1 and < 0xA0)
|
||||
{
|
||||
var firstTrackSector = (uint)(firstTrack.Value.PHOUR * 3600 * 75 + firstTrack.Value.PMIN * 60 * 75 +
|
||||
firstTrack.Value.PSEC * 75 + firstTrack.Value.PFRAME - 150);
|
||||
var firstTrackSector = (uint)(firstTrack.Value.PHOUR * 3600 * 75 +
|
||||
firstTrack.Value.PMIN * 60 * 75 +
|
||||
firstTrack.Value.PSEC * 75 +
|
||||
firstTrack.Value.PFRAME -
|
||||
150);
|
||||
|
||||
// Check for hidden data before start of track 1
|
||||
if(firstTrackSector > 0)
|
||||
@@ -658,8 +669,7 @@ public static class MMC
|
||||
MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.None,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!dev.Error &&
|
||||
!sense)
|
||||
if(!dev.Error && !sense)
|
||||
{
|
||||
hiddenTrack = true;
|
||||
|
||||
@@ -671,8 +681,7 @@ public static class MMC
|
||||
false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None,
|
||||
MmcSubchannel.None, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
IsCdi(sector0, sector16))
|
||||
if(!sense && IsCdi(sector0, sector16))
|
||||
{
|
||||
mediaType = MediaType.CDIREADY;
|
||||
|
||||
@@ -756,8 +765,7 @@ public static class MMC
|
||||
MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.None,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
sector0 = new byte[2048];
|
||||
Array.Copy(cmdBuf, 16, sector0, 0, 2048);
|
||||
@@ -766,8 +774,7 @@ public static class MMC
|
||||
MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.None,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
sector1 = new byte[2048];
|
||||
Array.Copy(cmdBuf, 16, sector1, 0, 2048);
|
||||
@@ -777,8 +784,7 @@ public static class MMC
|
||||
MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.None,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
playdia1 = new byte[2048];
|
||||
Array.Copy(cmdBuf, 24, playdia1, 0, 2048);
|
||||
@@ -788,8 +794,7 @@ public static class MMC
|
||||
MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.None,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
playdia2 = new byte[2048];
|
||||
Array.Copy(cmdBuf, 24, playdia2, 0, 2048);
|
||||
@@ -801,8 +806,7 @@ public static class MMC
|
||||
false, false, true, MmcHeaderCodes.AllHeaders, true, true,
|
||||
MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
firstDataSectorNotZero = new byte[2048];
|
||||
Array.Copy(cmdBuf, 16, firstDataSectorNotZero, 0, 2048);
|
||||
@@ -812,8 +816,7 @@ public static class MMC
|
||||
MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true,
|
||||
true, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
secondDataSectorNotZero = new byte[2048];
|
||||
Array.Copy(cmdBuf, 16, secondDataSectorNotZero, 0, 2048);
|
||||
@@ -843,8 +846,7 @@ public static class MMC
|
||||
MmcHeaderCodes.None, true, false, MmcErrorField.None, MmcSubchannel.None,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
sector0 = new byte[2048];
|
||||
Array.Copy(cmdBuf, 0, sector0, 0, 2048);
|
||||
@@ -853,8 +855,7 @@ public static class MMC
|
||||
MmcHeaderCodes.None, true, false, MmcErrorField.None, MmcSubchannel.None,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
sector1 = new byte[2048];
|
||||
Array.Copy(cmdBuf, 1, sector0, 0, 2048);
|
||||
@@ -864,8 +865,7 @@ public static class MMC
|
||||
MmcHeaderCodes.None, true, false, MmcErrorField.None, MmcSubchannel.None,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
playdia1 = new byte[2048];
|
||||
Array.Copy(cmdBuf, 0, playdia1, 0, 2048);
|
||||
@@ -875,8 +875,7 @@ public static class MMC
|
||||
MmcHeaderCodes.None, true, false, MmcErrorField.None, MmcSubchannel.None,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
playdia2 = new byte[2048];
|
||||
Array.Copy(cmdBuf, 0, playdia2, 0, 2048);
|
||||
@@ -888,8 +887,7 @@ public static class MMC
|
||||
false, false, false, MmcHeaderCodes.None, true, false,
|
||||
MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
firstDataSectorNotZero = new byte[2048];
|
||||
Array.Copy(cmdBuf, 0, firstDataSectorNotZero, 0, 2048);
|
||||
@@ -899,8 +897,7 @@ public static class MMC
|
||||
MmcSectorTypes.Mode2, false, false, false, MmcHeaderCodes.None, true,
|
||||
false, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
secondDataSectorNotZero = new byte[2048];
|
||||
Array.Copy(cmdBuf, 0, secondDataSectorNotZero, 0, 2048);
|
||||
@@ -930,8 +927,7 @@ public static class MMC
|
||||
MmcHeaderCodes.None, true, false, MmcErrorField.None, MmcSubchannel.None,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
sector0 = cmdBuf;
|
||||
|
||||
@@ -939,16 +935,14 @@ public static class MMC
|
||||
MmcHeaderCodes.None, true, false, MmcErrorField.None, MmcSubchannel.None,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
sector1 = cmdBuf;
|
||||
|
||||
sense = dev.ReadCd(out cmdBuf, out _, 0, 2048, 12, MmcSectorTypes.Mode1, false, false,
|
||||
false, MmcHeaderCodes.None, true, false, MmcErrorField.None,
|
||||
MmcSubchannel.None, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
ps2BootSectors = cmdBuf;
|
||||
|
||||
if(startOfFirstDataTrack != uint.MaxValue)
|
||||
@@ -957,16 +951,14 @@ public static class MMC
|
||||
MmcSectorTypes.Mode1, false, false, false, MmcHeaderCodes.None, true,
|
||||
false, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
firstDataSectorNotZero = cmdBuf;
|
||||
|
||||
sense = dev.ReadCd(out cmdBuf, out _, startOfFirstDataTrack + 1, 2048, 1,
|
||||
MmcSectorTypes.Mode1, false, false, false, MmcHeaderCodes.None, true,
|
||||
false, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
secondDataSectorNotZero = cmdBuf;
|
||||
}
|
||||
}
|
||||
@@ -997,24 +989,20 @@ public static class MMC
|
||||
|
||||
sense = dev.Read16(out cmdBuf, out _, 0, false, false, false, 0, 2048, 0, 1, false, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
sector0 = cmdBuf;
|
||||
|
||||
sense = dev.Read16(out cmdBuf, out _, 0, false, false, false, 1, 2048, 0, 1, false, dev.Timeout,
|
||||
out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
sector1 = cmdBuf;
|
||||
|
||||
sense = dev.Read16(out cmdBuf, out _, 0, false, false, false, 0, 2048, 0, 12, false, dev.Timeout,
|
||||
out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error &&
|
||||
cmdBuf.Length == 0x6000)
|
||||
if(!sense && !dev.Error && cmdBuf.Length == 0x6000)
|
||||
ps2BootSectors = cmdBuf;
|
||||
}
|
||||
else
|
||||
@@ -1022,24 +1010,20 @@ public static class MMC
|
||||
sense = dev.Read12(out cmdBuf, out _, 0, false, false, false, false, 0, 2048, 0, 1, false,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
sector0 = cmdBuf;
|
||||
|
||||
sense = dev.Read12(out cmdBuf, out _, 0, false, false, false, false, 1, 2048, 0, 1, false,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
sector1 = cmdBuf;
|
||||
|
||||
sense = dev.Read12(out cmdBuf, out _, 0, false, false, false, false, 0, 2048, 0, 12, false,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error &&
|
||||
cmdBuf.Length == 0x6000)
|
||||
if(!sense && !dev.Error && cmdBuf.Length == 0x6000)
|
||||
ps2BootSectors = cmdBuf;
|
||||
}
|
||||
else
|
||||
@@ -1047,46 +1031,38 @@ public static class MMC
|
||||
sense = dev.Read10(out cmdBuf, out _, 0, false, false, false, false, 0, 2048, 0, 1, dev.Timeout,
|
||||
out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
sector0 = cmdBuf;
|
||||
|
||||
sense = dev.Read10(out cmdBuf, out _, 0, false, false, false, false, 1, 2048, 0, 1,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
sector1 = cmdBuf;
|
||||
|
||||
sense = dev.Read10(out cmdBuf, out _, 0, false, false, false, false, 0, 2048, 0, 12,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error &&
|
||||
cmdBuf.Length == 0x6000)
|
||||
if(!sense && !dev.Error && cmdBuf.Length == 0x6000)
|
||||
ps2BootSectors = cmdBuf;
|
||||
}
|
||||
else
|
||||
{
|
||||
sense = dev.Read6(out cmdBuf, out _, 0, 2048, 1, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
sector0 = cmdBuf;
|
||||
|
||||
sense = dev.Read6(out cmdBuf, out _, 1, 2048, 1, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
sector1 = cmdBuf;
|
||||
|
||||
sense = dev.Read6(out cmdBuf, out _, 0, 2048, 12, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error &&
|
||||
cmdBuf.Length == 0x6000)
|
||||
if(!sense && !dev.Error && cmdBuf.Length == 0x6000)
|
||||
ps2BootSectors = cmdBuf;
|
||||
}
|
||||
}
|
||||
@@ -1207,8 +1183,7 @@ public static class MMC
|
||||
break;
|
||||
|
||||
// If it is PVD or end of descriptor chain, break
|
||||
if(isoSector[0] == 1 ||
|
||||
isoSector[0] == 255)
|
||||
if(isoSector[0] == 1 || isoSector[0] == 255)
|
||||
break;
|
||||
|
||||
isoSectorPosition++;
|
||||
@@ -1226,8 +1201,7 @@ public static class MMC
|
||||
var rootStart = BitConverter.ToUInt32(isoSector, 158);
|
||||
var rootLength = BitConverter.ToUInt32(isoSector, 166);
|
||||
|
||||
if(rootStart == 0 ||
|
||||
rootLength == 0)
|
||||
if(rootStart == 0 || rootLength == 0)
|
||||
return;
|
||||
|
||||
rootLength /= 2048;
|
||||
@@ -1273,8 +1247,7 @@ public static class MMC
|
||||
if(name.EndsWith(";1", StringComparison.InvariantCulture))
|
||||
name = name[..^2];
|
||||
|
||||
if(name == "PHOTO_CD" &&
|
||||
(isoSector[rootPos + 25] & 0x02) == 0x02)
|
||||
if(name == "PHOTO_CD" && (isoSector[rootPos + 25] & 0x02) == 0x02)
|
||||
{
|
||||
pcdStart = BitConverter.ToUInt32(isoSector, rootPos + 2);
|
||||
pcdLength = BitConverter.ToUInt32(isoSector, rootPos + 10) / 2048;
|
||||
@@ -1443,8 +1416,7 @@ public static class MMC
|
||||
|
||||
string ps2BootSectorsHash = Sha256Context.Data(ps2BootSectors, out _);
|
||||
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.PlayStation_2_boot_sectors_SHA256_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.PlayStation_2_boot_sectors_SHA256_0,
|
||||
ps2BootSectorsHash);
|
||||
|
||||
if(ps2BootSectorsHash is PS2_PAL_HASH or PS2_NTSC_HASH or PS2_JAPANESE_HASH)
|
||||
@@ -1482,8 +1454,7 @@ public static class MMC
|
||||
}
|
||||
}
|
||||
|
||||
if(playdia1 != null &&
|
||||
playdia2 != null)
|
||||
if(playdia1 != null && playdia2 != null)
|
||||
{
|
||||
var pd1 = new byte[_playdiaCopyright.Length];
|
||||
var pd2 = new byte[_playdiaCopyright.Length];
|
||||
@@ -1491,8 +1462,7 @@ public static class MMC
|
||||
Array.Copy(playdia1, 38, pd1, 0, pd1.Length);
|
||||
Array.Copy(playdia2, 0, pd2, 0, pd1.Length);
|
||||
|
||||
if(_playdiaCopyright.SequenceEqual(pd1) &&
|
||||
_playdiaCopyright.SequenceEqual(pd2))
|
||||
if(_playdiaCopyright.SequenceEqual(pd1) && _playdiaCopyright.SequenceEqual(pd2))
|
||||
{
|
||||
mediaType = MediaType.Playdia;
|
||||
|
||||
@@ -1674,8 +1644,7 @@ public static class MMC
|
||||
break;
|
||||
|
||||
// If it is PVD or end of descriptor chain, break
|
||||
if(isoSector[0] == 1 ||
|
||||
isoSector[0] == 255)
|
||||
if(isoSector[0] == 1 || isoSector[0] == 255)
|
||||
break;
|
||||
|
||||
isoSectorPosition++;
|
||||
@@ -1693,8 +1662,7 @@ public static class MMC
|
||||
var rootStart = BitConverter.ToUInt32(isoSector, 158);
|
||||
var rootLength = BitConverter.ToUInt32(isoSector, 166);
|
||||
|
||||
if(rootStart == 0 ||
|
||||
rootLength == 0)
|
||||
if(rootStart == 0 || rootLength == 0)
|
||||
return;
|
||||
|
||||
rootLength /= 2048;
|
||||
@@ -1851,8 +1819,7 @@ public static class MMC
|
||||
string line = sr.ReadLine();
|
||||
|
||||
// End of file
|
||||
if(line is null ||
|
||||
line.Length == 0)
|
||||
if(line is null || line.Length == 0)
|
||||
{
|
||||
if(lineNumber == 0)
|
||||
correctNeoGeoCd = false;
|
||||
@@ -1906,8 +1873,7 @@ public static class MMC
|
||||
}
|
||||
|
||||
// Second part must be a single digit
|
||||
if(split[1].Length != 1 ||
|
||||
!byte.TryParse(split[1], out _))
|
||||
if(split[1].Length != 1 || !byte.TryParse(split[1], out _))
|
||||
{
|
||||
correctNeoGeoCd = false;
|
||||
|
||||
@@ -2173,8 +2139,7 @@ public static class MMC
|
||||
string line = sr.ReadLine();
|
||||
|
||||
// End of file
|
||||
if(line is null ||
|
||||
line.Length == 0)
|
||||
if(line is null || line.Length == 0)
|
||||
break;
|
||||
|
||||
line = line.Replace(" ", "");
|
||||
@@ -2206,8 +2171,7 @@ public static class MMC
|
||||
break;
|
||||
}
|
||||
|
||||
if(ps1BootFile != null &&
|
||||
rootEntries.Contains(ps1BootFile.ToUpperInvariant()))
|
||||
if(ps1BootFile != null && rootEntries.Contains(ps1BootFile.ToUpperInvariant()))
|
||||
{
|
||||
mediaType = MediaType.PS1CD;
|
||||
|
||||
@@ -2215,8 +2179,7 @@ public static class MMC
|
||||
Localization.Core.Found_correct_SYSTEM_CNF_file_in_root_PS1);
|
||||
}
|
||||
|
||||
if(ps2BootFile != null &&
|
||||
rootEntries.Contains(ps2BootFile.ToUpperInvariant()))
|
||||
if(ps2BootFile != null && rootEntries.Contains(ps2BootFile.ToUpperInvariant()))
|
||||
{
|
||||
mediaType = MediaType.PS2CD;
|
||||
|
||||
@@ -2248,8 +2211,7 @@ public static class MMC
|
||||
|
||||
string ps2BootSectorsHash = Sha256Context.Data(ps2BootSectors, out _);
|
||||
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.PlayStation_2_boot_sectors_SHA256_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.PlayStation_2_boot_sectors_SHA256_0,
|
||||
ps2BootSectorsHash);
|
||||
|
||||
if(ps2BootSectorsHash is PS2_PAL_HASH or PS2_NTSC_HASH or PS2_JAPANESE_HASH)
|
||||
@@ -2290,8 +2252,7 @@ public static class MMC
|
||||
tmp = new byte[_ps4Id.Length];
|
||||
Array.Copy(sector1, 512, tmp, 0, tmp.Length);
|
||||
|
||||
if(tmp.SequenceEqual(_ps4Id) &&
|
||||
mediaType == MediaType.BDROM)
|
||||
if(tmp.SequenceEqual(_ps4Id) && mediaType == MediaType.BDROM)
|
||||
{
|
||||
mediaType = MediaType.PS4BD;
|
||||
|
||||
@@ -2300,8 +2261,7 @@ public static class MMC
|
||||
}
|
||||
}
|
||||
|
||||
if(blurayDi is { Units.Length: > 0 } &&
|
||||
blurayDi?.Units[0].DiscTypeIdentifier != null)
|
||||
if(blurayDi is { Units.Length: > 0 } && blurayDi?.Units[0].DiscTypeIdentifier != null)
|
||||
{
|
||||
string blurayType = StringHandlers.CToString(blurayDi?.Units[0].DiscTypeIdentifier);
|
||||
|
||||
|
||||
@@ -92,7 +92,10 @@ public static class CompactDisc
|
||||
if(dataTrack != null)
|
||||
{
|
||||
// Build sync
|
||||
sectorSync = new byte[] { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00 };
|
||||
sectorSync = new byte[]
|
||||
{
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00
|
||||
};
|
||||
|
||||
tmpBuf = new byte[sectorSync.Length];
|
||||
|
||||
@@ -107,8 +110,7 @@ public static class CompactDisc
|
||||
sense = dev.PlextorReadCdDa(out cmdBuf, out _, wantedLba, sectorSize, 3, PlextorSubchannel.None,
|
||||
dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
supportsPlextorReadCdDa = true;
|
||||
|
||||
@@ -144,7 +146,8 @@ public static class CompactDisc
|
||||
}
|
||||
|
||||
if(!offsetFound &&
|
||||
(debug || dbDev?.ATAPI?.RemovableMedias?.Any(d => d.CanReadCdScrambled == true) == true ||
|
||||
(debug ||
|
||||
dbDev?.ATAPI?.RemovableMedias?.Any(d => d.CanReadCdScrambled == true) == true ||
|
||||
dbDev?.SCSI?.RemovableMedias?.Any(d => d.CanReadCdScrambled == true) == true ||
|
||||
dbDev?.SCSI?.MultiMediaDevice?.TestedMedia?.Any(d => d.CanReadCdScrambled == true) == true ||
|
||||
dev.Manufacturer.Equals("hl-dt-st", StringComparison.InvariantCultureIgnoreCase)))
|
||||
@@ -153,8 +156,7 @@ public static class CompactDisc
|
||||
false, false, MmcHeaderCodes.None, true, false, MmcErrorField.None,
|
||||
MmcSubchannel.None, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!dev.Error)
|
||||
if(!sense && !dev.Error)
|
||||
{
|
||||
// Clear cache
|
||||
for(var i = 0; i < 63; i++)
|
||||
@@ -212,8 +214,7 @@ public static class CompactDisc
|
||||
|
||||
for(var i = 1; i < tracks.Length; i++)
|
||||
{
|
||||
if(tracks[i - 1].Type == TrackType.Audio ||
|
||||
tracks[i].Type != TrackType.Audio)
|
||||
if(tracks[i - 1].Type == TrackType.Audio || tracks[i].Type != TrackType.Audio)
|
||||
continue;
|
||||
|
||||
dataTrack = tracks[i - 1];
|
||||
@@ -222,8 +223,7 @@ public static class CompactDisc
|
||||
break;
|
||||
}
|
||||
|
||||
if(dataTrack is null ||
|
||||
audioTrack is null)
|
||||
if(dataTrack is null || audioTrack is null)
|
||||
return;
|
||||
|
||||
// Found them
|
||||
|
||||
@@ -62,8 +62,7 @@ public sealed class ScsiInfo
|
||||
/// <param name="dev">Device</param>
|
||||
public ScsiInfo(Device dev)
|
||||
{
|
||||
if(dev.Type != DeviceType.SCSI &&
|
||||
dev.Type != DeviceType.ATAPI)
|
||||
if(dev.Type != DeviceType.SCSI && dev.Type != DeviceType.ATAPI)
|
||||
return;
|
||||
|
||||
MediaType = MediaType.Unknown;
|
||||
@@ -210,11 +209,9 @@ public sealed class ScsiInfo
|
||||
if(!sense)
|
||||
ReadCapacity16 = cmdBuf;
|
||||
|
||||
if(ReadCapacity == null ||
|
||||
Blocks is 0xFFFFFFFF or 0)
|
||||
if(ReadCapacity == null || Blocks is 0xFFFFFFFF or 0)
|
||||
{
|
||||
if(ReadCapacity16 == null &&
|
||||
Blocks == 0)
|
||||
if(ReadCapacity16 == null && Blocks == 0)
|
||||
{
|
||||
if(dev.ScsiType != PeripheralDeviceTypes.MultiMediaDevice)
|
||||
{
|
||||
@@ -234,8 +231,7 @@ public sealed class ScsiInfo
|
||||
}
|
||||
}
|
||||
|
||||
if(Blocks != 0 &&
|
||||
BlockSize != 0)
|
||||
if(Blocks != 0 && BlockSize != 0)
|
||||
Blocks++;
|
||||
|
||||
break;
|
||||
@@ -248,8 +244,7 @@ public sealed class ScsiInfo
|
||||
{
|
||||
sense = dev.ReportDensitySupport(out medBuf, out senseBuf, true, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!seqBuf.SequenceEqual(medBuf))
|
||||
if(!sense && !seqBuf.SequenceEqual(medBuf))
|
||||
{
|
||||
DensitySupport = seqBuf;
|
||||
DensitySupportHeader = Decoders.SCSI.SSC.DensitySupport.DecodeDensity(seqBuf);
|
||||
@@ -262,8 +257,7 @@ public sealed class ScsiInfo
|
||||
{
|
||||
sense = dev.ReportDensitySupport(out medBuf, out senseBuf, true, true, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
!seqBuf.SequenceEqual(medBuf))
|
||||
if(!sense && !seqBuf.SequenceEqual(medBuf))
|
||||
{
|
||||
MediaTypeSupport = medBuf;
|
||||
MediaTypeSupportHeader = Decoders.SCSI.SSC.DensitySupport.DecodeMediumType(seqBuf);
|
||||
@@ -304,11 +298,9 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "READ GET CONFIGURATION:\n{0}",
|
||||
Sense.PrettifySense(senseBuf));
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "READ GET CONFIGURATION:\n{0}", Sense.PrettifySense(senseBuf));
|
||||
|
||||
if(dev.IsUsb &&
|
||||
scsiMediumType is 0x40 or 0x41 or 0x42)
|
||||
if(dev.IsUsb && scsiMediumType is 0x40 or 0x41 or 0x42)
|
||||
MediaType = MediaType.FlashDrive;
|
||||
}
|
||||
else
|
||||
@@ -316,8 +308,7 @@ public sealed class ScsiInfo
|
||||
MmcConfiguration = cmdBuf;
|
||||
Features.SeparatedFeatures ftr = Features.Separate(cmdBuf);
|
||||
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.GET_CONFIGURATION_current_profile_is_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.GET_CONFIGURATION_current_profile_is_0,
|
||||
ftr.CurrentProfile);
|
||||
|
||||
switch(ftr.CurrentProfile)
|
||||
@@ -455,8 +446,7 @@ public sealed class ScsiInfo
|
||||
}
|
||||
}
|
||||
|
||||
if(MediaType == MediaType.PD650 &&
|
||||
Blocks == 1281856)
|
||||
if(MediaType == MediaType.PD650 && Blocks == 1281856)
|
||||
MediaType = MediaType.PD650_WORM;
|
||||
|
||||
sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0,
|
||||
@@ -476,8 +466,7 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.READ_DISC_STRUCTURE_Write_Protection_Status_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Write_Protection_Status_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
}
|
||||
else
|
||||
@@ -496,10 +485,9 @@ public sealed class ScsiInfo
|
||||
|
||||
if(MediaType is MediaType.DVDDownload or MediaType.DVDPR or MediaType.DVDPRDL or MediaType.DVDPRW
|
||||
or MediaType.DVDPRWDL or MediaType.DVDR or MediaType.DVDRAM or MediaType.DVDRDL
|
||||
or MediaType.DVDROM
|
||||
or MediaType.DVDRW or MediaType.DVDRWDL or MediaType.HDDVDR or MediaType.HDDVDRAM
|
||||
or MediaType.HDDVDRDL
|
||||
or MediaType.HDDVDROM or MediaType.HDDVDRW or MediaType.HDDVDRWDL)
|
||||
or MediaType.DVDROM or MediaType.DVDRW or MediaType.DVDRWDL or MediaType.HDDVDR
|
||||
or MediaType.HDDVDRAM or MediaType.HDDVDRDL or MediaType.HDDVDROM or MediaType.HDDVDRW
|
||||
or MediaType.HDDVDRWDL)
|
||||
{
|
||||
sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0,
|
||||
MmcDiscStructureFormat.PhysicalInformation, 0, dev.Timeout, out _);
|
||||
@@ -614,8 +602,7 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.READ_DISC_STRUCTURE_DVD_AACS_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_DVD_AACS_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
}
|
||||
else
|
||||
@@ -645,8 +632,7 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.READ_DISC_STRUCTURE_Medium_Status_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Medium_Status_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
}
|
||||
else
|
||||
@@ -779,8 +765,7 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.READ_DISC_STRUCTURE_Pre_Recorded_Info_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Pre_Recorded_Info_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
}
|
||||
else
|
||||
@@ -807,8 +792,7 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.READ_DISC_STRUCTURE_DVD_R_Media_ID_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_DVD_R_Media_ID_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
}
|
||||
else
|
||||
@@ -820,8 +804,7 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.READ_DISC_STRUCTURE_DVD_R_PFI_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_DVD_R_PFI_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
}
|
||||
else
|
||||
@@ -876,8 +859,7 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.READ_DISC_STRUCTURE_HD_DVD_CMI_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_HD_DVD_CMI_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
}
|
||||
else
|
||||
@@ -911,8 +893,7 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.READ_DISC_STRUCTURE_Last_RMD_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Last_RMD_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
}
|
||||
else
|
||||
@@ -932,8 +913,7 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.READ_DISC_STRUCTURE_Layer_Capacity_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Layer_Capacity_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
}
|
||||
else
|
||||
@@ -1093,8 +1073,7 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
"READ DISC STRUCTURE: Spare Area Information\n{0}",
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "READ DISC STRUCTURE: Spare Area Information\n{0}",
|
||||
Sense.PrettifySense(senseBuf));
|
||||
}
|
||||
else
|
||||
@@ -1105,8 +1084,7 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.READ_DISC_STRUCTURE_Raw_DFL_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.READ_DISC_STRUCTURE_Raw_DFL_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
}
|
||||
else
|
||||
@@ -1192,8 +1170,7 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.READ_TOC_PMA_ATIP_Session_Info_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.READ_TOC_PMA_ATIP_Session_Info_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
}
|
||||
else if(cmdBuf.Length > 4)
|
||||
@@ -1212,8 +1189,7 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.READ_TOC_PMA_ATIP_Raw_TOC_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.READ_TOC_PMA_ATIP_Raw_TOC_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
}
|
||||
else if(cmdBuf.Length > 4)
|
||||
@@ -1237,8 +1213,7 @@ public sealed class ScsiInfo
|
||||
|
||||
if(sense)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.READ_TOC_PMA_ATIP_CD_TEXT_0,
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.READ_TOC_PMA_ATIP_CD_TEXT_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
}
|
||||
else if(cmdBuf.Length > 4)
|
||||
@@ -1249,9 +1224,7 @@ public sealed class ScsiInfo
|
||||
|
||||
sense = dev.ReadMcn(out string mcn, out _, out _, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
mcn != null &&
|
||||
mcn != "0000000000000")
|
||||
if(!sense && mcn != null && mcn != "0000000000000")
|
||||
Mcn = mcn;
|
||||
|
||||
Isrcs = new Dictionary<byte, string>();
|
||||
@@ -1260,9 +1233,7 @@ public sealed class ScsiInfo
|
||||
{
|
||||
sense = dev.ReadIsrc(i, out string isrc, out _, out _, dev.Timeout, out _);
|
||||
|
||||
if(!sense &&
|
||||
isrc != null &&
|
||||
isrc != "000000000000")
|
||||
if(!sense && isrc != null && isrc != "000000000000")
|
||||
Isrcs.Add(i, isrc);
|
||||
}
|
||||
|
||||
@@ -1277,8 +1248,7 @@ public sealed class ScsiInfo
|
||||
|
||||
#region Nintendo
|
||||
|
||||
if(MediaType == MediaType.Unknown &&
|
||||
Blocks > 0)
|
||||
if(MediaType == MediaType.Unknown && Blocks > 0)
|
||||
{
|
||||
sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0,
|
||||
MmcDiscStructureFormat.PhysicalInformation, 0, dev.Timeout, out _);
|
||||
@@ -1367,8 +1337,7 @@ public sealed class ScsiInfo
|
||||
DecodedXboxSecuritySector = SS.Decode(cmdBuf);
|
||||
|
||||
// Get video partition size
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.Getting_video_partition_size);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Getting_video_partition_size);
|
||||
|
||||
sense = dev.KreonLock(out senseBuf, dev.Timeout, out _);
|
||||
|
||||
@@ -1401,11 +1370,12 @@ public sealed class ScsiInfo
|
||||
break;
|
||||
}
|
||||
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.Video_partition_total_size_0_sectors, totalSize);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Video_partition_total_size_0_sectors,
|
||||
totalSize);
|
||||
|
||||
ulong l0Video = PFI.Decode(cmdBuf, MediaType).Value.Layer0EndPSN -
|
||||
PFI.Decode(cmdBuf, MediaType).Value.DataAreaStartPSN + 1;
|
||||
PFI.Decode(cmdBuf, MediaType).Value.DataAreaStartPSN +
|
||||
1;
|
||||
|
||||
ulong l1Video = totalSize - l0Video + 1;
|
||||
|
||||
@@ -1431,10 +1401,11 @@ public sealed class ScsiInfo
|
||||
|
||||
ulong gameSize =
|
||||
((ulong)((cmdBuf[0] << 24) + (cmdBuf[1] << 16) + (cmdBuf[2] << 8) + cmdBuf[3]) &
|
||||
0xFFFFFFFF) + 1;
|
||||
0xFFFFFFFF) +
|
||||
1;
|
||||
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.Game_partition_total_size_0_sectors, gameSize);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Game_partition_total_size_0_sectors,
|
||||
gameSize);
|
||||
|
||||
// Get middle zone size
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Getting_middle_zone_size);
|
||||
@@ -1469,12 +1440,15 @@ public sealed class ScsiInfo
|
||||
break;
|
||||
}
|
||||
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME,
|
||||
Localization.Core.Unlocked_total_size_0_sectors, totalSize);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Unlocked_total_size_0_sectors,
|
||||
totalSize);
|
||||
|
||||
ulong middleZone =
|
||||
totalSize - (PFI.Decode(cmdBuf, MediaType).Value.Layer0EndPSN -
|
||||
PFI.Decode(cmdBuf, MediaType).Value.DataAreaStartPSN + 1) - gameSize + 1;
|
||||
ulong middleZone = totalSize -
|
||||
(PFI.Decode(cmdBuf, MediaType).Value.Layer0EndPSN -
|
||||
PFI.Decode(cmdBuf, MediaType).Value.DataAreaStartPSN +
|
||||
1) -
|
||||
gameSize +
|
||||
1;
|
||||
|
||||
totalSize = l0Video + l1Video + middleZone * 2 + gameSize;
|
||||
ulong layerBreak = l0Video + middleZone + gameSize / 2;
|
||||
@@ -1503,13 +1477,10 @@ public sealed class ScsiInfo
|
||||
break;
|
||||
}
|
||||
|
||||
if(MediaType == MediaType.Unknown &&
|
||||
dev.IsUsb &&
|
||||
containsFloppyPage)
|
||||
if(MediaType == MediaType.Unknown && dev.IsUsb && containsFloppyPage)
|
||||
MediaType = MediaType.FlashDrive;
|
||||
|
||||
if(MediaType == MediaType.Unknown &&
|
||||
!dev.IsRemovable)
|
||||
if(MediaType == MediaType.Unknown && !dev.IsRemovable)
|
||||
MediaType = MediaType.GENERIC_HDD;
|
||||
|
||||
if(DeviceInfo.ScsiType != PeripheralDeviceTypes.MultiMediaDevice ||
|
||||
|
||||
Reference in New Issue
Block a user