Add: AddTrackSeamJitter()

This commit is contained in:
tomcw 2022-09-17 15:31:32 +01:00
parent f4b231e5d1
commit ba29433282
2 changed files with 24 additions and 17 deletions

View File

@ -337,6 +337,7 @@ void Disk2InterfaceCard::ReadTrack(const int drive, ULONG uExecutedCycles)
if (pFloppy->m_bitOffset >= pFloppy->m_bitCount)
pFloppy->m_bitOffset = 0;
//LogOutput("T%05.2f: %04X->%04X, Len=%04X\n", pDrive->m_phasePrecise / 2, currentBitPosition, pFloppy->m_bitOffset, pFloppy->m_bitCount);
pFloppy->m_byte = pFloppy->m_bitOffset / 8;
pFloppy->m_bitMask = 1 << (7 - (pFloppy->m_bitOffset % 8));
@ -1248,6 +1249,26 @@ void Disk2InterfaceCard::AddJitter(int phase, FloppyDisk& floppy)
m_foundT00S00Pattern = false;
}
// GH#1125: For T$21 (track 33.0) or above, randomly skip 1 bit-cell at the start of the FF/2 track seam.
void Disk2InterfaceCard::AddTrackSeamJitter(float phasePrecise, FloppyDisk& floppy)
{
if (phasePrecise >= (33.0 * 2))
{
if (floppy.m_bitOffset == floppy.m_longestSyncFFBitOffsetStart)
{
if (rand() < RAND_THRESHOLD(5, 10))
{
LogOutput("Disk: T%05.2f jitter - slip 1 bitcell (revs=%d)\n", phasePrecise / 2, floppy.m_revs);
IncBitStream(floppy);
}
else
{
LogOutput("Disk: T%05.2f jitter - *** SKIP *** (revs=%d)\n", phasePrecise / 2, floppy.m_revs);
}
}
}
}
void __stdcall Disk2InterfaceCard::DataLatchReadWriteWOZ(WORD pc, WORD addr, BYTE bWrite, ULONG uExecutedCycles)
{
_ASSERT(m_seqFunc.function != dataShiftWrite);
@ -1353,23 +1374,8 @@ void Disk2InterfaceCard::DataLatchReadWOZ(WORD pc, WORD addr, UINT bitCellRemain
: (rand() < RAND_THRESHOLD(3, 10)) ? 1 : 0; // ~30% chance of a 1 bit (Ref: WOZ-2.0)
IncBitStream(floppy);
#if 1
if (floppy.m_revs && drive.m_phase >= (33 * 2))
{
if (floppy.m_bitOffset == floppy.m_longestSyncFFBitOffsetStart)
{
if (rand() < RAND_THRESHOLD(9, 10))
{
LogOutput("Disk: T%05.2f jitter - slip 1 bitcell (revs=%d) (rand)\n", drive.m_phasePrecise / 2, floppy.m_revs);
IncBitStream(floppy);
}
else
{
LogOutput("Disk: T%05.2f jitter - *** SKIP *** (revs=%d) (rand)\n", drive.m_phasePrecise / 2, floppy.m_revs);
}
}
}
#endif
AddTrackSeamJitter(drive.m_phasePrecise, floppy);
m_shiftReg <<= 1;
m_shiftReg |= outputBit;

View File

@ -221,6 +221,7 @@ private:
void PreJitterCheck(int phase, BYTE latch);
void AddJitter(int phase, FloppyDisk& floppy);
void AddTrackSeamJitter(float phasePrecise, FloppyDisk& floppy);
void SaveSnapshotFloppy(YamlSaveHelper& yamlSaveHelper, UINT unit);
void SaveSnapshotDriveUnit(YamlSaveHelper& yamlSaveHelper, UINT unit);