mirror of
https://github.com/TomHarte/CLK.git
synced 2025-01-31 18:31:12 +00:00
Allows fuzzy masks to be fed into the FM and MFM encoders.
This commit is contained in:
parent
c2bd5be51a
commit
b0326530d6
@ -24,10 +24,10 @@ enum class SurfaceItem {
|
||||
|
||||
class MFMEncoder: public Encoder {
|
||||
public:
|
||||
MFMEncoder(std::vector<bool> &target) : Encoder(target) {}
|
||||
MFMEncoder(std::vector<bool> &target, std::vector<bool> *fuzzy_target = nullptr) : Encoder(target, fuzzy_target) {}
|
||||
virtual ~MFMEncoder() {}
|
||||
|
||||
void add_byte(uint8_t input) final {
|
||||
void add_byte(uint8_t input, uint8_t fuzzy_mask = 0) final {
|
||||
crc_generator_.add(input);
|
||||
uint16_t spread_value =
|
||||
static_cast<uint16_t>(
|
||||
@ -90,9 +90,9 @@ class MFMEncoder: public Encoder {
|
||||
class FMEncoder: public Encoder {
|
||||
// encodes each 16-bit part as clock, data, clock, data [...]
|
||||
public:
|
||||
FMEncoder(std::vector<bool> &target) : Encoder(target) {}
|
||||
FMEncoder(std::vector<bool> &target, std::vector<bool> *fuzzy_target = nullptr) : Encoder(target, fuzzy_target) {}
|
||||
|
||||
void add_byte(uint8_t input) final {
|
||||
void add_byte(uint8_t input, uint8_t fuzzy_mask = 0) final {
|
||||
crc_generator_.add(input);
|
||||
output_short(
|
||||
static_cast<uint16_t>(
|
||||
@ -240,11 +240,12 @@ template<class T> std::shared_ptr<Storage::Disk::Track>
|
||||
return std::make_shared<Storage::Disk::PCMTrack>(std::move(segment));
|
||||
}
|
||||
|
||||
Encoder::Encoder(std::vector<bool> &target) :
|
||||
target_(&target) {}
|
||||
Encoder::Encoder(std::vector<bool> &target, std::vector<bool> *fuzzy_target) :
|
||||
target_(&target), fuzzy_target_(fuzzy_target) {}
|
||||
|
||||
void Encoder::reset_target(std::vector<bool> &target) {
|
||||
void Encoder::reset_target(std::vector<bool> &target, std::vector<bool> *fuzzy_target) {
|
||||
target_ = ⌖
|
||||
fuzzy_target_ = fuzzy_target;
|
||||
}
|
||||
|
||||
void Encoder::output_short(uint16_t value) {
|
||||
@ -315,10 +316,10 @@ std::shared_ptr<Storage::Disk::Track> Storage::Encodings::MFM::GetMFMTrackWithSe
|
||||
12500); // unintelligently: double the single-density bytes/rotation (or: 500kbps @ 300 rpm)
|
||||
}
|
||||
|
||||
std::unique_ptr<Encoder> Storage::Encodings::MFM::GetMFMEncoder(std::vector<bool> &target) {
|
||||
return std::make_unique<MFMEncoder>(target);
|
||||
std::unique_ptr<Encoder> Storage::Encodings::MFM::GetMFMEncoder(std::vector<bool> &target, std::vector<bool> *fuzzy_target) {
|
||||
return std::make_unique<MFMEncoder>(target, fuzzy_target);
|
||||
}
|
||||
|
||||
std::unique_ptr<Encoder> Storage::Encodings::MFM::GetFMEncoder(std::vector<bool> &target) {
|
||||
return std::make_unique<FMEncoder>(target);
|
||||
std::unique_ptr<Encoder> Storage::Encodings::MFM::GetFMEncoder(std::vector<bool> &target, std::vector<bool> *fuzzy_target) {
|
||||
return std::make_unique<FMEncoder>(target, fuzzy_target);
|
||||
}
|
||||
|
@ -44,11 +44,11 @@ std::shared_ptr<Storage::Disk::Track> GetFMTrackWithSectors(const std::vector<co
|
||||
|
||||
class Encoder {
|
||||
public:
|
||||
Encoder(std::vector<bool> &target);
|
||||
Encoder(std::vector<bool> &target, std::vector<bool> *fuzzy_target);
|
||||
virtual ~Encoder() {}
|
||||
virtual void reset_target(std::vector<bool> &target);
|
||||
virtual void reset_target(std::vector<bool> &target, std::vector<bool> *fuzzy_target = nullptr);
|
||||
|
||||
virtual void add_byte(uint8_t input) = 0;
|
||||
virtual void add_byte(uint8_t input, uint8_t fuzzy_mask = 0) = 0;
|
||||
virtual void add_index_address_mark() = 0;
|
||||
virtual void add_ID_address_mark() = 0;
|
||||
virtual void add_data_address_mark() = 0;
|
||||
@ -63,10 +63,11 @@ class Encoder {
|
||||
|
||||
private:
|
||||
std::vector<bool> *target_ = nullptr;
|
||||
std::vector<bool> *fuzzy_target_ = nullptr;
|
||||
};
|
||||
|
||||
std::unique_ptr<Encoder> GetMFMEncoder(std::vector<bool> &target);
|
||||
std::unique_ptr<Encoder> GetFMEncoder(std::vector<bool> &target);
|
||||
std::unique_ptr<Encoder> GetMFMEncoder(std::vector<bool> &target, std::vector<bool> *fuzzy_target = nullptr);
|
||||
std::unique_ptr<Encoder> GetFMEncoder(std::vector<bool> &target, std::vector<bool> *fuzzy_target = nullptr);
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user