mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Add the ability for decoders to specify their own clocks --- necessary for the
Victor 9k. We now have _much_ better decoding for this platform.
This commit is contained in:
@@ -47,9 +47,6 @@ static const std::string BLOCK_ELEMENTS[] =
|
||||
*/
|
||||
nanoseconds_t Fluxmap::guessClock() const
|
||||
{
|
||||
if (manualClockRate != 0.0)
|
||||
return manualClockRate * 1000.0;
|
||||
|
||||
uint32_t buckets[256] = {};
|
||||
size_t cursor = 0;
|
||||
FluxmapReader fr(*this);
|
||||
@@ -203,7 +200,14 @@ abort:
|
||||
return rawbits;
|
||||
}
|
||||
|
||||
nanoseconds_t AbstractDecoder::guessClock(Fluxmap& fluxmap) const
|
||||
nanoseconds_t AbstractDecoder::guessClock(Fluxmap& fluxmap, unsigned physicalTrack) const
|
||||
{
|
||||
if (manualClockRate != 0.0)
|
||||
return manualClockRate * 1000.0;
|
||||
return guessClockImpl(fluxmap, physicalTrack);
|
||||
}
|
||||
|
||||
nanoseconds_t AbstractDecoder::guessClockImpl(Fluxmap& fluxmap, unsigned) const
|
||||
{
|
||||
return fluxmap.guessClock();
|
||||
}
|
||||
|
||||
@@ -24,7 +24,8 @@ class AbstractDecoder
|
||||
public:
|
||||
virtual ~AbstractDecoder() {}
|
||||
|
||||
virtual nanoseconds_t guessClock(Fluxmap& fluxmap) const;
|
||||
nanoseconds_t guessClock(Fluxmap& fluxmap, unsigned physicalTrack) const;
|
||||
virtual nanoseconds_t guessClockImpl(Fluxmap& fluxmap, unsigned physicalTrack) const;
|
||||
|
||||
virtual void decodeToSectors(const RawBits& bitmap, unsigned physicalTrack,
|
||||
RawRecordVector& rawrecords, SectorVector& sectors) = 0;
|
||||
|
||||
@@ -146,7 +146,7 @@ void readDiskCommand(AbstractDecoder& decoder, const std::string& outputFilename
|
||||
{
|
||||
std::unique_ptr<Fluxmap> fluxmap = track->read();
|
||||
|
||||
nanoseconds_t clockPeriod = decoder.guessClock(*fluxmap);
|
||||
nanoseconds_t clockPeriod = decoder.guessClock(*fluxmap, track->track);
|
||||
if (clockPeriod == 0)
|
||||
{
|
||||
std::cout << " no clock detected; giving up" << std::endl;
|
||||
|
||||
@@ -119,3 +119,26 @@ int Victor9kDecoder::recordMatcher(uint64_t fifo) const
|
||||
return 9;
|
||||
return 0;
|
||||
}
|
||||
|
||||
nanoseconds_t Victor9kDecoder::guessClockImpl(Fluxmap& fluxmap, unsigned physicalTrack) const
|
||||
{
|
||||
const nanoseconds_t BASE_CLOCK = 2065;
|
||||
const double BASE_SPEED = 167.0;
|
||||
|
||||
if (physicalTrack < 4)
|
||||
return BASE_CLOCK * BASE_SPEED / 237.9;
|
||||
else if (physicalTrack < 16)
|
||||
return BASE_CLOCK * BASE_SPEED / 224.5;
|
||||
else if (physicalTrack < 27)
|
||||
return BASE_CLOCK * BASE_SPEED / 212.2;
|
||||
else if (physicalTrack < 38)
|
||||
return BASE_CLOCK * BASE_SPEED / 199.9;
|
||||
else if (physicalTrack < 49)
|
||||
return BASE_CLOCK * BASE_SPEED / 187.6;
|
||||
else if (physicalTrack < 60)
|
||||
return BASE_CLOCK * BASE_SPEED / 175.3;
|
||||
else if (physicalTrack < 71)
|
||||
return BASE_CLOCK * BASE_SPEED / 163.0;
|
||||
else
|
||||
return BASE_CLOCK * BASE_SPEED / 149.6;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@ public:
|
||||
SectorVector decodeToSectors(
|
||||
const RawRecordVector& rawRecords, unsigned physicalTrack);
|
||||
int recordMatcher(uint64_t fifo) const;
|
||||
|
||||
nanoseconds_t guessClockImpl(Fluxmap& fluxmap, unsigned physicalTrack) const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user