cue clarifications

This commit is contained in:
zeromus 2015-07-01 06:26:04 -05:00
parent 675853e7a3
commit 5713346580
3 changed files with 12 additions and 13 deletions

View File

@ -233,7 +233,7 @@ namespace BizHawk.Client.DiscoHawk
var dmj = new DiscMountJob { IN_DiscInterface = loadDiscInterface, IN_FromPath = infile }; var dmj = new DiscMountJob { IN_DiscInterface = loadDiscInterface, IN_FromPath = infile };
if (cmpif == DiscInterface.MednaDisc) if (cmpif == DiscInterface.MednaDisc)
{ {
dmj.IN_DiscMountPolicy.CUE_PauseContradictionModeA = false; dmj.IN_DiscMountPolicy.CUE_PregapContradictionModeA = false;
} }
dmj.Run(); dmj.Run();
var disc = dmj.OUT_Disc; var disc = dmj.OUT_Disc;

View File

@ -207,8 +207,8 @@ namespace BizHawk.Emulation.DiscSystem
int relMSF = -totalPregapLength; int relMSF = -totalPregapLength;
//read more at policies declaration //read more at policies declaration
if (!context.DiscMountPolicy.CUE_PauseContradictionModeA) //if (!context.DiscMountPolicy.CUE_PauseContradictionModeA)
relMSF += 1; // relMSF += 1;
//--------------------------------- //---------------------------------
@ -250,12 +250,6 @@ namespace BizHawk.Emulation.DiscSystem
//WE ARE NOW AT INDEX 1: generate the RawTOCEntry for this track //WE ARE NOW AT INDEX 1: generate the RawTOCEntry for this track
EmitRawTOCEntry(cct); EmitRawTOCEntry(cct);
} }
//in the weird mednafen mode, we need to adjust relMSF to be 0 since we pre-adjusted it once
if (!context.DiscMountPolicy.CUE_PauseContradictionModeA && relMSF == 1)
relMSF = 0;
else
if (relMSF != 0) throw new InvalidOperationException();
} }
else break; else break;
} }
@ -264,9 +258,15 @@ namespace BizHawk.Emulation.DiscSystem
//generate a sector: //generate a sector:
SS_Base ss = null; SS_Base ss = null;
EControlQ qFlags = (EControlQ)(int)cct.Flags; EControlQ qFlags = (EControlQ)(int)cct.Flags;
int qRelMSF = relMSF;
if (curr_index == 0) if (curr_index == 0)
{ {
//generating pregap: //generating pregap:
//tweak relMSF due to ambiguity/contradiction in yellowbook docs
if (!context.DiscMountPolicy.CUE_PregapContradictionModeA)
qRelMSF++;
bool audioGap = true; bool audioGap = true;
//normally the gap takes this track's type //normally the gap takes this track's type
@ -279,8 +279,7 @@ namespace BizHawk.Emulation.DiscSystem
//I agree, so let's do it that way //I agree, so let's do it that way
if (t != 1 && cct.TrackType != CueFile.TrackType.Audio && TrackInfos[t - 1].CompiledCueTrack.TrackType == CueFile.TrackType.Audio) if (t != 1 && cct.TrackType != CueFile.TrackType.Audio && TrackInfos[t - 1].CompiledCueTrack.TrackType == CueFile.TrackType.Audio)
{ {
//there may be an off by one error here depending on the CUE_PauseContradictionModeA setting.. not really sure. if (relMSF < -150)
if (relMSF <= -150)
{ {
qFlags = (EControlQ)(int)TrackInfos[t - 1].CompiledCueTrack.Flags; qFlags = (EControlQ)(int)TrackInfos[t - 1].CompiledCueTrack.Flags;
audioGap = true; audioGap = true;
@ -321,7 +320,7 @@ namespace BizHawk.Emulation.DiscSystem
ss.sq.q_tno = BCD2.FromDecimal(cct.Number); ss.sq.q_tno = BCD2.FromDecimal(cct.Number);
ss.sq.q_index = BCD2.FromDecimal(curr_index); ss.sq.q_index = BCD2.FromDecimal(curr_index);
ss.sq.AP_Timestamp = new Timestamp(OUT_Disc.Sectors.Count); ss.sq.AP_Timestamp = new Timestamp(OUT_Disc.Sectors.Count);
ss.sq.Timestamp = new Timestamp(relMSF); ss.sq.Timestamp = new Timestamp(qRelMSF);
//setup subP //setup subP
if (curr_index == 0) if (curr_index == 0)

View File

@ -25,7 +25,7 @@ namespace BizHawk.Emulation.DiscSystem
/// (Mednafen does it this way) /// (Mednafen does it this way)
/// Discs (including PSX) exist using A, or B, or possibly (reference please) neither. /// Discs (including PSX) exist using A, or B, or possibly (reference please) neither.
/// </summary> /// </summary>
public bool CUE_PauseContradictionModeA = true; public bool CUE_PregapContradictionModeA = true;
public void SetForPlaystation() public void SetForPlaystation()
{ {