Mode2/2336 support (fixes #3387)

This commit is contained in:
CasualPokePlayer 2023-03-16 20:16:27 -07:00
parent 6c8d4c536a
commit 3c7fd55f70
3 changed files with 27 additions and 3 deletions

View File

@ -557,7 +557,7 @@ namespace BizHawk.Emulation.DiscSystem
SS_Base synth = track.ReadMode switch
{
0 => new SS_Mode1_2048(),
1 => throw new NotSupportedException("Mode2/2336"), // TODO
1 => new SS_Mode2_2336(),
2 => new SS_2352(),
3 => new SS_CDI_RawQ(),
4 => new SS_CDI_RawPQRSTUVW(),

View File

@ -337,8 +337,13 @@ namespace BizHawk.Emulation.DiscSystem.CUE
sectorSize = 2048;
break;
default:
case CueTrackType.CDI_2336:
case CueTrackType.Mode2_2336:
ss = new SS_Mode2_2336();
sectorSize = 2336;
break;
default:
throw new InvalidOperationException($"Not supported: {cct.TrackType}");
}

View File

@ -68,6 +68,24 @@ namespace BizHawk.Emulation.DiscSystem.CUE
}
}
/// <summary>
/// Represents a Mode2 2336-byte sector
/// </summary>
internal class SS_Mode2_2336 : SS_Base
{
public override void Synth(SectorSynthJob job)
{
//read the sector user data
Blob.Read(BlobOffset, job.DestBuffer2448, job.DestOffset + 16, 2336);
if ((job.Parts & ESectorSynthPart.Header16) != 0)
SynthUtils.SectorHeader(job.DestBuffer2448, job.DestOffset + 0, job.LBA, 2);
//if subcode is needed, synthesize it
SynthSubchannelAsNeed(job);
}
}
/// <summary>
/// Represents a 2352-byte sector of any sort
/// </summary>
@ -108,6 +126,8 @@ namespace BizHawk.Emulation.DiscSystem.CUE
mode = 1;
break;
case CueTrackType.CDI_2336:
case CueTrackType.Mode2_2336:
case CueTrackType.Mode2_2352:
mode = 2;
if (Policy.CUE_PregapMode2_As_XA_Form2)
@ -123,7 +143,6 @@ namespace BizHawk.Emulation.DiscSystem.CUE
Pause = true;
break;
case CueTrackType.Mode2_2336:
default:
throw new InvalidOperationException($"Not supported: {TrackType}");
}