mirror of
https://github.com/TomHarte/CLK.git
synced 2024-07-20 01:29:01 +00:00
51 lines
1.2 KiB
C++
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 */
|