Port the Zilog MCZ to the new architecture.

This commit is contained in:
David Given
2019-04-30 21:38:12 +02:00
parent 9971dbd2c7
commit e8373b21b7
3 changed files with 29 additions and 25 deletions

View File

@@ -14,31 +14,35 @@
static const FluxPattern SECTOR_START_PATTERN(16, 0xaaab);
nanoseconds_t ZilogMczDecoder::findSector(FluxmapReader& fmr, Track& track)
AbstractSimplifiedDecoder::RecordType ZilogMczDecoder::advanceToNextRecord()
{
fmr.seekToIndexMark();
return fmr.seekToPattern(SECTOR_START_PATTERN);
const FluxMatcher* matcher = nullptr;
_fmr->seekToIndexMark();
_sector->clock = _fmr->seekToPattern(SECTOR_START_PATTERN, matcher);
if (matcher == &SECTOR_START_PATTERN)
return SECTOR_RECORD;
return UNKNOWN_RECORD;
}
void ZilogMczDecoder::decodeSingleSector(FluxmapReader& fmr, Track& track, Sector& sector)
void ZilogMczDecoder::decodeSectorRecord()
{
fmr.readRawBits(14, sector.clock);
readRawBits(14);
auto rawbits = fmr.readRawBits(140*16, sector.clock);
auto rawbits = readRawBits(140*16);
auto bytes = decodeFmMfm(rawbits).slice(0, 140);
ByteReader br(bytes);
sector.logicalSector = br.read_8() & 0x1f;
sector.logicalSide = 0;
sector.logicalTrack = br.read_8() & 0x7f;
if (sector.logicalSector > 31)
_sector->logicalSector = br.read_8() & 0x1f;
_sector->logicalSide = 0;
_sector->logicalTrack = br.read_8() & 0x7f;
if (_sector->logicalSector > 31)
return;
if (sector.logicalTrack > 80)
if (_sector->logicalTrack > 80)
return;
sector.data = br.read(132);
_sector->data = br.read(132);
uint16_t wantChecksum = br.read_be16();
uint16_t gotChecksum = crc16(MODBUS_POLY, 0x0000, bytes.slice(0, 134));
sector.status = (wantChecksum == gotChecksum) ? Sector::OK : Sector::BAD_CHECKSUM;
_sector->status = (wantChecksum == gotChecksum) ? Sector::OK : Sector::BAD_CHECKSUM;
}

View File

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

View File

@@ -214,14 +214,14 @@ macdecoderlib = declare_dependency(
include_directories('lib/macintosh')
)
# zilogmczdecoderlib = declare_dependency(
# link_with:
# shared_library('zilogmczdecoderlib',
# [ 'lib/zilogmcz/decoder.cc', ],
# dependencies: [fmtlib, felib, decoderlib]),
# include_directories:
# include_directories('lib/zilogmcz')
# )
zilogmczdecoderlib = declare_dependency(
link_with:
shared_library('zilogmczdecoderlib',
[ 'lib/zilogmcz/decoder.cc', ],
dependencies: [fmtlib, felib, decoderlib]),
include_directories:
include_directories('lib/zilogmcz')
)
# victor9kdecoderlib = declare_dependency(
# link_with:
@@ -246,7 +246,7 @@ executable('fe-readf85', ['src/fe-readf85.cc'], dependencies
executable('fe-readfb100', ['src/fe-readfb100.cc'], dependencies: [fmtlib, felib, decoderlib, readerlib, fb100decoderlib])
executable('fe-readibm', ['src/fe-readibm.cc'], dependencies: [fmtlib, felib, decoderlib, readerlib, ibmdecoderlib])
executable('fe-readmac', ['src/fe-readmac.cc'], dependencies: [fmtlib, felib, decoderlib, readerlib, macdecoderlib])
# executable('fe-readzilogmcz', ['src/fe-readzilogmcz.cc'], dependencies: [fmtlib, felib, decoderlib, readerlib, zilogmczdecoderlib])
executable('fe-readzilogmcz', ['src/fe-readzilogmcz.cc'], dependencies: [fmtlib, felib, decoderlib, readerlib, zilogmczdecoderlib])
# executable('fe-readvictor9k', ['src/fe-readvictor9k.cc'], dependencies: [fmtlib, felib, decoderlib, readerlib, victor9kdecoderlib])
executable('fe-rpm', ['src/fe-rpm.cc'], dependencies: [fmtlib, felib])
executable('fe-seek', ['src/fe-seek.cc'], dependencies: [fmtlib, felib])