1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-07-20 01:29:01 +00:00
CLK/Storage/Disk/Encodings/MFM/Parser.hpp
2023-12-11 09:58:24 -05:00

51 lines
1.2 KiB
C++

//
// Parser.hpp
// Clock Signal
//
// Created by Thomas Harte on 24/09/2017.
// Copyright 2017 Thomas Harte. All rights reserved.
//
#ifndef Parser_hpp
#define Parser_hpp
#include "Constants.hpp"
#include "Sector.hpp"
#include "../../Track/Track.hpp"
#include "../../Drive.hpp"
namespace Storage::Encodings::MFM {
/*!
Provides a mechanism for collecting sectors from a disk.
*/
class Parser {
public:
Parser(Density density, const std::shared_ptr<Storage::Disk::Disk> &disk);
/*!
Seeks to the physical track at @c head and @c track. Searches on it for a sector
with logical address @c sector.
@returns a sector if one was found; @c nullptr otherwise.
*/
const Storage::Encodings::MFM::Sector *sector(int head, int track, uint8_t sector);
private:
std::shared_ptr<Storage::Disk::Disk> disk_;
Density density_ = Density::Double;
void install_track(const Storage::Disk::Track::Address &address);
// Maps from a track address, i.e. head and position, to a map from
// sector IDs to sectors.
std::map<
Storage::Disk::Track::Address,
std::map<int, Storage::Encodings::MFM::Sector>
> sectors_by_address_by_track_;
};
}
#endif /* Parser_hpp */