mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Add a skeleton for the AES Lanier disks.
This commit is contained in:
18
lib/aeslanier/aeslanier.h
Normal file
18
lib/aeslanier/aeslanier.h
Normal file
@@ -0,0 +1,18 @@
|
||||
#ifndef AESLANIER_H
|
||||
#define AESLANIER_H
|
||||
|
||||
class Sector;
|
||||
class Fluxmap;
|
||||
|
||||
class AesLanierDecoder : public AbstractDecoder
|
||||
{
|
||||
public:
|
||||
virtual ~AesLanierDecoder() {}
|
||||
|
||||
SectorVector decodeToSectors(
|
||||
const RawRecordVector& rawRecords, unsigned physicalTrack);
|
||||
nanoseconds_t guessClock(Fluxmap& fluxmap) const;
|
||||
int recordMatcher(uint64_t fifo) const;
|
||||
};
|
||||
|
||||
#endif
|
||||
40
lib/aeslanier/decoder.cc
Normal file
40
lib/aeslanier/decoder.cc
Normal file
@@ -0,0 +1,40 @@
|
||||
#include "globals.h"
|
||||
#include "decoders.h"
|
||||
#include "aeslanier.h"
|
||||
#include "crc.h"
|
||||
#include "fluxmap.h"
|
||||
#include "sector.h"
|
||||
#include "bytes.h"
|
||||
#include <string.h>
|
||||
|
||||
/* Aaaah, M2FM, the encoding which time forgot! Justly so. It's like MFM, but not.
|
||||
* Data bits are written in the middle of the cell. Clock bits are written at the
|
||||
* beginnign of
|
||||
SectorVector AesLanierDecoder::decodeToSectors(const RawRecordVector& rawRecords, unsigned)
|
||||
{
|
||||
std::vector<std::unique_ptr<Sector>> sectors;
|
||||
|
||||
for (auto& rawrecord : rawRecords)
|
||||
{
|
||||
const auto& rawdata = rawrecord->data;
|
||||
const auto& rawbytes = toBytes(rawdata);
|
||||
const auto& bytes = decodeFmMfm(rawdata);
|
||||
|
||||
}
|
||||
|
||||
return sectors;
|
||||
}
|
||||
|
||||
nanoseconds_t AesLanierDecoder::guessClock(Fluxmap& fluxmap) const
|
||||
{
|
||||
return fluxmap.guessClock() / 2;
|
||||
}
|
||||
|
||||
int AesLanierDecoder::recordMatcher(uint64_t fifo) const
|
||||
{
|
||||
uint64_t masked = fifo & 0xffffffffffffULL;
|
||||
// if (masked == AMIGA_SECTOR_RECORD)
|
||||
// return 64;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -15,10 +15,10 @@ std::vector<uint8_t> decodeFmMfm(const std::vector<bool> bits)
|
||||
*
|
||||
* So we just need to extract all the odd bits.
|
||||
*
|
||||
* MFM is slightly more complicated, where the first bit of each pair can
|
||||
* be either 0 or 1... but the second bit is always the data bit, and at
|
||||
* this point we simply don't care what the first bit is, so decoding MFM
|
||||
* uses just the same code!
|
||||
* MFM and M2FM are slightly more complicated, where the first bit of each
|
||||
* pair can be either 0 or 1... but the second bit is always the data bit,
|
||||
* and at this point we simply don't care what the first bit is, so
|
||||
* decoding MFM uses just the same code!
|
||||
*/
|
||||
|
||||
std::vector<uint8_t> bytes;
|
||||
|
||||
10
meson.build
10
meson.build
@@ -85,6 +85,15 @@ encoderlib = shared_library('encoderlib',
|
||||
link_with: [felib, fmtlib]
|
||||
)
|
||||
|
||||
aeslanierdecoderlib = shared_library('aeslanierdecoderlib',
|
||||
[
|
||||
'lib/aeslanier/decoder.cc',
|
||||
],
|
||||
include_directories: [feinc, fmtinc, decoderinc],
|
||||
link_with: [felib, fmtlib, decoderlib]
|
||||
)
|
||||
aeslanierinc = include_directories('lib/aeslanier')
|
||||
|
||||
amigadecoderlib = shared_library('amigadecoderlib',
|
||||
[
|
||||
'lib/amiga/decoder.cc',
|
||||
@@ -158,6 +167,7 @@ victor9kinc = include_directories('lib/victor9k')
|
||||
executable('fe-erase', ['src/fe-erase.cc'], include_directories: [feinc], link_with: [felib, writerlib])
|
||||
executable('fe-inspect', ['src/fe-inspect.cc'], include_directories: [feinc, fmtinc, decoderinc], link_with: [felib, readerlib, decoderlib, fmtlib])
|
||||
executable('fe-readadfs', ['src/fe-readadfs.cc'], include_directories: [feinc, fmtinc, decoderinc, ibminc], link_with: [felib, readerlib, decoderlib, ibmdecoderlib, fmtlib])
|
||||
executable('fe-readaeslanier', ['src/fe-readaeslanier.cc'], include_directories: [feinc, fmtinc, decoderinc, aeslanierinc], link_with: [felib, readerlib, decoderlib, aeslanierdecoderlib, fmtlib])
|
||||
executable('fe-readamiga', ['src/fe-readamiga.cc'], include_directories: [feinc, fmtinc, decoderinc, amigainc], link_with: [felib, readerlib, decoderlib, amigadecoderlib, fmtlib])
|
||||
executable('fe-readampro', ['src/fe-readampro.cc'], include_directories: [feinc, fmtinc, decoderinc, ibminc], link_with: [felib, readerlib, decoderlib, ibmdecoderlib, fmtlib])
|
||||
executable('fe-readapple2', ['src/fe-readapple2.cc'], include_directories: [feinc, fmtinc, decoderinc, apple2inc], link_with: [felib, readerlib, decoderlib, apple2decoderlib, fmtlib])
|
||||
|
||||
28
src/fe-readaeslanier.cc
Normal file
28
src/fe-readaeslanier.cc
Normal file
@@ -0,0 +1,28 @@
|
||||
#include "globals.h"
|
||||
#include "flags.h"
|
||||
#include "reader.h"
|
||||
#include "fluxmap.h"
|
||||
#include "decoders.h"
|
||||
#include "image.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "record.h"
|
||||
#include "aeslanier.h"
|
||||
#include <fmt/format.h>
|
||||
|
||||
static StringFlag outputFilename(
|
||||
{ "--output", "-o" },
|
||||
"The output image file to write to.",
|
||||
"aeslanier.img");
|
||||
|
||||
int main(int argc, const char* argv[])
|
||||
{
|
||||
setReaderDefaultSource(":t=0-79:s=0");
|
||||
setReaderRevolutions(2);
|
||||
Flag::parseFlags(argc, argv);
|
||||
|
||||
AesLanierDecoder decoder;
|
||||
readDiskCommand(decoder, outputFilename);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user