mirror of
https://github.com/aaru-dps/Aaru.Server.git
synced 2025-12-16 19:24:27 +00:00
Correct Alcohol mode values and correct images created for CDs >=60min.
This commit is contained in:
1
.idea/.idea.DiscImageChef/.idea/contentModel.xml
generated
1
.idea/.idea.DiscImageChef/.idea/contentModel.xml
generated
@@ -437,6 +437,7 @@
|
||||
</e>
|
||||
</e>
|
||||
<e p="DiscImageChef.DiscImages" t="IncludeRecursive">
|
||||
<e p=".syncthing.Alcohol120.cs.tmp" t="Include" />
|
||||
<e p="Alcohol120.cs" t="Include" />
|
||||
<e p="Anex86.cs" t="Include" />
|
||||
<e p="Apple2MG.cs" t="Include" />
|
||||
|
||||
@@ -249,7 +249,8 @@ namespace DiscImageChef.DiscImages
|
||||
alcSessions.Add(session.sessionSequence, session);
|
||||
}
|
||||
|
||||
long footerOff = 0;
|
||||
long footerOff = 0;
|
||||
bool oldIncorrectImage = false;
|
||||
|
||||
alcTracks = new Dictionary<int, AlcoholTrack>();
|
||||
alcToc = new Dictionary<int, Dictionary<int, AlcoholTrack>>();
|
||||
@@ -266,6 +267,17 @@ namespace DiscImageChef.DiscImages
|
||||
AlcoholTrack track = (AlcoholTrack)Marshal.PtrToStructure(trkPtr, typeof(AlcoholTrack));
|
||||
Marshal.FreeHGlobal(trkPtr);
|
||||
|
||||
if(track.mode == AlcoholTrackMode.Mode2F1Alt || track.mode == AlcoholTrackMode.Mode2F1Alt)
|
||||
oldIncorrectImage = true;
|
||||
|
||||
// Solve our own mistake here, sorry, but anyway seems Alcohol doesn't support DDCD
|
||||
if(track.zero > 0)
|
||||
{
|
||||
track.pmin += (byte)(track.zero * 60);
|
||||
track.zero = 0;
|
||||
oldIncorrectImage = true;
|
||||
}
|
||||
|
||||
DicConsole.DebugWriteLine("Alcohol 120% plugin", "session[{2}].track[{1}].mode = {0}", track.mode,
|
||||
track.point, session.sessionSequence);
|
||||
DicConsole.DebugWriteLine("Alcohol 120% plugin", "session[{2}].track[{1}].subMode = {0}",
|
||||
@@ -529,6 +541,8 @@ namespace DiscImageChef.DiscImages
|
||||
case AlcoholTrackMode.Mode2:
|
||||
case AlcoholTrackMode.Mode2F1:
|
||||
case AlcoholTrackMode.Mode2F2:
|
||||
case AlcoholTrackMode.Mode2F1Alt:
|
||||
case AlcoholTrackMode.Mode2F2Alt:
|
||||
mode2 = true;
|
||||
break;
|
||||
}
|
||||
@@ -598,6 +612,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(imageInfo.SectorSize < 2336) imageInfo.SectorSize = 2336;
|
||||
break;
|
||||
case AlcoholTrackMode.Mode2F2:
|
||||
case AlcoholTrackMode.Mode2F2Alt:
|
||||
if(!imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSync))
|
||||
imageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSync);
|
||||
if(!imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorHeader))
|
||||
@@ -707,6 +722,9 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
DicConsole.VerboseWriteLine("Alcohol 120% image describes a disc of type {0}", imageInfo.MediaType);
|
||||
|
||||
if(oldIncorrectImage)
|
||||
DicConsole.WriteLine("Incorrect Alcohol 120% image created by an old version of DiscImageChef. Convert image to correct it.");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -834,6 +852,7 @@ namespace DiscImageChef.DiscImages
|
||||
break;
|
||||
}
|
||||
case AlcoholTrackMode.Mode2F2:
|
||||
case AlcoholTrackMode.Mode2F2Alt:
|
||||
{
|
||||
sectorOffset = 24;
|
||||
sectorSize = 2324;
|
||||
@@ -1104,6 +1123,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
break;
|
||||
case AlcoholTrackMode.Mode2F2:
|
||||
case AlcoholTrackMode.Mode2F2Alt:
|
||||
switch(tag)
|
||||
{
|
||||
case SectorTagType.CdSectorSync:
|
||||
@@ -1258,6 +1278,7 @@ namespace DiscImageChef.DiscImages
|
||||
case AlcoholTrackMode.Mode2F1:
|
||||
case AlcoholTrackMode.Mode2F1Alt:
|
||||
case AlcoholTrackMode.Mode2F2:
|
||||
case AlcoholTrackMode.Mode2F2Alt:
|
||||
case AlcoholTrackMode.Audio:
|
||||
case AlcoholTrackMode.DVD:
|
||||
{
|
||||
@@ -1446,16 +1467,15 @@ namespace DiscImageChef.DiscImages
|
||||
MediaType.BDR, MediaType.BDRE, MediaType.BDREXL, MediaType.BDROM, MediaType.BDRXL, MediaType.CBHD,
|
||||
MediaType.CD, MediaType.CDDA, MediaType.CDEG, MediaType.CDG, MediaType.CDI, MediaType.CDMIDI,
|
||||
MediaType.CDMRW, MediaType.CDPLUS, MediaType.CDR, MediaType.CDROM, MediaType.CDROMXA, MediaType.CDRW,
|
||||
MediaType.CDV, MediaType.DDCD, MediaType.DDCDR, MediaType.DDCDRW, MediaType.DVDDownload,
|
||||
MediaType.DVDPR, MediaType.DVDPRDL, MediaType.DVDPRW, MediaType.DVDPRWDL, MediaType.DVDR,
|
||||
MediaType.DVDRAM, MediaType.DVDRDL, MediaType.DVDROM, MediaType.DVDRW, MediaType.DVDRWDL, MediaType.EVD,
|
||||
MediaType.FDDVD, MediaType.DTSCD, MediaType.FVD, MediaType.HDDVDR, MediaType.HDDVDRAM,
|
||||
MediaType.HDDVDRDL, MediaType.HDDVDROM, MediaType.HDDVDRW, MediaType.HDDVDRWDL, MediaType.HDVMD,
|
||||
MediaType.HVD, MediaType.JaguarCD, MediaType.MEGACD, MediaType.PD650, MediaType.PD650_WORM,
|
||||
MediaType.PS1CD, MediaType.PS2CD, MediaType.PS2DVD, MediaType.PS3BD, MediaType.PS3DVD, MediaType.PS4BD,
|
||||
MediaType.SuperCDROM2, MediaType.SVCD, MediaType.SVOD, MediaType.SATURNCD, MediaType.ThreeDO,
|
||||
MediaType.UDO, MediaType.UDO2, MediaType.UDO2_WORM, MediaType.UMD, MediaType.VCD, MediaType.VCDHD,
|
||||
MediaType.NeoGeoCD, MediaType.PCFX
|
||||
MediaType.CDV, MediaType.DVDDownload, MediaType.DVDPR, MediaType.DVDPRDL, MediaType.DVDPRW,
|
||||
MediaType.DVDPRWDL, MediaType.DVDR, MediaType.DVDRAM, MediaType.DVDRDL, MediaType.DVDROM,
|
||||
MediaType.DVDRW, MediaType.DVDRWDL, MediaType.EVD, MediaType.FDDVD, MediaType.DTSCD, MediaType.FVD,
|
||||
MediaType.HDDVDR, MediaType.HDDVDRAM, MediaType.HDDVDRDL, MediaType.HDDVDROM, MediaType.HDDVDRW,
|
||||
MediaType.HDDVDRWDL, MediaType.HDVMD, MediaType.HVD, MediaType.JaguarCD, MediaType.MEGACD,
|
||||
MediaType.PD650, MediaType.PD650_WORM, MediaType.PS1CD, MediaType.PS2CD, MediaType.PS2DVD,
|
||||
MediaType.PS3BD, MediaType.PS3DVD, MediaType.PS4BD, MediaType.SuperCDROM2, MediaType.SVCD,
|
||||
MediaType.SVOD, MediaType.SATURNCD, MediaType.ThreeDO, MediaType.UDO, MediaType.UDO2,
|
||||
MediaType.UDO2_WORM, MediaType.UMD, MediaType.VCD, MediaType.VCDHD, MediaType.NeoGeoCD, MediaType.PCFX
|
||||
};
|
||||
public IEnumerable<(string name, Type type, string description)> SupportedOptions =>
|
||||
new (string name, Type type, string description)[] { };
|
||||
@@ -1505,9 +1525,6 @@ namespace DiscImageChef.DiscImages
|
||||
case MediaType.CDROMXA:
|
||||
case MediaType.CDRW:
|
||||
case MediaType.CDV:
|
||||
case MediaType.DDCD:
|
||||
case MediaType.DDCDR:
|
||||
case MediaType.DDCDRW:
|
||||
case MediaType.DTSCD:
|
||||
case MediaType.JaguarCD:
|
||||
case MediaType.MEGACD:
|
||||
@@ -1909,8 +1926,7 @@ namespace DiscImageChef.DiscImages
|
||||
firstTrackControl = (byte)CdFlags.DataTrack;
|
||||
if(lastTrackControl == 0 && lastTrack.TrackType != TrackType.Audio)
|
||||
lastTrackControl = (byte)CdFlags.DataTrack;
|
||||
(byte hour, byte minute, byte second, byte frame) leadinPmsf =
|
||||
LbaToMsf(lastTrack.TrackEndSector + 1);
|
||||
(byte minute, byte second, byte frame) leadinPmsf = LbaToMsf(lastTrack.TrackEndSector + 1);
|
||||
|
||||
byte discTypeToc = 0;
|
||||
FullTOC.CDFullTOC? decodedToc = FullTOC.Decode(fullToc);
|
||||
@@ -1954,7 +1970,7 @@ namespace DiscImageChef.DiscImages
|
||||
new AlcoholTrack
|
||||
{
|
||||
adrCtl = (byte)((1 << 4) + firstTrackControl),
|
||||
zero = leadinPmsf.hour,
|
||||
zero = 0,
|
||||
pmin = leadinPmsf.minute,
|
||||
psec = leadinPmsf.second,
|
||||
pframe = leadinPmsf.frame,
|
||||
@@ -1968,7 +1984,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
foreach(Track track in writingTracks.Where(t => t.TrackSession == i).OrderBy(t => t.TrackSequence))
|
||||
{
|
||||
(byte hour, byte minute, byte second, byte frame) msf = LbaToMsf(track.TrackStartSector);
|
||||
(byte minute, byte second, byte frame) msf = LbaToMsf(track.TrackStartSector);
|
||||
trackFlags.TryGetValue((byte)track.TrackSequence, out byte trackControl);
|
||||
if(trackControl == 0 && track.TrackType != TrackType.Audio)
|
||||
trackControl = (byte)CdFlags.DataTrack;
|
||||
@@ -1985,7 +2001,7 @@ namespace DiscImageChef.DiscImages
|
||||
: AlcoholSubchannelMode.None,
|
||||
adrCtl = (byte)((1 << 4) + trackControl),
|
||||
point = (byte)track.TrackSequence,
|
||||
zero = msf.hour,
|
||||
zero = 0,
|
||||
pmin = msf.minute,
|
||||
psec = msf.second,
|
||||
pframe = msf.frame,
|
||||
@@ -2020,20 +2036,18 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(i < sessions)
|
||||
{
|
||||
(byte hour, byte minute, byte second, byte frame) leadoutAmsf =
|
||||
(byte minute, byte second, byte frame) leadoutAmsf =
|
||||
LbaToMsf(writingTracks.First(t => t.TrackSession == i + 1).TrackStartSector - 150);
|
||||
(byte hour, byte minute, byte second, byte frame) leadoutPmsf =
|
||||
(byte minute, byte second, byte frame) leadoutPmsf =
|
||||
LbaToMsf(writingTracks.OrderBy(t => t.TrackSession).ThenBy(t => t.TrackSequence).Last()
|
||||
.TrackStartSector);
|
||||
|
||||
thisSessionTracks.Add(0xB0,
|
||||
new AlcoholTrack
|
||||
{
|
||||
point = 0xB0,
|
||||
adrCtl = 0x50,
|
||||
zero =
|
||||
(byte)(((leadoutAmsf.hour & 0xF) << 4) +
|
||||
(leadoutPmsf.hour & 0xF)),
|
||||
point = 0xB0,
|
||||
adrCtl = 0x50,
|
||||
zero = 0,
|
||||
min = leadoutAmsf.minute,
|
||||
sec = leadoutAmsf.second,
|
||||
frame = leadoutAmsf.frame,
|
||||
@@ -2320,8 +2334,9 @@ namespace DiscImageChef.DiscImages
|
||||
case AlcoholTrackMode.Audio:
|
||||
case AlcoholTrackMode.Mode1:
|
||||
case AlcoholTrackMode.Mode2:
|
||||
case AlcoholTrackMode.Mode2F2:
|
||||
case AlcoholTrackMode.Mode2F1:
|
||||
case AlcoholTrackMode.Mode2F2:
|
||||
case AlcoholTrackMode.Mode2F2Alt:
|
||||
case AlcoholTrackMode.Mode2F1Alt: return 2352;
|
||||
case AlcoholTrackMode.DVD: return 2048;
|
||||
default: return 0;
|
||||
@@ -2335,11 +2350,12 @@ namespace DiscImageChef.DiscImages
|
||||
case AlcoholTrackMode.Mode1:
|
||||
case AlcoholTrackMode.Mode2F1:
|
||||
case AlcoholTrackMode.Mode2F1Alt: return 2048;
|
||||
case AlcoholTrackMode.Mode2F2: return 2324;
|
||||
case AlcoholTrackMode.Mode2: return 2336;
|
||||
case AlcoholTrackMode.Audio: return 2352;
|
||||
case AlcoholTrackMode.DVD: return 2048;
|
||||
default: return 0;
|
||||
case AlcoholTrackMode.Mode2F2:
|
||||
case AlcoholTrackMode.Mode2F2Alt: return 2324;
|
||||
case AlcoholTrackMode.Mode2: return 2336;
|
||||
case AlcoholTrackMode.Audio: return 2352;
|
||||
case AlcoholTrackMode.DVD: return 2048;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2350,10 +2366,11 @@ namespace DiscImageChef.DiscImages
|
||||
case AlcoholTrackMode.Mode1: return TrackType.CdMode1;
|
||||
case AlcoholTrackMode.Mode2F1:
|
||||
case AlcoholTrackMode.Mode2F1Alt: return TrackType.CdMode2Form1;
|
||||
case AlcoholTrackMode.Mode2F2: return TrackType.CdMode2Form2;
|
||||
case AlcoholTrackMode.Mode2: return TrackType.CdMode2Formless;
|
||||
case AlcoholTrackMode.Audio: return TrackType.Audio;
|
||||
default: return TrackType.Data;
|
||||
case AlcoholTrackMode.Mode2F2:
|
||||
case AlcoholTrackMode.Mode2F2Alt: return TrackType.CdMode2Form2;
|
||||
case AlcoholTrackMode.Mode2: return TrackType.CdMode2Formless;
|
||||
case AlcoholTrackMode.Audio: return TrackType.Audio;
|
||||
default: return TrackType.Data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2384,7 +2401,6 @@ namespace DiscImageChef.DiscImages
|
||||
case MediaType.CDROM:
|
||||
case MediaType.CDROMXA:
|
||||
case MediaType.CDV:
|
||||
case MediaType.DDCD:
|
||||
case MediaType.DTSCD:
|
||||
case MediaType.JaguarCD:
|
||||
case MediaType.MEGACD:
|
||||
@@ -2396,10 +2412,8 @@ namespace DiscImageChef.DiscImages
|
||||
case MediaType.ThreeDO:
|
||||
case MediaType.VCD:
|
||||
case MediaType.VCDHD: return AlcoholMediumType.CD;
|
||||
case MediaType.DDCDR:
|
||||
case MediaType.CDR: return AlcoholMediumType.CDR;
|
||||
case MediaType.CDRW:
|
||||
case MediaType.DDCDRW:
|
||||
case MediaType.CDMRW: return AlcoholMediumType.CDRW;
|
||||
case MediaType.DVDR:
|
||||
case MediaType.DVDRW:
|
||||
@@ -2425,11 +2439,9 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
}
|
||||
|
||||
static (byte hour, byte minute, byte second, byte frame) LbaToMsf(ulong sector)
|
||||
static (byte minute, byte second, byte frame) LbaToMsf(ulong sector)
|
||||
{
|
||||
return ((byte)((sector + 150) / 75 / 60 / 60), (byte)((sector + 150) / 75 / 60 % 60),
|
||||
(byte)((sector + 150) / 75 % 60),
|
||||
(byte)((sector + 150) % 75));
|
||||
return ((byte)((sector + 150) / 75 / 60), (byte)((sector + 150) / 75 % 60), (byte)((sector + 150) % 75));
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
@@ -2531,9 +2543,10 @@ namespace DiscImageChef.DiscImages
|
||||
Audio = 0xA9,
|
||||
Mode1 = 0xAA,
|
||||
Mode2 = 0xAB,
|
||||
Mode2F1 = 0xAC,
|
||||
Mode2F2 = 0xAD,
|
||||
Mode2F1Alt = 0xEC
|
||||
Mode2F1 = 0xEC,
|
||||
Mode2F2 = 0xED,
|
||||
Mode2F1Alt = 0xAC,
|
||||
Mode2F2Alt = 0xAD
|
||||
}
|
||||
|
||||
enum AlcoholSubchannelMode : byte
|
||||
|
||||
@@ -28,8 +28,10 @@ enum <byte> AlcoholTrackMode
|
||||
Audio = 0xA9,
|
||||
Mode1 = 0xAA,
|
||||
Mode2 = 0xAB,
|
||||
Mode2F1 = 0xAC,
|
||||
Mode2F2 = 0xAD,
|
||||
Mode2F1 = 0xEC,
|
||||
Mode2F2 = 0xED,
|
||||
Mode2F1Alt = 0xAC,
|
||||
Mode2F2Alt = 0xAD,
|
||||
};
|
||||
|
||||
enum <byte> AlcoholSubchannelMode
|
||||
|
||||
Reference in New Issue
Block a user