mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-24 11:11:02 -07:00
Compare commits
2 Commits
5b7f9d84f9
...
fixes
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4ab66afca0 | ||
|
|
0af57f3e97 |
@@ -32,8 +32,9 @@ public:
|
||||
|
||||
RecordType advanceToNextRecord()
|
||||
{
|
||||
_sector->clock = _fmr->seekToPattern(SECTOR_PATTERN);
|
||||
if (_fmr->eof() || !_sector->clock)
|
||||
_sector->bitcell = _fmr->seekToPattern(SECTOR_PATTERN);
|
||||
_sector->clock = _sector->bitcell * 2;
|
||||
if (_fmr->eof() || !_sector->bitcell)
|
||||
return UNKNOWN_RECORD;
|
||||
return SECTOR_RECORD;
|
||||
}
|
||||
|
||||
@@ -31,8 +31,9 @@ public:
|
||||
|
||||
RecordType advanceToNextRecord() override
|
||||
{
|
||||
_sector->clock = _fmr->seekToPattern(SECTOR_PATTERN);
|
||||
if (_fmr->eof() || !_sector->clock)
|
||||
_sector->bitcell = _fmr->seekToPattern(SECTOR_PATTERN);
|
||||
_sector->clock = _sector->bitcell * 2;
|
||||
if (_fmr->eof() || !_sector->bitcell)
|
||||
return UNKNOWN_RECORD;
|
||||
return SECTOR_RECORD;
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ public:
|
||||
RecordType advanceToNextRecord()
|
||||
{
|
||||
const FluxMatcher* matcher = nullptr;
|
||||
_sector->clock = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
_sector->clock = _sector->bitcell = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
if (matcher == &SECTOR_RECORD_PATTERN)
|
||||
return RecordType::SECTOR_RECORD;
|
||||
if (matcher == &DATA_RECORD_PATTERN)
|
||||
|
||||
@@ -63,7 +63,7 @@ public:
|
||||
RecordType advanceToNextRecord()
|
||||
{
|
||||
const FluxMatcher* matcher = nullptr;
|
||||
_sector->clock = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
_sector->clock = _sector->bitcell = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
if (matcher == &SECTOR_RECORD_PATTERN)
|
||||
return RecordType::SECTOR_RECORD;
|
||||
if (matcher == &DATA_RECORD_PATTERN)
|
||||
|
||||
@@ -61,7 +61,7 @@ public:
|
||||
RecordType advanceToNextRecord()
|
||||
{
|
||||
const FluxMatcher* matcher = nullptr;
|
||||
_sector->clock = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
_sector->clock = _sector->bitcell = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
if (matcher == &SECTOR_RECORD_PATTERN)
|
||||
return RecordType::SECTOR_RECORD;
|
||||
if (matcher == &DATA_RECORD_PATTERN)
|
||||
|
||||
@@ -61,7 +61,7 @@ public:
|
||||
RecordType advanceToNextRecord()
|
||||
{
|
||||
const FluxMatcher* matcher = nullptr;
|
||||
_sector->clock = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
_sector->clock = _sector->bitcell = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
if (matcher == &SECTOR_RECORD_PATTERN)
|
||||
return RecordType::SECTOR_RECORD;
|
||||
if (matcher == &DATA_RECORD_PATTERN)
|
||||
|
||||
@@ -107,7 +107,8 @@ public:
|
||||
RecordType advanceToNextRecord()
|
||||
{
|
||||
const FluxMatcher* matcher = nullptr;
|
||||
_sector->clock = _fmr->seekToPattern(SECTOR_ID_PATTERN, matcher);
|
||||
_sector->bitcell = _fmr->seekToPattern(SECTOR_ID_PATTERN, matcher);
|
||||
_sector->clock = _sector->bitcell * 2;
|
||||
if (matcher == &SECTOR_ID_PATTERN)
|
||||
return RecordType::SECTOR_RECORD;
|
||||
return RecordType::UNKNOWN_RECORD;
|
||||
|
||||
@@ -101,7 +101,8 @@ public:
|
||||
RecordType advanceToNextRecord() override
|
||||
{
|
||||
const FluxMatcher* matcher = nullptr;
|
||||
_sector->clock = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
_sector->bitcell = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
_sector->clock = _sector->bitcell * 2;
|
||||
|
||||
/* If this is the MFM prefix byte, the the decoder is going to expect three
|
||||
* extra bytes on the front of the header. */
|
||||
|
||||
@@ -132,7 +132,7 @@ public:
|
||||
RecordType advanceToNextRecord()
|
||||
{
|
||||
const FluxMatcher* matcher = nullptr;
|
||||
_sector->clock = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
_sector->clock = _sector->bitcell = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
if (matcher == &SECTOR_RECORD_PATTERN)
|
||||
return SECTOR_RECORD;
|
||||
if (matcher == &DATA_RECORD_PATTERN)
|
||||
|
||||
@@ -35,7 +35,8 @@ public:
|
||||
{
|
||||
_fmr->seekToIndexMark();
|
||||
const FluxMatcher* matcher = nullptr;
|
||||
_sector->clock = _fmr->seekToPattern(SECTOR_SYNC_PATTERN, matcher);
|
||||
_sector->bitcell = _fmr->seekToPattern(SECTOR_SYNC_PATTERN, matcher);
|
||||
_sector->clock = _sector->bitcell * 2;
|
||||
if (matcher == &SECTOR_SYNC_PATTERN) {
|
||||
return SECTOR_RECORD;
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ public:
|
||||
void beginTrack()
|
||||
{
|
||||
_currentSector = -1;
|
||||
_clock = 0;
|
||||
_bitcell = 0;
|
||||
}
|
||||
|
||||
RecordType advanceToNextRecord()
|
||||
@@ -40,8 +40,9 @@ public:
|
||||
{
|
||||
/* First sector in the track: look for the sync marker. */
|
||||
const FluxMatcher* matcher = nullptr;
|
||||
_sector->clock = _clock = _fmr->seekToPattern(ID_PATTERN, matcher);
|
||||
readRawBits(32); /* skip the ID mark */
|
||||
_sector->bitcell = _bitcell = _fmr->seekToPattern(ID_PATTERN, matcher);
|
||||
_sector->clock = _sector->bitcell * 2;
|
||||
readRawBits(32); /* skip the ID mark */
|
||||
_logicalTrack = decodeFmMfm(readRawBits(32)).slice(0, 32).reader().read_be16();
|
||||
}
|
||||
else if (_currentSector == 10)
|
||||
@@ -54,7 +55,7 @@ public:
|
||||
/* Otherwise we assume the clock from the first sector is still valid.
|
||||
* The decoder framwork will automatically stop when we hit the end of
|
||||
* the track. */
|
||||
_sector->clock = _clock;
|
||||
_sector->bitcell = _bitcell;
|
||||
}
|
||||
|
||||
_currentSector++;
|
||||
@@ -80,7 +81,7 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
nanoseconds_t _clock;
|
||||
nanoseconds_t _bitcell;
|
||||
int _currentSector;
|
||||
int _logicalTrack;
|
||||
};
|
||||
|
||||
@@ -105,7 +105,8 @@ public:
|
||||
* past one or more sector pulses. For this reason, calculate
|
||||
* _hardSectorId after the sector header is found.
|
||||
*/
|
||||
_sector->clock = _fmr->seekToPattern(ANY_SECTOR_PATTERN, matcher);
|
||||
_sector->bitcell = _fmr->seekToPattern(ANY_SECTOR_PATTERN, matcher);
|
||||
_sector->clock = _sector->bitcell * 2;
|
||||
|
||||
int sectorFoundTimeRaw = std::round((_fmr->tell().ns()) / 1e6);
|
||||
int sectorFoundTime;
|
||||
|
||||
@@ -48,7 +48,8 @@ public:
|
||||
RecordType advanceToNextRecord()
|
||||
{
|
||||
const FluxMatcher* matcher = nullptr;
|
||||
_sector->clock = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
_sector->bitcell = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
_sector->clock = _sector->bitcell * 2;
|
||||
if (matcher == &SECTOR_RECORD_PATTERN)
|
||||
return RecordType::SECTOR_RECORD;
|
||||
if (matcher == &DATA_RECORD_PATTERN)
|
||||
|
||||
@@ -62,7 +62,7 @@ public:
|
||||
RecordType advanceToNextRecord()
|
||||
{
|
||||
const FluxMatcher* matcher = nullptr;
|
||||
_sector->clock = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
_sector->clock = _sector->bitcell = _fmr->seekToPattern(ANY_RECORD_PATTERN, matcher);
|
||||
if (matcher == &SECTOR_RECORD_PATTERN)
|
||||
return SECTOR_RECORD;
|
||||
if (matcher == &DATA_RECORD_PATTERN)
|
||||
|
||||
@@ -24,7 +24,8 @@ public:
|
||||
{
|
||||
const FluxMatcher* matcher = nullptr;
|
||||
_fmr->seekToIndexMark();
|
||||
_sector->clock = _fmr->seekToPattern(SECTOR_START_PATTERN, matcher);
|
||||
_sector->bitcell = _fmr->seekToPattern(SECTOR_START_PATTERN, matcher);
|
||||
_sector->clock = _sector->bitcell * 2;
|
||||
if (matcher == &SECTOR_START_PATTERN)
|
||||
return SECTOR_RECORD;
|
||||
return UNKNOWN_RECORD;
|
||||
|
||||
@@ -77,9 +77,9 @@ std::unique_ptr<TrackDataFlux> AbstractDecoder::decodeToSectors(
|
||||
_sector->physicalHead = physicalHead;
|
||||
|
||||
Fluxmap::Position recordStart = fmr.tell();
|
||||
_decoder.reset(new FluxDecoder(&fmr, _sector->clock, _config));
|
||||
_decoder.reset(new FluxDecoder(&fmr, _sector->bitcell, _config));
|
||||
RecordType r = advanceToNextRecord();
|
||||
if (fmr.eof() || !_sector->clock)
|
||||
if (fmr.eof() || !_sector->bitcell)
|
||||
return std::move(_trackdata);
|
||||
if ((r == UNKNOWN_RECORD) || (r == DATA_RECORD))
|
||||
{
|
||||
@@ -134,17 +134,17 @@ void AbstractDecoder::pushRecord(const Fluxmap::Position& start, const Fluxmap::
|
||||
|
||||
record->startTime = start.ns();
|
||||
record->endTime = end.ns();
|
||||
record->clock = _sector->clock;
|
||||
record->bitcell = _sector->bitcell;
|
||||
|
||||
_fmr->seek(start);
|
||||
FluxDecoder decoder(_fmr, _sector->clock, _config);
|
||||
FluxDecoder decoder(_fmr, _sector->bitcell, _config);
|
||||
record->rawData = toBytes(decoder.readBits(end));
|
||||
_fmr->seek(here);
|
||||
}
|
||||
|
||||
void AbstractDecoder::resetFluxDecoder()
|
||||
{
|
||||
_decoder.reset(new FluxDecoder(_fmr, _sector->clock, _config));
|
||||
_decoder.reset(new FluxDecoder(_fmr, _sector->bitcell, _config));
|
||||
}
|
||||
|
||||
std::vector<bool> AbstractDecoder::readRawBits(unsigned count)
|
||||
|
||||
@@ -6,7 +6,7 @@ class Image;
|
||||
|
||||
struct Record
|
||||
{
|
||||
nanoseconds_t clock = 0;
|
||||
nanoseconds_t bitcell = 0;
|
||||
nanoseconds_t startTime = 0;
|
||||
nanoseconds_t endTime = 0;
|
||||
Bytes rawData;
|
||||
|
||||
@@ -156,9 +156,9 @@ void readDiskCommand(FluxSource& fluxsource, AbstractDecoder& decoder, ImageWrit
|
||||
std::cout << "\nRaw (undecoded) records follow:\n\n";
|
||||
for (const auto& record : track_records)
|
||||
{
|
||||
std::cout << fmt::format("I+{:.2f}us with {:.2f}us clock\n",
|
||||
std::cout << fmt::format("I+{:.2f}us with {:.2f}us bitcell\n",
|
||||
record->startTime / 1000.0,
|
||||
record->clock / 1000.0);
|
||||
record->bitcell / 1000.0);
|
||||
hexdump(std::cout, record->rawData);
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ public:
|
||||
Status status = Status::INTERNAL_ERROR;
|
||||
Fluxmap::Position position;
|
||||
nanoseconds_t clock = 0;
|
||||
nanoseconds_t bitcell = 0;
|
||||
nanoseconds_t headerStartTime = 0;
|
||||
nanoseconds_t headerEndTime = 0;
|
||||
nanoseconds_t dataStartTime = 0;
|
||||
|
||||
Reference in New Issue
Block a user