mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Convert the MX decoder.
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
18
arch/mx/mx.h
18
arch/mx/mx.h
@@ -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
|
||||
|
||||
@@ -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()));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user