mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Port the Brother decoder to the new *new* architecture.
This commit is contained in:
@@ -169,6 +169,72 @@ nanoseconds_t AbstractDecoder::guessClockImpl(Track& track) const
|
||||
return track.fluxmap->guessClock();
|
||||
}
|
||||
|
||||
void AbstractSimplifiedDecoder::decodeToSectors(Track& track)
|
||||
{
|
||||
Sector sector;
|
||||
sector.physicalSide = track.physicalSide;
|
||||
sector.physicalTrack = track.physicalTrack;
|
||||
FluxmapReader fmr(*track.fluxmap);
|
||||
|
||||
_track = &track;
|
||||
_sector = §or;
|
||||
_fmr = &fmr;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
Fluxmap::Position recordStart = sector.position = fmr.tell();
|
||||
sector.clock = 0;
|
||||
sector.status = Sector::MISSING;
|
||||
sector.data.clear();
|
||||
sector.logicalSector = sector.logicalSide = sector.logicalTrack = 0;
|
||||
RecordType r = advanceToNextRecord();
|
||||
if (fmr.eof() || !sector.clock)
|
||||
return;
|
||||
if ((r == UNKNOWN_RECORD) || (r == DATA_RECORD))
|
||||
{
|
||||
fmr.readNextMatchingOpcode(F_OP_PULSE);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Read the sector record. */
|
||||
|
||||
recordStart = fmr.tell();
|
||||
decodeSectorRecord();
|
||||
pushRecord(recordStart, fmr.tell());
|
||||
if (sector.status == Sector::DATA_MISSING)
|
||||
{
|
||||
/* The data is in a separate record. */
|
||||
|
||||
r = advanceToNextRecord();
|
||||
if (r == DATA_RECORD)
|
||||
{
|
||||
recordStart = fmr.tell();
|
||||
decodeDataRecord();
|
||||
pushRecord(recordStart, fmr.tell());
|
||||
}
|
||||
}
|
||||
|
||||
if (sector.status != Sector::MISSING)
|
||||
track.sectors.push_back(sector);
|
||||
}
|
||||
}
|
||||
|
||||
void AbstractSimplifiedDecoder::pushRecord(const Fluxmap::Position& start, const Fluxmap::Position& end)
|
||||
{
|
||||
Fluxmap::Position here = _fmr->tell();
|
||||
|
||||
RawRecord record;
|
||||
record.physicalSide = _track->physicalSide;
|
||||
record.physicalTrack = _track->physicalTrack;
|
||||
record.clock = _sector->clock;
|
||||
record.position = start;
|
||||
|
||||
_fmr->seek(start);
|
||||
record.data = toBytes(_fmr->readRawBits(end, _sector->clock));
|
||||
_track->rawrecords.push_back(record);
|
||||
_fmr->seek(here);
|
||||
}
|
||||
|
||||
void AbstractStatefulDecoder::decodeToSectors(Track& track)
|
||||
{
|
||||
Sector sector;
|
||||
|
||||
Reference in New Issue
Block a user