mirror of
https://github.com/TomHarte/CLK.git
synced 2024-10-30 10:24:48 +00:00
50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
//
|
|
// MSX.hpp
|
|
// Clock Signal
|
|
//
|
|
// Created by Thomas Harte on 26/12/2017.
|
|
// Copyright 2017 Thomas Harte. All rights reserved.
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#include "../Tape.hpp"
|
|
|
|
#include <memory>
|
|
#include <cstdint>
|
|
|
|
namespace Storage::Tape::MSX {
|
|
|
|
class Parser {
|
|
public:
|
|
struct FileSpeed {
|
|
uint8_t minimum_start_bit_duration; // i.e. LOWLIM
|
|
uint8_t low_high_disrimination_duration; // i.e. WINWID
|
|
};
|
|
|
|
/*!
|
|
Finds the next header from the tape, determining constants for the
|
|
speed of file expected ahead.
|
|
|
|
Attempts exactly to duplicate the MSX's TAPION function.
|
|
|
|
@param tape_player The tape player containing the tape to search.
|
|
@returns An instance of FileSpeed if a header is found before the end of the tape;
|
|
@c nullptr otherwise.
|
|
*/
|
|
static std::unique_ptr<FileSpeed> find_header(Storage::Tape::BinaryTapePlayer &tape_player);
|
|
|
|
/*!
|
|
Attempts to read the next byte from the cassette, with data encoded
|
|
at the rate as defined by @c speed.
|
|
|
|
Attempts exactly to duplicate the MSX's TAPIN function.
|
|
|
|
@returns A value in the range 0-255 if a byte is found before the end of the tape;
|
|
-1 otherwise.
|
|
*/
|
|
static int get_byte(const FileSpeed &speed, Storage::Tape::BinaryTapePlayer &tape_player);
|
|
};
|
|
|
|
}
|