From 8b3c366a0411af7cb061a2b8c02985dd7f24b37d Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Wed, 23 Mar 2022 17:27:22 +0100 Subject: flex, img: Remove mutable variables from the class --- src/lib/formats/flex_dsk.cpp | 13 +++++++------ src/lib/formats/flex_dsk.h | 3 --- src/lib/formats/img_dsk.cpp | 45 +++++++++++++++++++++++--------------------- src/lib/formats/img_dsk.h | 6 ++---- 4 files changed, 33 insertions(+), 34 deletions(-) diff --git a/src/lib/formats/flex_dsk.cpp b/src/lib/formats/flex_dsk.cpp index 4989a25e707..45ea85ee257 100644 --- a/src/lib/formats/flex_dsk.cpp +++ b/src/lib/formats/flex_dsk.cpp @@ -110,8 +110,8 @@ int flex_format::find_size(util::random_read &io, uint32_t form_factor, const st if (info.month < 1 || info.month > 12 || info.day < 1 || info.day > 31) return -1; - boot0_sector_id = 1; - boot1_sector_id = 2; + uint8_t boot0_sector_id = 1; + // uint8_t boot1_sector_id = 2; // This floppy format uses a strategy of looking for 6800 boot code to // set the numbering of the first two sectors. If this is shown to not @@ -122,12 +122,13 @@ int flex_format::find_size(util::random_read &io, uint32_t form_factor, const st // Found a 6800 stack load and branch, looks like a 6800 boot sector. boot0_sector_id = 0; + // boot1 is not actually used (yet?) // Look for a link to the next sector, normal usage. - if (boot1[0] != 0 || boot1[1] != 3) - { + // if (boot1[0] != 0 || boot1[1] != 3) + // { // If not then assume it is a boot sector. - boot1_sector_id = 1; - } + // boot1_sector_id = 1; + // } } for (int i=0; formats[i].form_factor; i++) { diff --git a/src/lib/formats/flex_dsk.h b/src/lib/formats/flex_dsk.h index 0048e4e088f..dbe53d26aae 100644 --- a/src/lib/formats/flex_dsk.h +++ b/src/lib/formats/flex_dsk.h @@ -48,9 +48,6 @@ private: static const format formats_head1[]; static const format formats_track0[]; static const format formats_head1_track0[]; - - uint8_t boot0_sector_id; - uint8_t boot1_sector_id; }; extern const floppy_format_type FLOPPY_FLEX_FORMAT; diff --git a/src/lib/formats/img_dsk.cpp b/src/lib/formats/img_dsk.cpp index 2b9feca0417..a8f2653da1c 100644 --- a/src/lib/formats/img_dsk.cpp +++ b/src/lib/formats/img_dsk.cpp @@ -75,7 +75,8 @@ bool img_format::load(util::random_read &io, uint32_t form_factor, const std::ve std::vector track_data; write_gap(track_data, 0 , PREIDX_GAP); - write_mmfm_byte(track_data , INDEX_AM , AM_CLOCK); + uint16_t crc = 0; + write_mmfm_byte(track_data , INDEX_AM , crc, AM_CLOCK); // Compute interleave factor and skew for current track unsigned il_factor; @@ -160,24 +161,24 @@ std::vector img_format::interleaved_sectors(unsigned il_factor) return out; } -void img_format::write_mmfm_bit(std::vector &buffer , bool data_bit , bool clock_bit) +void img_format::write_mmfm_bit(std::vector &buffer , bool data_bit , bool clock_bit , uint16_t &crc) { bool had_transition = buffer.size() < 2 ? false : bit_r(buffer, buffer.size() - 1) || bit_r(buffer , buffer.size() - 2); clock_bit = !data_bit && (clock_bit || !had_transition); bit_w(buffer , clock_bit , CELL_SIZE); bit_w(buffer , data_bit , CELL_SIZE); - if (util::BIT(m_crc , 15) ^ data_bit) { - m_crc = (m_crc << 1) ^ CRC_POLY; + if (util::BIT(crc , 15) ^ data_bit) { + crc = (crc << 1) ^ CRC_POLY; } else { - m_crc <<= 1; + crc <<= 1; } } -void img_format::write_mmfm_byte(std::vector &buffer , uint8_t data , uint8_t clock) +void img_format::write_mmfm_byte(std::vector &buffer , uint8_t data , uint16_t &crc , uint8_t clock) { for (int i = 7; i >= 0; i--) { - write_mmfm_bit(buffer , util::BIT(data , i) , util::BIT(clock , i)); + write_mmfm_bit(buffer , util::BIT(data , i) , util::BIT(clock , i) , crc); } } @@ -188,19 +189,21 @@ void img_format::write_sync(std::vector &buffer) void img_format::write_crc(std::vector &buffer , uint16_t crc) { + uint16_t xcrc = crc; // Note that CRC is stored with MSB (x^15) first for (unsigned i = 0; i < 16; i++) { - write_mmfm_bit(buffer , util::BIT(crc , 15 - i) , 0); + write_mmfm_bit(buffer , util::BIT(crc , 15 - i) , 0 , xcrc); } } void img_format::write_gap(std::vector &buffer , unsigned size_00 , unsigned size_ff) { + uint16_t crc = 0; for (unsigned i = 0; i < size_00; ++i) { - write_mmfm_byte(buffer, 0); + write_mmfm_byte(buffer, 0 , crc); } for (unsigned i = 0; i < size_ff; ++i) { - write_mmfm_byte(buffer, 0xff); + write_mmfm_byte(buffer, 0xff , crc); } } @@ -228,27 +231,27 @@ void img_format::write_sector(std::vector &buffer , uint8_t track_no , // Gap1 write_sync(buffer); // ID AM - m_crc = 0; - write_mmfm_byte(buffer , ID_AM , AM_CLOCK); + uint16_t crc = 0; + write_mmfm_byte(buffer , ID_AM , crc , AM_CLOCK); // Track # - write_mmfm_byte(buffer , track_no); - write_mmfm_byte(buffer , 0); + write_mmfm_byte(buffer , track_no , crc); + write_mmfm_byte(buffer , 0 , crc); // Sector # - write_mmfm_byte(buffer , sect_no); - write_mmfm_byte(buffer , 0); + write_mmfm_byte(buffer , sect_no , crc); + write_mmfm_byte(buffer , 0 , crc); // ID CRC - write_crc(buffer , m_crc); + write_crc(buffer , crc); // Gap 2 write_sync(buffer); // Data AM - m_crc = 0; - write_mmfm_byte(buffer , DATA_AM , AM_CLOCK); + crc = 0; + write_mmfm_byte(buffer , DATA_AM , crc, AM_CLOCK); for (unsigned i = 0; i < SECTOR_SIZE; i++) { // Data - write_mmfm_byte(buffer , sect_data[ i ]); + write_mmfm_byte(buffer , sect_data[ i ] , crc); } // Data CRC - write_crc(buffer , m_crc); + write_crc(buffer , crc); } void img_format::fill_with_gap4(std::vector &buffer) diff --git a/src/lib/formats/img_dsk.h b/src/lib/formats/img_dsk.h index bbd7a0fc03e..7d83da31a0f 100644 --- a/src/lib/formats/img_dsk.h +++ b/src/lib/formats/img_dsk.h @@ -36,11 +36,9 @@ public: virtual bool supports_save() const override; private: - uint16_t m_crc; - static std::vector interleaved_sectors(unsigned il_factor); - void write_mmfm_bit(std::vector &buffer , bool data_bit , bool clock_bit); - void write_mmfm_byte(std::vector &buffer , uint8_t data , uint8_t clock = 0); + void write_mmfm_bit(std::vector &buffer , bool data_bit , bool clock_bit , uint16_t &crc); + void write_mmfm_byte(std::vector &buffer , uint8_t data , uint16_t &crc , uint8_t clock = 0); void write_sync(std::vector &buffer); void write_crc(std::vector &buffer , uint16_t crc); void write_gap(std::vector &buffer , unsigned size_00 , unsigned size_ff); -- cgit v1.2.3