mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Add support for Alcohol disc images created by CDRWin 10 and GameJack.
This commit is contained in:
@@ -47,8 +47,9 @@ namespace Aaru.DiscImages
|
||||
enum TrackMode : byte
|
||||
{
|
||||
NoData = 0x00, DVD = 0x02, Audio = 0xA9,
|
||||
Mode1 = 0xAA, Mode2 = 0xAB, Mode2F1 = 0xEC,
|
||||
Mode2F2 = 0xED, Mode2F1Alt = 0xAC, Mode2F2Alt = 0xAD
|
||||
AudioAlt = 0xE9, Mode1 = 0xAA, Mode1Alt = 0xEA,
|
||||
Mode2 = 0xAB, Mode2F1 = 0xEC, Mode2F2 = 0xED,
|
||||
Mode2F1Alt = 0xAC, Mode2F2Alt = 0xAD
|
||||
}
|
||||
|
||||
enum SubchannelMode : byte
|
||||
|
||||
@@ -42,12 +42,14 @@ namespace Aaru.DiscImages
|
||||
switch(trackMode)
|
||||
{
|
||||
case TrackMode.Mode1:
|
||||
case TrackMode.Mode1Alt:
|
||||
case TrackMode.Mode2F1:
|
||||
case TrackMode.Mode2F1Alt: return 2048;
|
||||
case TrackMode.Mode2F2:
|
||||
case TrackMode.Mode2F2Alt: return 2324;
|
||||
case TrackMode.Mode2: return 2336;
|
||||
case TrackMode.Audio: return 2352;
|
||||
case TrackMode.Audio:
|
||||
case TrackMode.AudioAlt: return 2352;
|
||||
case TrackMode.DVD: return 2048;
|
||||
default: return 0;
|
||||
}
|
||||
@@ -57,13 +59,15 @@ namespace Aaru.DiscImages
|
||||
{
|
||||
switch(trackType)
|
||||
{
|
||||
case TrackMode.Mode1: return TrackType.CdMode1;
|
||||
case TrackMode.Mode1:
|
||||
case TrackMode.Mode1Alt: return TrackType.CdMode1;
|
||||
case TrackMode.Mode2F1:
|
||||
case TrackMode.Mode2F1Alt: return TrackType.CdMode2Form1;
|
||||
case TrackMode.Mode2F2:
|
||||
case TrackMode.Mode2F2Alt: return TrackType.CdMode2Form2;
|
||||
case TrackMode.Mode2: return TrackType.CdMode2Formless;
|
||||
case TrackMode.Audio: return TrackType.Audio;
|
||||
case TrackMode.Audio:
|
||||
case TrackMode.AudioAlt: return TrackType.Audio;
|
||||
default: return TrackType.Data;
|
||||
}
|
||||
}
|
||||
@@ -147,6 +151,6 @@ namespace Aaru.DiscImages
|
||||
}
|
||||
|
||||
static (byte minute, byte second, byte frame) LbaToMsf(ulong sector) =>
|
||||
((byte)((sector + 150) / 75 / 60), (byte)(((sector + 150) / 75) % 60), (byte)((sector + 150) % 75));
|
||||
((byte)((sector + 150) / 75 / 60), (byte)((sector + 150) / 75 % 60), (byte)((sector + 150) % 75));
|
||||
}
|
||||
}
|
||||
@@ -317,15 +317,23 @@ namespace Aaru.DiscImages
|
||||
|
||||
stream.Read(filename, 0, filename.Length);
|
||||
|
||||
alcFile = _alcFooter.widechar == 1 ? Encoding.Unicode.GetString(filename)
|
||||
: Encoding.Default.GetString(filename);
|
||||
alcFile = _alcFooter.widechar == 1 ? StringHandlers.CToString(filename, Encoding.Unicode, true)
|
||||
: StringHandlers.CToString(filename, Encoding.Default);
|
||||
|
||||
AaruConsole.DebugWriteLine("Alcohol 120% plugin", "footer.filename = {0}", alcFile);
|
||||
}
|
||||
|
||||
if(_alcFooter.filenameOffset == 0 ||
|
||||
string.Compare(alcFile, "*.mdf", StringComparison.InvariantCultureIgnoreCase) == 0)
|
||||
if(_alcFooter.filenameOffset == 0)
|
||||
{
|
||||
if(Path.GetExtension(imageFilter.GetBasePath()).ToLowerInvariant() == ".mds")
|
||||
alcFile = Path.GetFileNameWithoutExtension(imageFilter.GetBasePath()) + ".mdf";
|
||||
else if(Path.GetExtension(imageFilter.GetBasePath()).ToLowerInvariant() == ".xmd")
|
||||
alcFile = Path.GetFileNameWithoutExtension(imageFilter.GetBasePath()) + ".xmf";
|
||||
}
|
||||
else if(string.Compare(alcFile, "*.mdf", StringComparison.InvariantCultureIgnoreCase) == 0)
|
||||
alcFile = Path.GetFileNameWithoutExtension(imageFilter.GetBasePath()) + ".mdf";
|
||||
else if(string.Compare(alcFile, "*.xmf", StringComparison.InvariantCultureIgnoreCase) == 0)
|
||||
alcFile = Path.GetFileNameWithoutExtension(imageFilter.GetBasePath()) + ".xmf";
|
||||
|
||||
if(_header.bcaLength > 0 &&
|
||||
_header.bcaOffset > 0 &&
|
||||
@@ -494,16 +502,20 @@ namespace Aaru.DiscImages
|
||||
foreach(Track alcoholTrack in _alcTracks.Values)
|
||||
{
|
||||
// First track is audio
|
||||
firstAudio |= alcoholTrack.point == 1 && alcoholTrack.mode == TrackMode.Audio;
|
||||
firstAudio |= alcoholTrack.point == 1 &&
|
||||
(alcoholTrack.mode == TrackMode.Audio || alcoholTrack.mode == TrackMode.AudioAlt);
|
||||
|
||||
// First track is data
|
||||
firstData |= alcoholTrack.point == 1 && alcoholTrack.mode != TrackMode.Audio;
|
||||
firstData |= alcoholTrack.point == 1 &&
|
||||
(alcoholTrack.mode != TrackMode.Audio || alcoholTrack.mode != TrackMode.AudioAlt);
|
||||
|
||||
// Any non first track is data
|
||||
data |= alcoholTrack.point != 1 && alcoholTrack.mode != TrackMode.Audio;
|
||||
data |= alcoholTrack.point != 1 &&
|
||||
(alcoholTrack.mode != TrackMode.Audio || alcoholTrack.mode != TrackMode.AudioAlt);
|
||||
|
||||
// Any non first track is audio
|
||||
audio |= alcoholTrack.point != 1 && alcoholTrack.mode == TrackMode.Audio;
|
||||
audio |= alcoholTrack.point != 1 &&
|
||||
(alcoholTrack.mode == TrackMode.Audio || alcoholTrack.mode == TrackMode.AudioAlt);
|
||||
|
||||
switch(alcoholTrack.mode)
|
||||
{
|
||||
@@ -565,6 +577,7 @@ namespace Aaru.DiscImages
|
||||
switch(trk.mode)
|
||||
{
|
||||
case TrackMode.Mode1:
|
||||
case TrackMode.Mode1Alt:
|
||||
case TrackMode.Mode2F1:
|
||||
case TrackMode.Mode2F1Alt:
|
||||
if(!_imageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSync))
|
||||
@@ -833,6 +846,7 @@ namespace Aaru.DiscImages
|
||||
switch(alcTrack.mode)
|
||||
{
|
||||
case TrackMode.Mode1:
|
||||
case TrackMode.Mode1Alt:
|
||||
{
|
||||
sectorOffset = 16;
|
||||
sectorSize = 2048;
|
||||
@@ -856,6 +870,7 @@ namespace Aaru.DiscImages
|
||||
}
|
||||
|
||||
case TrackMode.Audio:
|
||||
case TrackMode.AudioAlt:
|
||||
{
|
||||
sectorOffset = 0;
|
||||
sectorSize = 2352;
|
||||
@@ -984,6 +999,7 @@ namespace Aaru.DiscImages
|
||||
switch(alcTrack.mode)
|
||||
{
|
||||
case TrackMode.Mode1:
|
||||
case TrackMode.Mode1Alt:
|
||||
switch(tag)
|
||||
{
|
||||
case SectorTagType.CdSectorSync:
|
||||
@@ -1264,6 +1280,7 @@ namespace Aaru.DiscImages
|
||||
|
||||
break;
|
||||
case TrackMode.Audio:
|
||||
case TrackMode.AudioAlt:
|
||||
{
|
||||
switch(tag)
|
||||
{
|
||||
@@ -1383,12 +1400,14 @@ namespace Aaru.DiscImages
|
||||
switch(alcTrack.mode)
|
||||
{
|
||||
case TrackMode.Mode1:
|
||||
case TrackMode.Mode1Alt:
|
||||
case TrackMode.Mode2:
|
||||
case TrackMode.Mode2F1:
|
||||
case TrackMode.Mode2F1Alt:
|
||||
case TrackMode.Mode2F2:
|
||||
case TrackMode.Mode2F2Alt:
|
||||
case TrackMode.Audio:
|
||||
case TrackMode.AudioAlt:
|
||||
case TrackMode.DVD:
|
||||
{
|
||||
sectorOffset = 0;
|
||||
|
||||
Reference in New Issue
Block a user