Read() pass 'Extra' struct with isFluxTrack
This commit is contained in:
parent
9686a6e3ae
commit
54ebde9fec
|
@ -127,7 +127,10 @@ void ImageReadTrack( ImageInfo* const pImageInfo,
|
|||
|
||||
if (pImageInfo->pImageType->AllowRW())
|
||||
{
|
||||
pImageInfo->pImageType->Read(pImageInfo, phase, pTrackImageBuffer, pNibbles, pBitCount, enhanceDisk);
|
||||
Extra extra;
|
||||
extra.enhanceDisk = enhanceDisk;
|
||||
extra.isFluxTrack = false;
|
||||
pImageInfo->pImageType->Read(pImageInfo, phase, pTrackImageBuffer, pNibbles, pBitCount, extra);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -658,12 +658,12 @@ public:
|
|||
return ePossibleMatch;
|
||||
}
|
||||
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, bool enhanceDisk)
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, Extra& extra)
|
||||
{
|
||||
const UINT track = PhaseToTrack(phase);
|
||||
ReadTrack(pImageInfo, track, m_pWorkBuffer, TRACK_DENIBBLIZED_SIZE);
|
||||
*pNibbles = NibblizeTrack(pTrackImageBuffer, eDOSOrder, track);
|
||||
if (!enhanceDisk)
|
||||
if (!extra.enhanceDisk)
|
||||
SkewTrack(track, *pNibbles, pTrackImageBuffer);
|
||||
}
|
||||
|
||||
|
@ -726,12 +726,12 @@ public:
|
|||
return ePossibleMatch;
|
||||
}
|
||||
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, bool enhanceDisk)
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, Extra& extra)
|
||||
{
|
||||
const UINT track = PhaseToTrack(phase);
|
||||
ReadTrack(pImageInfo, track, m_pWorkBuffer, TRACK_DENIBBLIZED_SIZE);
|
||||
*pNibbles = NibblizeTrack(pTrackImageBuffer, eProDOSOrder, track);
|
||||
if (!enhanceDisk)
|
||||
if (!extra.enhanceDisk)
|
||||
SkewTrack(track, *pNibbles, pTrackImageBuffer);
|
||||
}
|
||||
|
||||
|
@ -792,7 +792,7 @@ public:
|
|||
return eMatch;
|
||||
}
|
||||
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, bool enhanceDisk)
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, Extra& extra)
|
||||
{
|
||||
const UINT track = PhaseToTrack(phase);
|
||||
ReadTrack(pImageInfo, track, pTrackImageBuffer, NIB1_TRACK_SIZE);
|
||||
|
@ -834,7 +834,7 @@ public:
|
|||
return eMatch;
|
||||
}
|
||||
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, bool enhanceDisk)
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, Extra& extra)
|
||||
{
|
||||
const UINT track = PhaseToTrack(phase);
|
||||
ReadTrack(pImageInfo, track, pTrackImageBuffer, NIB2_TRACK_SIZE);
|
||||
|
@ -912,7 +912,7 @@ public:
|
|||
return eMatch;
|
||||
}
|
||||
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, bool enhanceDisk)
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, Extra& extra)
|
||||
{
|
||||
UINT track = PhaseToTrack(phase);
|
||||
|
||||
|
@ -1147,7 +1147,7 @@ public:
|
|||
return eMatch;
|
||||
}
|
||||
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, bool enhanceDisk)
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, Extra& extra)
|
||||
{
|
||||
BYTE* pTrackMap = ((CWOZHelper::Tmap*)pImageInfo->pWOZTrackMap)->tmap;
|
||||
|
||||
|
@ -1268,22 +1268,22 @@ public:
|
|||
return eMatch;
|
||||
}
|
||||
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, bool enhanceDisk)
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, Extra& extra)
|
||||
{
|
||||
BYTE indexFromTMAP = CWOZHelper::TMAP_TRACK_EMPTY;
|
||||
bool isFluxTrack = false;
|
||||
|
||||
if (pImageInfo->pWOZTrackMapFlux)
|
||||
{
|
||||
BYTE* pTrackMapFlux = ((CWOZHelper::Tmap*)pImageInfo->pWOZTrackMapFlux)->tmap;
|
||||
indexFromTMAP = pTrackMapFlux[(BYTE)(phase * 2)];
|
||||
isFluxTrack = (indexFromTMAP != CWOZHelper::TMAP_TRACK_EMPTY);
|
||||
extra.isFluxTrack = (indexFromTMAP != CWOZHelper::TMAP_TRACK_EMPTY);
|
||||
}
|
||||
|
||||
if (indexFromTMAP == CWOZHelper::TMAP_TRACK_EMPTY)
|
||||
{
|
||||
BYTE* pTrackMap = ((CWOZHelper::Tmap*)pImageInfo->pWOZTrackMap)->tmap;
|
||||
indexFromTMAP = pTrackMap[(BYTE)(phase * 2)];
|
||||
extra.isFluxTrack = false;
|
||||
}
|
||||
|
||||
if (indexFromTMAP == CWOZHelper::TMAP_TRACK_EMPTY)
|
||||
|
@ -1292,7 +1292,7 @@ public:
|
|||
CWOZHelper::TRKv2* pTRKS = (CWOZHelper::TRKv2*) &pImageInfo->pImageBuffer[pImageInfo->uOffset];
|
||||
CWOZHelper::TRKv2* pTRK = &pTRKS[indexFromTMAP];
|
||||
|
||||
if (isFluxTrack)
|
||||
if (extra.isFluxTrack)
|
||||
{
|
||||
*pBitCount = 0; // NB. use as a "flag" to callee that this is flux data
|
||||
*pNibbles = pTRK->bitCount; // byte count of flux data
|
||||
|
|
|
@ -54,6 +54,12 @@ struct ImageInfo
|
|||
|
||||
#define DEFAULT_VOLUME_NUMBER 254
|
||||
|
||||
struct Extra
|
||||
{
|
||||
bool enhanceDisk;
|
||||
bool isFluxTrack;
|
||||
};
|
||||
|
||||
class CImageBase
|
||||
{
|
||||
public:
|
||||
|
@ -62,7 +68,7 @@ public:
|
|||
|
||||
virtual bool Boot(ImageInfo* pImageInfo) { return false; }
|
||||
virtual eDetectResult Detect(const LPBYTE pImage, const DWORD dwImageSize, const TCHAR* pszExt) = 0;
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, bool enhanceDisk) { }
|
||||
virtual void Read(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, Extra& extra) { }
|
||||
virtual bool Read(ImageInfo* pImageInfo, UINT nBlock, LPBYTE pBlockBuffer) { return false; }
|
||||
virtual void Write(ImageInfo* pImageInfo, const float phase, LPBYTE pTrackImageBuffer, int nNibbles) { }
|
||||
virtual bool Write(ImageInfo* pImageInfo, UINT nBlock, LPBYTE pBlockBuffer) { return false; }
|
||||
|
@ -212,7 +218,12 @@ public:
|
|||
eDetectResult ProcessChunks(ImageInfo* pImageInfo, DWORD& dwOffset);
|
||||
bool IsWriteProtected(void) { return m_pInfo->v2.v1.writeProtected == 1; }
|
||||
BYTE GetOptimalBitTiming(void) { return (m_pInfo->v2.v1.version >= 2) ? m_pInfo->v2.optimalBitTiming : InfoChunkv2::optimalBitTiming5_25; }
|
||||
UINT GetMaxNibblesPerTrack(void) { return (m_pInfo->v2.v1.version >= 2) ? max(m_pInfo->largestFluxTrack,m_pInfo->v2.largestTrack)*CWOZHelper::BLOCK_SIZE : WOZ1_TRACK_SIZE; }
|
||||
UINT GetMaxNibblesPerTrack(void)
|
||||
{
|
||||
return (m_pInfo->v2.v1.version >= 3) ? max(m_pInfo->largestFluxTrack, m_pInfo->v2.largestTrack) * CWOZHelper::BLOCK_SIZE
|
||||
: (m_pInfo->v2.v1.version == 2) ? m_pInfo->v2.largestTrack * CWOZHelper::BLOCK_SIZE
|
||||
: WOZ1_TRACK_SIZE;
|
||||
}
|
||||
BYTE GetBootSectorFormat(void) { return (m_pInfo->v2.v1.version >= 2) ? m_pInfo->v2.bootSectorFormat : bootUnknown; }
|
||||
void InvalidateInfo(void) { m_pInfo = NULL; }
|
||||
BYTE* CreateEmptyDisk(DWORD& size);
|
||||
|
|
Loading…
Reference in New Issue