From 8876aae2cc979ab82e785952ae39409c5c87166b Mon Sep 17 00:00:00 2001 From: David Given Date: Tue, 30 Apr 2024 23:09:30 +0200 Subject: [PATCH] Calculate gaps in bits, not bytes (more accurate). Pad the end of the track to avoid weirdness reading the last sector. --- arch/tartu/encoder.cc | 15 +++++++-------- arch/tartu/tartu.proto | 3 --- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/arch/tartu/encoder.cc b/arch/tartu/encoder.cc index fa1b1963..ba8b1c35 100644 --- a/arch/tartu/encoder.cc +++ b/arch/tartu/encoder.cc @@ -28,18 +28,19 @@ public: _bits.resize(bitsPerRevolution); _cursor = 0; - writeFillerRawBytesUs(_config.gap1_us()); + writeFillerRawBitsUs(_config.gap1_us()); bool first = true; for (const auto& sectorData : sectors) { if (!first) - writeFillerRawBytesUs(_config.gap4_us()); + writeFillerRawBitsUs(_config.gap4_us()); first = false; writeSector(sectorData); } if (_cursor > _bits.size()) error("track data overrun"); + writeFillerRawBitsUs(_config.target_rotational_period_ms() * 1000.0); std::unique_ptr fluxmap(new Fluxmap); fluxmap->appendBits(_bits, @@ -67,13 +68,11 @@ private: } } - void writeFillerRawBytesUs(double us) + void writeFillerRawBitsUs(double us) { - uint16_t byte = _config.gap_fill_byte(); - unsigned count = (us / _clockRateUs) / 16; - fmt::print("count={}\n", count); + unsigned count = (us / _clockRateUs) / 2; for (int i = 0; i < count; i++) - writeRawBits(byte, 16); + writeRawBits(0b10, 2); }; void writeSector(const std::shared_ptr& sectorData) @@ -90,7 +89,7 @@ private: writeBytes(bytes); } - writeFillerRawBytesUs(_config.gap3_us()); + writeFillerRawBitsUs(_config.gap3_us()); writeRawBits(_config.data_marker(), 64); { Bytes bytes; diff --git a/arch/tartu/tartu.proto b/arch/tartu/tartu.proto index 522202bf..dc906c02 100644 --- a/arch/tartu/tartu.proto +++ b/arch/tartu/tartu.proto @@ -24,7 +24,4 @@ message TartuEncoderProto { optional uint64 data_marker = 7 [ default = 0xaaaaaaaa44895545, (help) = "64-bit raw bit pattern of data record marker" ]; - optional uint32 gap_fill_byte = 8 - [ default = 0xaaaa, - (help) = "16-bit raw bit pattern of fill byte" ]; }