From 1f6f30ae9ed5d3fb843ea2f891c55e671c31b506 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 25 Feb 2025 23:03:45 -0500 Subject: [PATCH] Implement `MediaChangeObserver` for the consoles. --- Machines/Atari/2600/Atari2600.cpp | 9 +++++++-- Machines/ColecoVision/ColecoVision.cpp | 11 ++++++++--- Machines/MasterSystem/MasterSystem.cpp | 19 ++++++++++++------- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/Machines/Atari/2600/Atari2600.cpp b/Machines/Atari/2600/Atari2600.cpp index 1e6eb9b8a..bd2dcc51c 100644 --- a/Machines/Atari/2600/Atari2600.cpp +++ b/Machines/Atari/2600/Atari2600.cpp @@ -75,10 +75,11 @@ using Target = Analyser::Static::Atari2600::Target; class ConcreteMachine: public Machine, - public MachineTypes::TimedMachine, public MachineTypes::AudioProducer, + public MachineTypes::JoystickMachine, + public MachineTypes::MediaChangeObserver, public MachineTypes::ScanProducer, - public MachineTypes::JoystickMachine { + public MachineTypes::TimedMachine { public: ConcreteMachine(const Target &target) : frequency_mismatch_warner_(*this) { const std::vector &rom = target.media.cartridges.front()->get_segments().front().data; @@ -187,6 +188,10 @@ public: return confidence_counter_.get_confidence(); } + ChangeEffect effect_for_file_did_change(const std::string &) const final { + return ChangeEffect::RestartMachine; + } + private: // The bus. std::unique_ptr bus_; diff --git a/Machines/ColecoVision/ColecoVision.cpp b/Machines/ColecoVision/ColecoVision.cpp index 9551b817f..e5779318f 100644 --- a/Machines/ColecoVision/ColecoVision.cpp +++ b/Machines/ColecoVision/ColecoVision.cpp @@ -109,10 +109,11 @@ class ConcreteMachine: public Machine, public CPU::Z80::BusHandler, public Configurable::Device, - public MachineTypes::TimedMachine, - public MachineTypes::ScanProducer, public MachineTypes::AudioProducer, - public MachineTypes::JoystickMachine { + public MachineTypes::JoystickMachine, + public MachineTypes::MediaChangeObserver, + public MachineTypes::ScanProducer, + public MachineTypes::TimedMachine { public: ConcreteMachine(const Analyser::Static::Target &target, const ROMMachine::ROMFetcher &rom_fetcher) : @@ -356,6 +357,10 @@ public: return confidence_counter_.get_confidence(); } + ChangeEffect effect_for_file_did_change(const std::string &) const final { + return ChangeEffect::RestartMachine; + } + // MARK: - Configuration options. std::unique_ptr get_options() const final { auto options = std::make_unique(Configurable::OptionsType::UserFriendly); diff --git a/Machines/MasterSystem/MasterSystem.cpp b/Machines/MasterSystem/MasterSystem.cpp index c8eccfbf0..525d2e065 100644 --- a/Machines/MasterSystem/MasterSystem.cpp +++ b/Machines/MasterSystem/MasterSystem.cpp @@ -80,14 +80,15 @@ class Joystick: public Inputs::ConcreteJoystick { template class ConcreteMachine: public Machine, - public CPU::Z80::BusHandler, - public MachineTypes::TimedMachine, - public MachineTypes::ScanProducer, - public MachineTypes::AudioProducer, - public MachineTypes::KeyboardMachine, - public MachineTypes::JoystickMachine, public Configurable::Device, - public Inputs::Keyboard::Delegate { + public CPU::Z80::BusHandler, + public Inputs::Keyboard::Delegate, + public MachineTypes::AudioProducer, + public MachineTypes::JoystickMachine, + public MachineTypes::KeyboardMachine, + public MachineTypes::MediaChangeObserver, + public MachineTypes::ScanProducer, + public MachineTypes::TimedMachine { public: ConcreteMachine(const Analyser::Static::Sega::Target &target, const ROMMachine::ROMFetcher &rom_fetcher) : @@ -180,6 +181,10 @@ template class ConcreteMachine: audio_queue_.flush(); } + ChangeEffect effect_for_file_did_change(const std::string &) const final { + return ChangeEffect::RestartMachine; + } + void set_scan_target(Outputs::Display::ScanTarget *scan_target) final { vdp_.last_valid()->set_tv_standard( (region_ == Target::Region::Europe) ?