diff --git a/BizHawk.Emulation.DiscSystem/CUE/CUE_Load.cs b/BizHawk.Emulation.DiscSystem/CUE/CUE_Load.cs index 7c2321fcd6..5e3b8cd8ab 100644 --- a/BizHawk.Emulation.DiscSystem/CUE/CUE_Load.cs +++ b/BizHawk.Emulation.DiscSystem/CUE/CUE_Load.cs @@ -257,20 +257,16 @@ namespace BizHawk.Emulation.DiscSystem } } - //if we're in a pregap, setup subQ and gap type depending on tracktype - EControlQ qFlags = (EControlQ)(int)cct.Flags; + //select the track type for the subQ + //it's obviously the same as the main track type usually, but during a pregap it can be different + TrackInfo qTrack = ti; int qRelMSF = relMSF; - bool audioGap = true; if (curr_index == 0) { //tweak relMSF due to ambiguity/contradiction in yellowbook docs if (!context.DiscMountPolicy.CUE_PregapContradictionModeA) qRelMSF++; - //normally the gap takes this track's type - if (cct.TrackType != CueFile.TrackType.Audio) audioGap = false; - - //now for something special. //[IEC10149] says there's two "intervals" of a pregap. //mednafen's pseudocode interpretation of this: //if this is a data track and the previous track was not data, the last 150 sectors of the pregap match this track and the earlier sectors (at least 75) math the previous track @@ -279,10 +275,7 @@ namespace BizHawk.Emulation.DiscSystem { if (relMSF < -150) { - qFlags = (EControlQ)(int)TrackInfos[t - 1].CompiledCueTrack.Flags; - audioGap = true; - //TODO - actually generate the entire sector like the track before, including audio vs data encoding - //that means, dont get qFlags here, but instead reference a track to pull flags +and other data+ from + qTrack = TrackInfos[t - 1]; } } } @@ -291,14 +284,14 @@ namespace BizHawk.Emulation.DiscSystem SS_Base ss = null; if (generateGap) { - //if we were supposed to generate a gap, replace it with a new sector synth and feed it zeros - ss = new SS_Gap(); - ss.TrackType = cct.TrackType; //TODO - old track type in some < -150 cases? + var ss_gap = new SS_Gap(); + ss_gap.TrackType = qTrack.CompiledCueTrack.TrackType; + ss = ss_gap; } else { int sectorSize = int.MaxValue; - switch (cct.TrackType) + switch (qTrack.CompiledCueTrack.TrackType) { case CueFile.TrackType.Audio: case CueFile.TrackType.CDI_2352: @@ -320,7 +313,6 @@ namespace BizHawk.Emulation.DiscSystem ss.Blob = curr_blobInfo.Blob; ss.BlobOffset = curr_blobOffset; - ss.TrackType = cct.TrackType; curr_blobOffset += sectorSize; curr_blobMSF++; } @@ -329,7 +321,7 @@ namespace BizHawk.Emulation.DiscSystem //setup subQ byte ADR = 1; //absent some kind of policy for how to set it, this is a safe assumption: - ss.sq.SetStatus(ADR, qFlags); + ss.sq.SetStatus(ADR, (EControlQ)(int)qTrack.CompiledCueTrack.Flags); ss.sq.q_tno = BCD2.FromDecimal(cct.Number); ss.sq.q_index = BCD2.FromDecimal(curr_index); ss.sq.AP_Timestamp = new Timestamp(OUT_Disc.Sectors.Count); @@ -369,7 +361,7 @@ namespace BizHawk.Emulation.DiscSystem for (int s = 0; s < specifiedPostgapLength; s++) { var se= new SectorEntry(null); - SS_Base ss = new SS_Gap(); + var ss = new SS_Gap(); ss.TrackType = cct.TrackType; //TODO - old track type in some < -150 cases? //-subq- diff --git a/BizHawk.Emulation.DiscSystem/CUE/CUE_Synths.cs b/BizHawk.Emulation.DiscSystem/CUE/CUE_Synths.cs index 730277b667..f0d6194901 100644 --- a/BizHawk.Emulation.DiscSystem/CUE/CUE_Synths.cs +++ b/BizHawk.Emulation.DiscSystem/CUE/CUE_Synths.cs @@ -18,10 +18,7 @@ namespace BizHawk.Emulation.DiscSystem public SubchannelQ sq; //subP data - public bool Pause; //not sure I like this anymore.. .. .. should be determined from track type, right? - - //required - public CueFile.TrackType TrackType; + public bool Pause; public abstract void Synth(SectorSynthJob job); @@ -144,7 +141,8 @@ namespace BizHawk.Emulation.DiscSystem class SS_Gap : SS_Base { - //public CueFile.TrackType TrackType; //shouldnt be in base class... + public CueFile.TrackType TrackType; + public override void Synth(SectorSynthJob job) { //this isn't fully analyzed/optimized