Convert the MX decoder.

This commit is contained in:
David Given
2021-07-11 16:02:41 +02:00
parent e9d80423ae
commit 1bf41cbfd7
3 changed files with 67 additions and 67 deletions

View File

@@ -23,13 +23,20 @@ const int SECTOR_SIZE = 256;
*/
const FluxPattern ID_PATTERN(32, 0xaaaaffaf);
void MxDecoder::beginTrack()
class MxDecoder : public AbstractDecoder
{
public:
MxDecoder(const DecoderProto& config):
AbstractDecoder(config)
{}
void beginTrack()
{
_currentSector = -1;
_clock = 0;
}
AbstractDecoder::RecordType MxDecoder::advanceToNextRecord()
RecordType advanceToNextRecord()
{
if (_currentSector == -1)
{
@@ -56,7 +63,7 @@ AbstractDecoder::RecordType MxDecoder::advanceToNextRecord()
return SECTOR_RECORD;
}
void MxDecoder::decodeSectorRecord()
void decodeSectorRecord()
{
auto bits = readRawBits((SECTOR_SIZE+2)*16);
auto bytes = decodeFmMfm(bits).slice(0, SECTOR_SIZE+2).swab();
@@ -73,3 +80,16 @@ void MxDecoder::decodeSectorRecord()
_sector->data = bytes.slice(0, SECTOR_SIZE);
_sector->status = (gotChecksum == wantChecksum) ? Sector::OK : Sector::BAD_CHECKSUM;
}
private:
nanoseconds_t _clock;
int _currentSector;
int _logicalTrack;
};
std::unique_ptr<AbstractDecoder> createMxDecoder(const DecoderProto& config)
{
return std::unique_ptr<AbstractDecoder>(new MxDecoder(config));
}

View File

@@ -3,24 +3,6 @@
#include "decoders/decoders.h"
class MxDecoderProto;
class MxDecoder : public AbstractDecoder
{
public:
MxDecoder(const MxDecoderProto&) {}
virtual ~MxDecoder() {}
void beginTrack();
RecordType advanceToNextRecord();
void decodeSectorRecord();
private:
nanoseconds_t _clock;
int _currentSector;
int _logicalTrack;
};
extern std::unique_ptr<AbstractDecoder> createMxDecoder(const DecoderProto& config);
#endif

View File

@@ -43,6 +43,7 @@ std::unique_ptr<AbstractDecoder> AbstractDecoder::create(const DecoderProto& con
{ DecoderProto::kIbm, createIbmDecoder },
{ DecoderProto::kMacintosh, createMacintoshDecoder },
{ DecoderProto::kMicropolis, createMicropolisDecoder },
{ DecoderProto::kMx, createMxDecoder },
};
auto decoder = decoders.find(config.format_case());
@@ -57,9 +58,6 @@ std::unique_ptr<AbstractDecoder> AbstractDecoder::create(const DecoderProto& con
{
switch (config.format_case())
{
case DecoderProto::kMx:
return std::unique_ptr<AbstractDecoder>(new MxDecoder(config.mx()));
case DecoderProto::kTids990:
return std::unique_ptr<AbstractDecoder>(new Tids990Decoder(config.tids990()));