From 0b11fc259b30662fba7eb92b6a551027cfcf5a31 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 13 May 2024 21:42:38 -0400 Subject: [PATCH] Add Archimedes-specific target class. --- Analyser/Static/Acorn/StaticAnalyser.cpp | 4 ++-- Analyser/Static/Acorn/Target.hpp | 11 +++++++++-- Machines/Acorn/Archimedes/Archimedes.cpp | 11 +++++------ Machines/Acorn/Electron/Electron.cpp | 4 ++-- Machines/Utility/MachineForTarget.cpp | 3 ++- .../Machine/StaticAnalyser/CSStaticAnalyser.mm | 6 ++---- 6 files changed, 22 insertions(+), 17 deletions(-) diff --git a/Analyser/Static/Acorn/StaticAnalyser.cpp b/Analyser/Static/Acorn/StaticAnalyser.cpp index 1aaa149c0..a82a8e1cf 100644 --- a/Analyser/Static/Acorn/StaticAnalyser.cpp +++ b/Analyser/Static/Acorn/StaticAnalyser.cpp @@ -60,8 +60,8 @@ static std::vector> } Analyser::Static::TargetList Analyser::Static::Acorn::GetTargets(const Media &media, const std::string &, TargetPlatform::IntType) { - auto target8bit = std::make_unique(); - auto targetArchimedes = std::make_unique(Machine::Archimedes); + auto target8bit = std::make_unique(); + auto targetArchimedes = std::make_unique(); // Copy appropriate cartridges to the 8-bit target. target8bit->media.cartridges = AcornCartridgesFrom(media.cartridges); diff --git a/Analyser/Static/Acorn/Target.hpp b/Analyser/Static/Acorn/Target.hpp index 47aea1ca9..2f24c69d6 100644 --- a/Analyser/Static/Acorn/Target.hpp +++ b/Analyser/Static/Acorn/Target.hpp @@ -14,7 +14,7 @@ namespace Analyser::Static::Acorn { -struct Target: public ::Analyser::Static::Target, public Reflection::StructImpl { +struct ElectronTarget: public ::Analyser::Static::Target, public Reflection::StructImpl { bool has_acorn_adfs = false; bool has_pres_adfs = false; bool has_dfs = false; @@ -23,7 +23,7 @@ struct Target: public ::Analyser::Static::Target, public Reflection::StructImpl< bool should_shift_restart = false; std::string loading_command; - Target() : Analyser::Static::Target(Machine::Electron) { + ElectronTarget() : Analyser::Static::Target(Machine::Electron) { if(needs_declare()) { DeclareField(has_pres_adfs); DeclareField(has_acorn_adfs); @@ -34,4 +34,11 @@ struct Target: public ::Analyser::Static::Target, public Reflection::StructImpl< } }; +struct ArchimedesTarget: public ::Analyser::Static::Target, public Reflection::StructImpl { + bool should_shift_restart = false; + std::string main_program; + + ArchimedesTarget() : Analyser::Static::Target(Machine::Archimedes) {} +}; + } diff --git a/Machines/Acorn/Archimedes/Archimedes.cpp b/Machines/Acorn/Archimedes/Archimedes.cpp index 5b6d982d4..4e8e29490 100644 --- a/Machines/Acorn/Archimedes/Archimedes.cpp +++ b/Machines/Acorn/Archimedes/Archimedes.cpp @@ -29,13 +29,13 @@ #include "../../../Outputs/Log.hpp" #include "../../../Components/I2C/I2C.hpp" +#include "../../../Analyser/Static/Acorn/Target.hpp" + #include #include #include #include -#include "../../../Analyser/Static/Acorn/SWIIndex.hpp" - namespace Archimedes { class ConcreteMachine: @@ -109,7 +109,7 @@ class ConcreteMachine: public: ConcreteMachine( - const Analyser::Static::Target &target, + const Analyser::Static::Acorn::ArchimedesTarget &target, const ROMMachine::ROMFetcher &rom_fetcher ) : executor_(*this, *this, *this) { set_clock_rate(ClockRate); @@ -161,8 +161,6 @@ class ConcreteMachine: switch(pipeline_.swi_subversion()) { case Pipeline::SWISubversion::None: { - [[maybe_unused]] Analyser::Static::Acorn::SWIDescription description(comment); - // TODO: 400C1 to intercept create window 400C1 and positioning; then // plot icon 400e2 to listen for icons in window. That'll give a click area. // Probably also 400c2 which seems to be used to add icons to the icon bar. @@ -546,5 +544,6 @@ class ConcreteMachine: using namespace Archimedes; std::unique_ptr Machine::Archimedes(const Analyser::Static::Target *target, const ROMMachine::ROMFetcher &rom_fetcher) { - return std::make_unique(*target, rom_fetcher); + const auto archimedes_target = dynamic_cast(target); + return std::make_unique(*archimedes_target, rom_fetcher); } diff --git a/Machines/Acorn/Electron/Electron.cpp b/Machines/Acorn/Electron/Electron.cpp index c7494b4c9..511fbe7a6 100644 --- a/Machines/Acorn/Electron/Electron.cpp +++ b/Machines/Acorn/Electron/Electron.cpp @@ -51,7 +51,7 @@ template class ConcreteMachine: public SCSI::Bus::Observer, public ClockingHint::Observer { public: - ConcreteMachine(const Analyser::Static::Acorn::Target &target, const ROMMachine::ROMFetcher &rom_fetcher) : + ConcreteMachine(const Analyser::Static::Acorn::ElectronTarget &target, const ROMMachine::ROMFetcher &rom_fetcher) : m6502_(*this), scsi_bus_(4'000'000), hard_drive_(scsi_bus_, 0), @@ -787,7 +787,7 @@ template class ConcreteMachine: using namespace Electron; std::unique_ptr Machine::Electron(const Analyser::Static::Target *target, const ROMMachine::ROMFetcher &rom_fetcher) { - using Target = Analyser::Static::Acorn::Target; + using Target = Analyser::Static::Acorn::ElectronTarget; const Target *const acorn_target = dynamic_cast(target); if(acorn_target->media.mass_storage_devices.empty()) { diff --git a/Machines/Utility/MachineForTarget.cpp b/Machines/Utility/MachineForTarget.cpp index 98851fd15..390d0f84a 100644 --- a/Machines/Utility/MachineForTarget.cpp +++ b/Machines/Utility/MachineForTarget.cpp @@ -252,7 +252,8 @@ std::map> Machine::Target Add(AppleIIgs); options.emplace(std::make_pair(LongNameForTargetMachine(Analyser::Machine::Archimedes), new Analyser::Static::Target(Analyser::Machine::Archimedes))); Add(AtariST); - AddMapped(Electron, Acorn); + options.emplace(std::make_pair(LongNameForTargetMachine(Analyser::Machine::Electron), new Analyser::Static::Acorn::ElectronTarget)); + options.emplace(LongNameForTargetMachine(Analyser::Machine::Archimedes), new Analyser::Static::Acorn::ArchimedesTarget); Add(Enterprise); Add(Macintosh); Add(MSX); diff --git a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm index 2d56a0b68..8148c8080 100644 --- a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm +++ b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm @@ -136,11 +136,10 @@ return self; } - - (instancetype)initWithArchimedesModel:(CSMachineArchimedesModel)model { self = [super init]; if(self) { - auto target = std::make_unique(Analyser::Machine::Archimedes); + auto target = std::make_unique(); _targets.push_back(std::move(target)); } return self; @@ -164,8 +163,7 @@ - (instancetype)initWithElectronDFS:(BOOL)dfs adfs:(BOOL)adfs ap6:(BOOL)ap6 sidewaysRAM:(BOOL)sidewaysRAM { self = [super init]; if(self) { - using Target = Analyser::Static::Acorn::Target; - auto target = std::make_unique(); + auto target = std::make_unique(); target->has_dfs = dfs; target->has_pres_adfs = adfs; target->has_ap6_rom = ap6;