From 8c84f3581abf91aefe166af9bd9cbc26077fb379 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 8 Sep 2016 05:32:17 -0400 Subject: [PATCH] Attempted to bring some uniformity in application of configurations. --- Machines/Commodore/Vic-20/Vic20.hpp | 5 ++-- Machines/ConfigurationTarget.hpp | 27 +++++++++++++++++++ Machines/Electron/Electron.hpp | 7 ++--- .../Clock Signal.xcodeproj/project.pbxproj | 2 ++ .../Documents/ElectronDocument.swift | 4 --- .../Documents/MachineDocument.swift | 1 + .../Documents/Vic20Document.swift | 4 --- .../Mac/Clock Signal/Machine/CSMachine.mm | 10 ++++++- .../Machine/Wrappers/CSElectron.mm | 7 ----- .../Clock Signal/Machine/Wrappers/CSVic20.mm | 6 ----- 10 files changed, 46 insertions(+), 27 deletions(-) create mode 100644 Machines/ConfigurationTarget.hpp diff --git a/Machines/Commodore/Vic-20/Vic20.hpp b/Machines/Commodore/Vic-20/Vic20.hpp index 8e6fe001b..4a9a65865 100644 --- a/Machines/Commodore/Vic-20/Vic20.hpp +++ b/Machines/Commodore/Vic-20/Vic20.hpp @@ -9,6 +9,7 @@ #ifndef Vic20_hpp #define Vic20_hpp +#include "../../ConfigurationTarget.hpp" #include "../../CRTMachine.hpp" #include "../../Typer.hpp" @@ -21,7 +22,6 @@ #include "../../../Storage/Tape/Tape.hpp" #include "../../../Storage/Disk/Disk.hpp" -#include "../../../StaticAnalyser/StaticAnalyser.hpp" namespace Commodore { namespace Vic20 { @@ -254,7 +254,8 @@ class Machine: public CRTMachine::Machine, public MOS::MOS6522IRQDelegate::Delegate, public Utility::TypeRecipient, - public Tape::Delegate { + public Tape::Delegate, + public ConfigurationTarget::Machine { public: Machine(); diff --git a/Machines/ConfigurationTarget.hpp b/Machines/ConfigurationTarget.hpp new file mode 100644 index 000000000..10521bef2 --- /dev/null +++ b/Machines/ConfigurationTarget.hpp @@ -0,0 +1,27 @@ +// +// ConfigurationTarget.h +// Clock Signal +// +// Created by Thomas Harte on 08/09/2016. +// Copyright © 2016 Thomas Harte. All rights reserved. +// + +#ifndef ConfigurationTarget_hpp +#define ConfigurationTarget_hpp + +#include "../StaticAnalyser/StaticAnalyser.hpp" + +namespace ConfigurationTarget { + +/*! + A ConfigurationTarget::Machine is anything that can accept a StaticAnalyser::Target + and configure itself appropriately. +*/ +class Machine { + public: + virtual void configure_as_target(const StaticAnalyser::Target &target) =0; +}; + +} + +#endif /* ConfigurationTarget_h */ diff --git a/Machines/Electron/Electron.hpp b/Machines/Electron/Electron.hpp index 19b021dbf..b22efe095 100644 --- a/Machines/Electron/Electron.hpp +++ b/Machines/Electron/Electron.hpp @@ -11,8 +11,8 @@ #include "../../Processors/6502/CPU6502.hpp" #include "../../Storage/Tape/Tape.hpp" -#include "../../StaticAnalyser/StaticAnalyser.hpp" +#include "../ConfigurationTarget.hpp" #include "../CRTMachine.hpp" #include "../Typer.hpp" @@ -139,8 +139,9 @@ class Speaker: public ::Outputs::Filter { class Machine: public CPU6502::Processor, public CRTMachine::Machine, - Tape::Delegate, - public Utility::TypeRecipient { + public Tape::Delegate, + public Utility::TypeRecipient, + public ConfigurationTarget::Machine { public: Machine(); diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index f9890f142..79bc323ab 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -454,6 +454,7 @@ 4B92EAC91B7C112B00246143 /* 6502TimingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = 6502TimingTests.swift; sourceTree = ""; }; 4B96F7201D75119A0058BB2D /* Tape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Tape.cpp; path = ../../StaticAnalyser/Acorn/Tape.cpp; sourceTree = ""; }; 4B96F7211D75119A0058BB2D /* Tape.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Tape.hpp; path = ../../StaticAnalyser/Acorn/Tape.hpp; sourceTree = ""; }; + 4BA9C3CF1D8164A9002DDB61 /* ConfigurationTarget.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = ConfigurationTarget.hpp; sourceTree = ""; }; 4BAB62AB1D3272D200DF5BA0 /* Disk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Disk.cpp; sourceTree = ""; }; 4BAB62AC1D3272D200DF5BA0 /* Disk.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Disk.hpp; sourceTree = ""; }; 4BAB62AE1D32730D00DF5BA0 /* Storage.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Storage.hpp; sourceTree = ""; }; @@ -1474,6 +1475,7 @@ 4B2E2D9E1C3A070900138695 /* Electron */, 4B1E85731D170228001EF87D /* Typer.cpp */, 4B1E85741D170228001EF87D /* Typer.hpp */, + 4BA9C3CF1D8164A9002DDB61 /* ConfigurationTarget.hpp */, ); name = Machines; path = ../../Machines; diff --git a/OSBindings/Mac/Clock Signal/Documents/ElectronDocument.swift b/OSBindings/Mac/Clock Signal/Documents/ElectronDocument.swift index 57ecf6d89..d587dbc32 100644 --- a/OSBindings/Mac/Clock Signal/Documents/ElectronDocument.swift +++ b/OSBindings/Mac/Clock Signal/Documents/ElectronDocument.swift @@ -44,10 +44,6 @@ class ElectronDocument: MachineDocument { return "ElectronDocument" } - override func configureAs(analysis: CSStaticAnalyser) { - analysis.applyToMachine(electron) - } - /* override func readFromURL(url: NSURL, ofType typeName: String) throws { if let pathExtension = url.pathExtension { switch pathExtension.lowercaseString { diff --git a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift index 8a2e8707a..9e85e3e50 100644 --- a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift +++ b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift @@ -100,6 +100,7 @@ class MachineDocument: // MARK: configuring func configureAs(analysis: CSStaticAnalyser) { + analysis.applyToMachine(self.machine) } // MARK: the pasteboard diff --git a/OSBindings/Mac/Clock Signal/Documents/Vic20Document.swift b/OSBindings/Mac/Clock Signal/Documents/Vic20Document.swift index a45cc8919..6eb656b3b 100644 --- a/OSBindings/Mac/Clock Signal/Documents/Vic20Document.swift +++ b/OSBindings/Mac/Clock Signal/Documents/Vic20Document.swift @@ -41,10 +41,6 @@ class Vic20Document: MachineDocument { return "Vic20Document" } - override func configureAs(analysis: CSStaticAnalyser) { - analysis.applyToMachine(vic20) - } - override func readFromURL(url: NSURL, ofType typeName: String) throws { if let pathExtension = url.pathExtension { switch pathExtension.lowercaseString { diff --git a/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm b/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm index af551587d..2b67f9caa 100644 --- a/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm +++ b/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm @@ -9,7 +9,9 @@ #import "CSMachine.h" #import "CSMachine+Subclassing.h" #import "CSMachine+Target.h" + #include "Typer.hpp" +#include "ConfigurationTarget.hpp" @interface CSMachine() - (void)speaker:(Outputs::Speaker *)speaker didCompleteSamples:(const int16_t *)samples length:(int)length; @@ -123,6 +125,12 @@ struct MachineDelegate: CRTMachine::Machine::Delegate { typeRecipient->set_typer_for_string([paste UTF8String]); } -- (void)applyTarget:(StaticAnalyser::Target)target {} +- (void)applyTarget:(StaticAnalyser::Target)target { + @synchronized(self) { + ConfigurationTarget::Machine *const configurationTarget = + dynamic_cast(self.machine); + if(configurationTarget) configurationTarget->configure_as_target(target); + } +} @end diff --git a/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSElectron.mm b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSElectron.mm index 34725c090..d3635d2a5 100644 --- a/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSElectron.mm +++ b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSElectron.mm @@ -10,7 +10,6 @@ #include "Electron.hpp" #import "CSMachine+Subclassing.h" -#import "CSMachine+Target.h" #include "StaticAnalyser.hpp" #include "TapeUEF.hpp" @@ -38,12 +37,6 @@ } } -- (void)applyTarget:(StaticAnalyser::Target)target { - @synchronized(self) { - _electron.configure_as_target(target); - } -} - - (void)setROM:(nonnull NSData *)rom slot:(int)slot { @synchronized(self) { _electron.set_rom((Electron::ROMSlot)slot, rom.length, (const uint8_t *)rom.bytes); diff --git a/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.mm b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.mm index 9dad2a4a7..7198aafe7 100644 --- a/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.mm +++ b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSVic20.mm @@ -46,12 +46,6 @@ using namespace Commodore::Vic20; [self setROM:rom slot:Drive]; } -- (void)applyTarget:(StaticAnalyser::Target)target { - @synchronized(self) { - _vic20.configure_as_target(target); - } -} - - (BOOL)openTAPAtURL:(NSURL *)URL { @synchronized(self) { try {