diff --git a/Storage/Disk/Encodings/MFM/SegmentParser.cpp b/Storage/Disk/Encodings/MFM/SegmentParser.cpp index ded9ecd4a..f9d5ca3eb 100644 --- a/Storage/Disk/Encodings/MFM/SegmentParser.cpp +++ b/Storage/Disk/Encodings/MFM/SegmentParser.cpp @@ -11,14 +11,17 @@ using namespace Storage::Encodings::MFM; -std::map Storage::Encodings::MFM::SectorsFromSegment(const Storage::Disk::PCMSegment &&segment) { - std::map result; +std::map Storage::Encodings::MFM::SectorsFromSegment(const Storage::Disk::PCMSegment &&segment, bool is_double_density) { + std::map result; Shifter shifter; + shifter.set_is_double_density(is_double_density); + shifter.set_should_obey_syncs(true); std::unique_ptr new_sector; bool is_reading = false; size_t position = 0; size_t size = 0; + size_t start_location = 0; for(unsigned int bit = 0; bit < segment.number_of_bits; ++bit) { shifter.add_input_bit(segment.bit(bit)); @@ -31,13 +34,16 @@ std::mapis_deleted = (shifter.get_token() == Shifter::Token::DeletedData); } break; @@ -53,13 +59,15 @@ std::mapsize); ++position; is_reading = false; + shifter.set_should_obey_syncs(true); break; default: new_sector->data.push_back(shifter.get_byte()); ++position; if(position == size + 4) { - result.insert(std::make_pair(new_sector->address, std::move(*new_sector))); + result.insert(std::make_pair(start_location, std::move(*new_sector))); is_reading = false; + shifter.set_should_obey_syncs(true); new_sector.reset(); } break; diff --git a/Storage/Disk/Encodings/MFM/SegmentParser.hpp b/Storage/Disk/Encodings/MFM/SegmentParser.hpp index 452b5dbab..77d29a556 100644 --- a/Storage/Disk/Encodings/MFM/SegmentParser.hpp +++ b/Storage/Disk/Encodings/MFM/SegmentParser.hpp @@ -17,7 +17,11 @@ namespace Storage { namespace Encodings { namespace MFM { -std::map SectorsFromSegment(const Disk::PCMSegment &&segment); +/*! + Scans @c segment for all included sectors, returning a set that maps from location within + the segment (counted in bits from the beginning) to sector. +*/ +std::map SectorsFromSegment(const Disk::PCMSegment &&segment, bool is_double_density); } }