Port the AES Lanier decoder to the new new architecture.

This commit is contained in:
David Given
2019-04-30 20:50:55 +02:00
parent 184e7766f0
commit 8bbbd1c1e1
3 changed files with 26 additions and 23 deletions

View File

@@ -8,13 +8,13 @@
class Sector;
class Fluxmap;
class AesLanierDecoder : public AbstractStatefulDecoder
class AesLanierDecoder : public AbstractSimplifiedDecoder
{
public:
virtual ~AesLanierDecoder() {}
nanoseconds_t findSector(FluxmapReader& fmr, Track& track);
void decodeSingleSector(FluxmapReader& fmr, Track& track, Sector& sector);
RecordType advanceToNextRecord();
void decodeSectorRecord();
};
#endif

View File

@@ -24,24 +24,27 @@ static Bytes reverse_bits(const Bytes& input)
return output;
}
nanoseconds_t AesLanierDecoder::findSector(FluxmapReader& fmr, Track& track)
AbstractSimplifiedDecoder::RecordType AesLanierDecoder::advanceToNextRecord()
{
return fmr.seekToPattern(SECTOR_PATTERN);
_sector->clock = _fmr->seekToPattern(SECTOR_PATTERN);
if (_fmr->eof() || !_sector->clock)
return UNKNOWN_RECORD;
return SECTOR_RECORD;
}
void AesLanierDecoder::decodeSingleSector(FluxmapReader& fmr, Track& track, Sector& sector)
void AesLanierDecoder::decodeSectorRecord()
{
/* Skip ID mark. */
fmr.readRawBits(16, sector.clock);
readRawBits(16);
const auto& rawbits = fmr.readRawBits(AESLANIER_RECORD_SIZE*16, sector.clock);
const auto& rawbits = readRawBits(AESLANIER_RECORD_SIZE*16);
const auto& bytes = decodeFmMfm(rawbits).slice(0, AESLANIER_RECORD_SIZE);
const auto& reversed = reverse_bits(bytes);
sector.logicalTrack = reversed[1];
sector.logicalSide = 0;
sector.logicalSector = reversed[2];
_sector->logicalTrack = reversed[1];
_sector->logicalSide = 0;
_sector->logicalSector = reversed[2];
/* Check header 'checksum' (which seems far too simple to mean much). */
@@ -55,8 +58,8 @@ void AesLanierDecoder::decodeSingleSector(FluxmapReader& fmr, Track& track, Sect
/* Check data checksum, which also includes the header and is
* significantly better. */
sector.data = reversed.slice(1, AESLANIER_SECTOR_LENGTH);
_sector->data = reversed.slice(1, AESLANIER_SECTOR_LENGTH);
uint16_t wanted = reversed.reader().seek(0x101).read_le16();
uint16_t got = crc16ref(MODBUS_POLY_REF, sector.data);
sector.status = (wanted == got) ? Sector::OK : Sector::BAD_CHECKSUM;
uint16_t got = crc16ref(MODBUS_POLY_REF, _sector->data);
_sector->status = (wanted == got) ? Sector::OK : Sector::BAD_CHECKSUM;
}

View File

@@ -124,14 +124,14 @@ encoderlib = declare_dependency(
)
)
# aeslanierdecoderlib = declare_dependency(
# link_with:
# shared_library('aeslanierdecoderlib',
# [ 'lib/aeslanier/decoder.cc', ],
# dependencies: [fmtlib, felib, decoderlib]),
# include_directories:
# include_directories('lib/aeslanier')
# )
aeslanierdecoderlib = declare_dependency(
link_with:
shared_library('aeslanierdecoderlib',
[ 'lib/aeslanier/decoder.cc', ],
dependencies: [fmtlib, felib, decoderlib]),
include_directories:
include_directories('lib/aeslanier')
)
# amigadecoderlib = declare_dependency(
# link_with:
@@ -235,7 +235,7 @@ ibmdecoderlib = declare_dependency(
executable('fe-erase', ['src/fe-erase.cc'], dependencies: [felib, writerlib])
executable('fe-inspect', ['src/fe-inspect.cc'], dependencies: [fmtlib, felib, decoderlib, readerlib])
executable('fe-readadfs', ['src/fe-readadfs.cc'], dependencies: [fmtlib, felib, decoderlib, readerlib, ibmdecoderlib])
# executable('fe-readaeslanier', ['src/fe-readaeslanier.cc'], dependencies: [fmtlib, felib, decoderlib, readerlib, aeslanierdecoderlib])
executable('fe-readaeslanier', ['src/fe-readaeslanier.cc'], dependencies: [fmtlib, felib, decoderlib, readerlib, aeslanierdecoderlib])
# executable('fe-readamiga', ['src/fe-readamiga.cc'], dependencies: [fmtlib, felib, decoderlib, readerlib, amigadecoderlib])
# executable('fe-readampro', ['src/fe-readampro.cc'], dependencies: [fmtlib, felib, decoderlib, readerlib, ibmdecoderlib])
# executable('fe-readapple2', ['src/fe-readapple2.cc'], dependencies: [fmtlib, felib, decoderlib, readerlib, apple2decoderlib])