From 47a9b231e9e0572a7f6bfb7ed5715ffd231a8408 Mon Sep 17 00:00:00 2001 From: tomcw Date: Sat, 16 Sep 2023 12:01:50 +0100 Subject: [PATCH] Tweak Struct Extra --- source/Disk.cpp | 1 + source/Disk.h | 2 ++ source/DiskImage.cpp | 5 ++--- source/DiskImage.h | 2 +- source/DiskImageHelper.cpp | 10 +++++----- source/DiskImageHelper.h | 6 ++++-- 6 files changed, 15 insertions(+), 11 deletions(-) diff --git a/source/Disk.cpp b/source/Disk.cpp index 84ab0c7c..0fb3f3a4 100644 --- a/source/Disk.cpp +++ b/source/Disk.cpp @@ -344,6 +344,7 @@ void Disk2InterfaceCard::ReadTrack(const int drive, ULONG uExecutedCycles) pFloppy->m_trackimage, &pFloppy->m_nibbles, &pFloppy->m_bitCount, + &pFloppy->m_isFluxTrack, m_enhanceDisk); if (!ImageIsWOZ(pFloppy->m_imagehandle)) diff --git a/source/Disk.h b/source/Disk.h index bc08d218..aeebc54e 100644 --- a/source/Disk.h +++ b/source/Disk.h @@ -69,6 +69,7 @@ public: m_trackimage = NULL; m_trackimagedata = false; m_trackimagedirty = false; + m_isFluxTrack = false; m_longestSyncFFRunLength = 0; m_longestSyncFFBitOffsetStart = -1; m_initialBitOffset = 0; @@ -90,6 +91,7 @@ public: LPBYTE m_trackimage; bool m_trackimagedata; bool m_trackimagedirty; + bool m_isFluxTrack; UINT m_longestSyncFFRunLength; int m_longestSyncFFBitOffsetStart; UINT m_initialBitOffset; // debug diff --git a/source/DiskImage.cpp b/source/DiskImage.cpp index 9fa215a4..c58b82d7 100644 --- a/source/DiskImage.cpp +++ b/source/DiskImage.cpp @@ -117,6 +117,7 @@ void ImageReadTrack( ImageInfo* const pImageInfo, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, + bool* pIsFluxTrack, bool enhanceDisk) { _ASSERT(phase >= 0); @@ -127,9 +128,7 @@ void ImageReadTrack( ImageInfo* const pImageInfo, if (pImageInfo->pImageType->AllowRW()) { - Extra extra; - extra.enhanceDisk = enhanceDisk; - extra.isFluxTrack = false; + Extra extra(pIsFluxTrack, enhanceDisk); pImageInfo->pImageType->Read(pImageInfo, phase, pTrackImageBuffer, pNibbles, pBitCount, extra); } else diff --git a/source/DiskImage.h b/source/DiskImage.h index 44e3fc91..5f5a6b65 100644 --- a/source/DiskImage.h +++ b/source/DiskImage.h @@ -82,7 +82,7 @@ ImageError_e ImageOpen(const std::string & pszImageFilename, ImageInfo** ppImage void ImageClose(ImageInfo* const pImageInfo); BOOL ImageBoot(ImageInfo* const pImageInfo); -void ImageReadTrack(ImageInfo* const pImageInfo, float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, bool enhanceDisk); +void ImageReadTrack(ImageInfo* const pImageInfo, float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, bool* pIsFluxTrack, bool enhanceDisk); void ImageWriteTrack(ImageInfo* const pImageInfo, float phase, LPBYTE pTrackImageBuffer, int nNibbles); bool ImageReadBlock(ImageInfo* const pImageInfo, UINT nBlock, LPBYTE pBlockBuffer); bool ImageWriteBlock(ImageInfo* const pImageInfo, UINT nBlock, LPBYTE pBlockBuffer); diff --git a/source/DiskImageHelper.cpp b/source/DiskImageHelper.cpp index 04b80059..e984cf17 100644 --- a/source/DiskImageHelper.cpp +++ b/source/DiskImageHelper.cpp @@ -663,7 +663,7 @@ public: const UINT track = PhaseToTrack(phase); ReadTrack(pImageInfo, track, m_pWorkBuffer, TRACK_DENIBBLIZED_SIZE); *pNibbles = NibblizeTrack(pTrackImageBuffer, eDOSOrder, track); - if (!extra.enhanceDisk) + if (!extra.m_enhanceDisk) SkewTrack(track, *pNibbles, pTrackImageBuffer); } @@ -731,7 +731,7 @@ public: const UINT track = PhaseToTrack(phase); ReadTrack(pImageInfo, track, m_pWorkBuffer, TRACK_DENIBBLIZED_SIZE); *pNibbles = NibblizeTrack(pTrackImageBuffer, eProDOSOrder, track); - if (!extra.enhanceDisk) + if (!extra.m_enhanceDisk) SkewTrack(track, *pNibbles, pTrackImageBuffer); } @@ -1276,14 +1276,14 @@ public: { BYTE* pTrackMapFlux = ((CWOZHelper::Tmap*)pImageInfo->pWOZTrackMapFlux)->tmap; indexFromTMAP = pTrackMapFlux[(BYTE)(phase * 2)]; - extra.isFluxTrack = (indexFromTMAP != CWOZHelper::TMAP_TRACK_EMPTY); + *extra.m_pIsFluxTrack = (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; + *extra.m_pIsFluxTrack = 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 (extra.isFluxTrack) + if (*extra.m_pIsFluxTrack) { *pBitCount = 0; // NB. use as a "flag" to callee that this is flux data *pNibbles = pTRK->bitCount; // byte count of flux data diff --git a/source/DiskImageHelper.h b/source/DiskImageHelper.h index 5a059ebd..f41973e3 100644 --- a/source/DiskImageHelper.h +++ b/source/DiskImageHelper.h @@ -56,8 +56,10 @@ struct ImageInfo struct Extra { - bool enhanceDisk; - bool isFluxTrack; + Extra(bool* pIsFluxTrack, bool enhanceDisk) : m_pIsFluxTrack(pIsFluxTrack), m_enhanceDisk(enhanceDisk) { *m_pIsFluxTrack = false; } + + const bool m_enhanceDisk; // read-only + bool* m_pIsFluxTrack; }; class CImageBase