// // Vic20.hpp // Clock Signal // // Created by Thomas Harte on 04/06/2016. // Copyright 2016 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 Commodore::Vic20 { /// @returns The options available for a Vic-20. std::unique_ptr get_options(); class Machine { public: virtual ~Machine() = default; /// Creates and returns a Vic-20. static std::unique_ptr Vic20(const Analyser::Static::Target *, const ROMMachine::ROMFetcher &); class Options: public Reflection::StructImpl, public Configurable::DisplayOption, public Configurable::QuickloadOption { friend Configurable::DisplayOption; friend Configurable::QuickloadOption; public: Options(Configurable::OptionsType type) : Configurable::DisplayOption(type == Configurable::OptionsType::UserFriendly ? Configurable::Display::SVideo : Configurable::Display::CompositeColour), Configurable::QuickloadOption(type == Configurable::OptionsType::UserFriendly) { if(needs_declare()) { declare_display_option(); declare_quickload_option(); limit_enum(&output, Configurable::Display::SVideo, Configurable::Display::CompositeColour, -1); } } }; }; }