// // ZX8081.hpp // Clock Signal // // Created by Thomas Harte on 04/06/2017. // Copyright 2017 Thomas Harte. All rights reserved. // #pragma once #include "../../../Configurable/Configurable.hpp" #include "../../../Configurable/StandardOptions.hpp" #include "../../../Analyser/Static/StaticAnalyser.hpp" #include "../../ROMMachine.hpp" #include namespace Sinclair::ZX8081 { /// The ZX80/81 machine. class Machine { public: virtual ~Machine() = default; static std::unique_ptr ZX8081(const Analyser::Static::Target *target, const ROMMachine::ROMFetcher &rom_fetcher); virtual void set_tape_is_playing(bool is_playing) = 0; virtual bool get_tape_is_playing() = 0; /// Defines the runtime options available for a ZX80/81. class Options: public Reflection::StructImpl, public Configurable::QuickloadOption { friend Configurable::QuickloadOption; public: bool automatic_tape_motor_control = true; Options(Configurable::OptionsType type): Configurable::QuickloadOption(type == Configurable::OptionsType::UserFriendly), automatic_tape_motor_control(type == Configurable::OptionsType::UserFriendly) { // Declare fields if necessary. if(needs_declare()) { DeclareField(automatic_tape_motor_control); declare_quickload_option(); } } }; }; }