From 2fb3787267e7b2265b4e185ebca869284ae5909f Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 9 Mar 2026 21:12:13 -0400 Subject: [PATCH] Provide route to launching an MO5. --- Analyser/Machines.hpp | 1 + Analyser/Static/StaticAnalyser.hpp | 2 +- Machines/Thomson/MO5/MO5.cpp | 15 +- Machines/Thomson/MO5/MO5.hpp | 2 +- Machines/Utility/MachineForTarget.cpp | 2 + .../Machine/StaticAnalyser/CSStaticAnalyser.h | 2 + .../StaticAnalyser/CSStaticAnalyser.mm | 12 ++ .../Base.lproj/MachinePicker.xib | 130 ++++++++++-------- .../MachinePicker/MachinePicker.swift | 3 + 9 files changed, 110 insertions(+), 59 deletions(-) diff --git a/Analyser/Machines.hpp b/Analyser/Machines.hpp index 1df980081..9628bfe75 100644 --- a/Analyser/Machines.hpp +++ b/Analyser/Machines.hpp @@ -28,6 +28,7 @@ enum class Machine { Oric, Plus4, PCCompatible, + ThomsonMO, Vic20, ZX8081, ZXSpectrum, diff --git a/Analyser/Static/StaticAnalyser.hpp b/Analyser/Static/StaticAnalyser.hpp index f3cd2d5a5..2f282c28c 100644 --- a/Analyser/Static/StaticAnalyser.hpp +++ b/Analyser/Static/StaticAnalyser.hpp @@ -65,7 +65,7 @@ struct Media { necessary instructions on how to launch any software provided, plus a measure of confidence in this target's correctness. */ struct Target { - Target(Machine machine) : machine(machine) {} + Target(const Machine machine) : machine(machine) {} virtual ~Target() = default; // This field is entirely optional. diff --git a/Machines/Thomson/MO5/MO5.cpp b/Machines/Thomson/MO5/MO5.cpp index 79f985c96..ca1474bf9 100644 --- a/Machines/Thomson/MO5/MO5.cpp +++ b/Machines/Thomson/MO5/MO5.cpp @@ -17,6 +17,7 @@ namespace { struct ConcreteMachine: public MachineTypes::TimedMachine, + public MachineTypes::ScanProducer, public Machine { ConcreteMachine(const Analyser::Static::Target &, const ROMMachine::ROMFetcher &) : @@ -37,7 +38,7 @@ struct ConcreteMachine: [[maybe_unused]] const AddressT address, [[maybe_unused]] CPU::M6809::data_t value ) { - return Cycles(1); + return Cycles(0); } private: @@ -47,14 +48,22 @@ private: using BusHandlerT = ConcreteMachine; }; CPU::M6809::Processor m6809_; + + // MARK: - ScanProducer. + + void set_scan_target(Outputs::Display::ScanTarget *) final { + } + + Outputs::Display::ScanStatus get_scan_status() const final { + return Outputs::Display::ScanStatus(); + } }; } -std::unique_ptr Machine::MO5( +std::unique_ptr Machine::ThomsonMO( const Analyser::Static::Target *target, const ROMMachine::ROMFetcher &rom_fetcher ) { return std::make_unique(*target, rom_fetcher); } - diff --git a/Machines/Thomson/MO5/MO5.hpp b/Machines/Thomson/MO5/MO5.hpp index e6fc408f9..7501b326a 100644 --- a/Machines/Thomson/MO5/MO5.hpp +++ b/Machines/Thomson/MO5/MO5.hpp @@ -20,7 +20,7 @@ namespace Thomson::MO5 { struct Machine { virtual ~Machine() = default; - static std::unique_ptr MO5( + static std::unique_ptr ThomsonMO( const Analyser::Static::Target *, const ROMMachine::ROMFetcher & ); diff --git a/Machines/Utility/MachineForTarget.cpp b/Machines/Utility/MachineForTarget.cpp index e1fdf2e65..2b41bf42a 100644 --- a/Machines/Utility/MachineForTarget.cpp +++ b/Machines/Utility/MachineForTarget.cpp @@ -29,6 +29,7 @@ #include "Machines/MSX/MSX.hpp" #include "Machines/Oric/Oric.hpp" #include "Machines/PCCompatible/PCCompatible.hpp" +#include "Machines/Thomson/MO5/MO5.hpp" #include "Machines/Sinclair/ZX8081/ZX8081.hpp" #include "Machines/Sinclair/ZXSpectrum/ZXSpectrum.hpp" @@ -91,6 +92,7 @@ std::unique_ptr Machine::MachineForTarget( BindD(Sega::MasterSystem, MasterSystem) BindD(Sinclair::ZX8081, ZX8081) BindD(Sinclair::ZXSpectrum, ZXSpectrum) + BindD(Thomson::MO5, ThomsonMO) default: error = Machine::Error::UnknownMachine; diff --git a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.h b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.h index 0d954703e..51933255a 100644 --- a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.h +++ b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.h @@ -210,6 +210,8 @@ typedef int Kilobytes; - (instancetype)initWithSpectrumModel:(CSMachineSpectrumModel)model; +- (instancetype)initWithThomsonMO:(int)unused; + - (instancetype)initWithVic20Region:(CSMachineVic20Region)region memorySize:(Kilobytes)memorySize hasC1540:(BOOL)hasC1540; diff --git a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm index 1c4f7d496..0965b0f6a 100644 --- a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm +++ b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm @@ -546,6 +546,18 @@ PermissionDelegate permission_delegate; return self; } +- (instancetype)initWithThomsonMO:(int)unused { + (void)unused; + + self = [super init]; + if(self) { + using Target = Analyser::Static::Target; + auto target = std::make_unique(Analyser::Machine::ThomsonMO); + _targets.push_back(std::move(target)); + } + return self; +} + - (instancetype)initWithVic20Region:(CSMachineVic20Region)region memorySize:(Kilobytes)memorySize hasC1540:(BOOL)hasC1540 diff --git a/OSBindings/Mac/Clock Signal/MachinePicker/Base.lproj/MachinePicker.xib b/OSBindings/Mac/Clock Signal/MachinePicker/Base.lproj/MachinePicker.xib index 712946597..d9824c03f 100644 --- a/OSBindings/Mac/Clock Signal/MachinePicker/Base.lproj/MachinePicker.xib +++ b/OSBindings/Mac/Clock Signal/MachinePicker/Base.lproj/MachinePicker.xib @@ -1,8 +1,8 @@ - + - + @@ -184,11 +184,11 @@ Gw - + - + @@ -202,7 +202,7 @@ Gw - + @@ -222,11 +222,11 @@ Gw - + - + @@ -234,7 +234,7 @@ Gw - + @@ -242,7 +242,7 @@ Gw - + @@ -257,7 +257,7 @@ Gw - + @@ -271,7 +271,7 @@ Gw - + @@ -808,7 +808,7 @@ Gw - + @@ -816,7 +816,7 @@ Gw - + @@ -824,7 +824,7 @@ Gw - + @@ -837,7 +837,7 @@ Gw