From c0f131383066cb008c20abb8cab25192be934475 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 30 Jul 2017 22:05:29 -0400 Subject: [PATCH] Performed sufficient wiring to get to the point where attempting to load a CDT creates an instance of the Amstrad CPC and then fails only because the thing vends a `nullptr` CRT. --- Machines/AmstradCPC/AmstradCPC.cpp | 38 +++++++++++++++ Machines/AmstradCPC/AmstradCPC.hpp | 41 ++++++++++++++++ .../Clock Signal.xcodeproj/project.pbxproj | 32 +++++++++++++ .../Base.lproj/AmstradCPCOptions.xib | 48 +++++++++++++++++++ .../StaticAnalyser/CSStaticAnalyser.mm | 47 ++++++++---------- .../Machine/Wrappers/CSAmstradCPC.h | 13 +++++ .../Machine/Wrappers/CSAmstradCPC.mm | 23 +++++++++ 7 files changed, 216 insertions(+), 26 deletions(-) create mode 100644 Machines/AmstradCPC/AmstradCPC.cpp create mode 100644 Machines/AmstradCPC/AmstradCPC.hpp create mode 100644 OSBindings/Mac/Clock Signal/Base.lproj/AmstradCPCOptions.xib create mode 100644 OSBindings/Mac/Clock Signal/Machine/Wrappers/CSAmstradCPC.h create mode 100644 OSBindings/Mac/Clock Signal/Machine/Wrappers/CSAmstradCPC.mm diff --git a/Machines/AmstradCPC/AmstradCPC.cpp b/Machines/AmstradCPC/AmstradCPC.cpp new file mode 100644 index 000000000..e3890bf17 --- /dev/null +++ b/Machines/AmstradCPC/AmstradCPC.cpp @@ -0,0 +1,38 @@ +// +// AmstradCPC.cpp +// Clock Signal +// +// Created by Thomas Harte on 30/07/2017. +// Copyright © 2017 Thomas Harte. All rights reserved. +// + +#include "AmstradCPC.hpp" + +using namespace AmstradCPC; + +HalfCycles Machine::perform_machine_cycle(const CPU::Z80::PartialMachineCycle &cycle) { + return HalfCycles(0); +} + +void Machine::flush() { +} + +void Machine::setup_output(float aspect_ratio) { +} + +void Machine::close_output() { +} + +std::shared_ptr Machine::get_crt() { + return nullptr; +} + +std::shared_ptr Machine::get_speaker() { + return nullptr; +} + +void Machine::run_for(const Cycles cycles) { +} + +void Machine::configure_as_target(const StaticAnalyser::Target &target) { +} diff --git a/Machines/AmstradCPC/AmstradCPC.hpp b/Machines/AmstradCPC/AmstradCPC.hpp new file mode 100644 index 000000000..fc1e74794 --- /dev/null +++ b/Machines/AmstradCPC/AmstradCPC.hpp @@ -0,0 +1,41 @@ +// +// AmstradCPC.hpp +// Clock Signal +// +// Created by Thomas Harte on 30/07/2017. +// Copyright © 2017 Thomas Harte. All rights reserved. +// + +#ifndef AmstradCPC_hpp +#define AmstradCPC_hpp + +#include "../ConfigurationTarget.hpp" +#include "../CRTMachine.hpp" + +#include "../../Processors/Z80/Z80.hpp" +#include "../../Components/AY38910/AY38910.hpp" + +namespace AmstradCPC { + +class Machine: + public CPU::Z80::Processor, + public CRTMachine::Machine, + public ConfigurationTarget::Machine { + public: + HalfCycles perform_machine_cycle(const CPU::Z80::PartialMachineCycle &cycle); + void flush(); + + void setup_output(float aspect_ratio); + void close_output(); + + std::shared_ptr get_crt(); + std::shared_ptr get_speaker(); + + void run_for(const Cycles cycles); + + void configure_as_target(const StaticAnalyser::Target &target); +}; + +} + +#endif /* AmstradCPC_hpp */ diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index 2a74ab3f0..6646ad483 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -47,6 +47,9 @@ 4B3051301D98ACC600B4FED8 /* Plus3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B30512E1D98ACC600B4FED8 /* Plus3.cpp */; }; 4B37EE821D7345A6006A09A4 /* BinaryDump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B37EE801D7345A6006A09A4 /* BinaryDump.cpp */; }; 4B38F3441F2EB3E900D9235D /* StaticAnalyser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B38F3421F2EB3E900D9235D /* StaticAnalyser.cpp */; }; + 4B38F3481F2EC11D00D9235D /* AmstradCPC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B38F3461F2EC11D00D9235D /* AmstradCPC.cpp */; }; + 4B38F34C1F2EC3CA00D9235D /* CSAmstradCPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B38F34B1F2EC3CA00D9235D /* CSAmstradCPC.mm */; }; + 4B38F34F1F2EC6BA00D9235D /* AmstradCPCOptions.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B38F34D1F2EC6BA00D9235D /* AmstradCPCOptions.xib */; }; 4B3940E71DA83C8300427841 /* AsyncTaskQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B3940E51DA83C8300427841 /* AsyncTaskQueue.cpp */; }; 4B3BA0C31D318AEC005DD7A7 /* C1540Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B3BA0C21D318AEB005DD7A7 /* C1540Tests.swift */; }; 4B3BA0CE1D318B44005DD7A7 /* C1540Bridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B3BA0C61D318B44005DD7A7 /* C1540Bridge.mm */; }; @@ -535,6 +538,11 @@ 4B37EE811D7345A6006A09A4 /* BinaryDump.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = BinaryDump.hpp; sourceTree = ""; }; 4B38F3421F2EB3E900D9235D /* StaticAnalyser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StaticAnalyser.cpp; path = ../../StaticAnalyser/AmstradCPC/StaticAnalyser.cpp; sourceTree = ""; }; 4B38F3431F2EB3E900D9235D /* StaticAnalyser.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = StaticAnalyser.hpp; path = ../../StaticAnalyser/AmstradCPC/StaticAnalyser.hpp; sourceTree = ""; }; + 4B38F3461F2EC11D00D9235D /* AmstradCPC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AmstradCPC.cpp; path = AmstradCPC/AmstradCPC.cpp; sourceTree = ""; }; + 4B38F3471F2EC11D00D9235D /* AmstradCPC.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = AmstradCPC.hpp; path = AmstradCPC/AmstradCPC.hpp; sourceTree = ""; }; + 4B38F34A1F2EC3CA00D9235D /* CSAmstradCPC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSAmstradCPC.h; sourceTree = ""; }; + 4B38F34B1F2EC3CA00D9235D /* CSAmstradCPC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CSAmstradCPC.mm; sourceTree = ""; }; + 4B38F34E1F2EC6BA00D9235D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Clock Signal/Base.lproj/AmstradCPCOptions.xib"; sourceTree = SOURCE_ROOT; }; 4B3940E51DA83C8300427841 /* AsyncTaskQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AsyncTaskQueue.cpp; path = ../../Concurrency/AsyncTaskQueue.cpp; sourceTree = ""; }; 4B3940E61DA83C8300427841 /* AsyncTaskQueue.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = AsyncTaskQueue.hpp; path = ../../Concurrency/AsyncTaskQueue.hpp; sourceTree = ""; }; 4B3BA0C21D318AEB005DD7A7 /* C1540Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C1540Tests.swift; sourceTree = ""; }; @@ -1193,11 +1201,13 @@ 4B2A53981D117D36003C6002 /* Wrappers */ = { isa = PBXGroup; children = ( + 4B38F34A1F2EC3CA00D9235D /* CSAmstradCPC.h */, 4B2A53991D117D36003C6002 /* CSAtari2600.h */, 4B2A539B1D117D36003C6002 /* CSElectron.h */, 4BCF1FA61DADC5250039D2E7 /* CSOric.h */, 4B2A539D1D117D36003C6002 /* CSVic20.h */, 4B14978D1EE4B4D200CE2596 /* CSZX8081.h */, + 4B38F34B1F2EC3CA00D9235D /* CSAmstradCPC.mm */, 4B2A539A1D117D36003C6002 /* CSAtari2600.mm */, 4B2A539C1D117D36003C6002 /* CSElectron.mm */, 4BCF1FA71DADC5250039D2E7 /* CSOric.mm */, @@ -1261,6 +1271,15 @@ name = AmstradCPC; sourceTree = ""; }; + 4B38F3491F2EC12000D9235D /* AmstradCPC */ = { + isa = PBXGroup; + children = ( + 4B38F3461F2EC11D00D9235D /* AmstradCPC.cpp */, + 4B38F3471F2EC11D00D9235D /* AmstradCPC.hpp */, + ); + name = AmstradCPC; + sourceTree = ""; + }; 4B3940E81DA83C8700427841 /* Concurrency */ = { isa = PBXGroup; children = ( @@ -1342,6 +1361,7 @@ 4B2A332E1DB86869002876E3 /* OricOptionsPanel.swift */, 4B9CCDA01DA279CA0098B625 /* Vic20OptionsPanel.swift */, 4B95FA9C1F11893B0008E395 /* ZX8081OptionsPanel.swift */, + 4B38F34D1F2EC6BA00D9235D /* AmstradCPCOptions.xib */, 4B8FE2131DA19D5F0090D3CE /* Atari2600Options.xib */, 4B8FE2171DA19D5F0090D3CE /* ElectronOptions.xib */, 4B8FE2151DA19D5F0090D3CE /* MachineDocument.xib */, @@ -1923,6 +1943,7 @@ 4B8E4ECD1DCE483D003716C3 /* KeyboardMachine.hpp */, 4B2A33291DB8544D002876E3 /* MemoryFuzzer.hpp */, 4B1E85741D170228001EF87D /* Typer.hpp */, + 4B38F3491F2EC12000D9235D /* AmstradCPC */, 4B2E2D961C3A06EC00138695 /* Atari2600 */, 4B4DC81D1D2C2425003C5BF8 /* Commodore */, 4B2E2D9E1C3A070900138695 /* Electron */, @@ -2307,6 +2328,7 @@ 4BB73EAC1B587A5100552FC2 /* MainMenu.xib in Resources */, 4B8FE21D1DA19D5F0090D3CE /* ElectronOptions.xib in Resources */, 4B79E4461E3AF38600141F11 /* floppy525.png in Resources */, + 4B38F34F1F2EC6BA00D9235D /* AmstradCPCOptions.xib in Resources */, 4BC9DF451D044FCA00F44158 /* ROMImages in Resources */, 4B1497981EE4B97F00CE2596 /* ZX8081Options.xib in Resources */, ); @@ -2627,6 +2649,7 @@ 4B2BFDB21DAEF5FF001A68B8 /* Video.cpp in Sources */, 4B4DC82B1D2C27A4003C5BF8 /* SerialBus.cpp in Sources */, 4BC3B74F1CD194CC00F86E85 /* Shader.cpp in Sources */, + 4B38F3481F2EC11D00D9235D /* AmstradCPC.cpp in Sources */, 4B8FE2221DA19FB20090D3CE /* MachinePanel.swift in Sources */, 4BBB14311CD2CECE00BDB55C /* IntermediateShader.cpp in Sources */, 4BD5F1951D13528900631CD1 /* CSBestEffortUpdater.m in Sources */, @@ -2689,6 +2712,7 @@ 4B8805FE1DD02552003085B1 /* Tape.cpp in Sources */, 4B9CCDA11DA279CA0098B625 /* Vic20OptionsPanel.swift in Sources */, 4B8805F01DCFC99C003085B1 /* Acorn.cpp in Sources */, + 4B38F34C1F2EC3CA00D9235D /* CSAmstradCPC.mm in Sources */, 4B38F3441F2EB3E900D9235D /* StaticAnalyser.cpp in Sources */, 4B3051301D98ACC600B4FED8 /* Plus3.cpp in Sources */, 4B30512D1D989E2200B4FED8 /* Drive.cpp in Sources */, @@ -2797,6 +2821,14 @@ name = OricOptions.xib; sourceTree = ""; }; + 4B38F34D1F2EC6BA00D9235D /* AmstradCPCOptions.xib */ = { + isa = PBXVariantGroup; + children = ( + 4B38F34E1F2EC6BA00D9235D /* Base */, + ); + name = AmstradCPCOptions.xib; + sourceTree = ""; + }; 4B8FE2131DA19D5F0090D3CE /* Atari2600Options.xib */ = { isa = PBXVariantGroup; children = ( diff --git a/OSBindings/Mac/Clock Signal/Base.lproj/AmstradCPCOptions.xib b/OSBindings/Mac/Clock Signal/Base.lproj/AmstradCPCOptions.xib new file mode 100644 index 000000000..39bd7024b --- /dev/null +++ b/OSBindings/Mac/Clock Signal/Base.lproj/AmstradCPCOptions.xib @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm index 72a5dee94..7a3b12b09 100644 --- a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm +++ b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm @@ -14,6 +14,7 @@ #include "StaticAnalyser.hpp" +#import "CSAmstradCPC.h" #import "CSAtari2600.h" #import "CSElectron.h" #import "CSOric.h" @@ -22,16 +23,13 @@ #import "Clock_Signal-Swift.h" -@implementation CSStaticAnalyser -{ +@implementation CSStaticAnalyser { StaticAnalyser::Target _target; } -- (instancetype)initWithFileAtURL:(NSURL *)url -{ +- (instancetype)initWithFileAtURL:(NSURL *)url { self = [super init]; - if(self) - { + if(self) { std::list targets = StaticAnalyser::GetTargets([url fileSystemRepresentation]); if(!targets.size()) return nil; _target = targets.front(); @@ -42,34 +40,31 @@ return self; } -- (NSString *)optionsPanelNibName -{ - switch(_target.machine) - { - case StaticAnalyser::Target::Atari2600: return @"Atari2600Options"; - case StaticAnalyser::Target::Electron: return @"ElectronOptions"; - case StaticAnalyser::Target::Oric: return @"OricOptions"; - case StaticAnalyser::Target::Vic20: return @"Vic20Options"; - case StaticAnalyser::Target::ZX8081: return @"ZX8081Options"; +- (NSString *)optionsPanelNibName { + switch(_target.machine) { + case StaticAnalyser::Target::AmstradCPC: return @"AmstradCPCOptions"; + case StaticAnalyser::Target::Atari2600: return @"Atari2600Options"; + case StaticAnalyser::Target::Electron: return @"ElectronOptions"; + case StaticAnalyser::Target::Oric: return @"OricOptions"; + case StaticAnalyser::Target::Vic20: return @"Vic20Options"; + case StaticAnalyser::Target::ZX8081: return @"ZX8081Options"; default: return nil; } } -- (CSMachine *)newMachine -{ - switch(_target.machine) - { - case StaticAnalyser::Target::Atari2600: return [[CSAtari2600 alloc] init]; - case StaticAnalyser::Target::Electron: return [[CSElectron alloc] init]; - case StaticAnalyser::Target::Oric: return [[CSOric alloc] init]; - case StaticAnalyser::Target::Vic20: return [[CSVic20 alloc] init]; - case StaticAnalyser::Target::ZX8081: return [[CSZX8081 alloc] init]; +- (CSMachine *)newMachine { + switch(_target.machine) { + case StaticAnalyser::Target::AmstradCPC: return [[CSAmstradCPC alloc] init]; + case StaticAnalyser::Target::Atari2600: return [[CSAtari2600 alloc] init]; + case StaticAnalyser::Target::Electron: return [[CSElectron alloc] init]; + case StaticAnalyser::Target::Oric: return [[CSOric alloc] init]; + case StaticAnalyser::Target::Vic20: return [[CSVic20 alloc] init]; + case StaticAnalyser::Target::ZX8081: return [[CSZX8081 alloc] init]; default: return nil; } } -- (void)applyToMachine:(CSMachine *)machine -{ +- (void)applyToMachine:(CSMachine *)machine { [machine applyTarget:_target]; } diff --git a/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSAmstradCPC.h b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSAmstradCPC.h new file mode 100644 index 000000000..0457ffdf9 --- /dev/null +++ b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSAmstradCPC.h @@ -0,0 +1,13 @@ +// +// CSAmstradCPC.h +// Clock Signal +// +// Created by Thomas Harte on 30/07/2017. +// Copyright © 2017 Thomas Harte. All rights reserved. +// + +#import "CSMachine.h" + +@interface CSAmstradCPC : CSMachine + +@end diff --git a/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSAmstradCPC.mm b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSAmstradCPC.mm new file mode 100644 index 000000000..f243f9cdc --- /dev/null +++ b/OSBindings/Mac/Clock Signal/Machine/Wrappers/CSAmstradCPC.mm @@ -0,0 +1,23 @@ +// +// CSAmstradCPC.m +// Clock Signal +// +// Created by Thomas Harte on 30/07/2017. +// Copyright © 2017 Thomas Harte. All rights reserved. +// + +#import "CSAmstradCPC.h" + +#include "AmstradCPC.hpp" + +@implementation CSAmstradCPC { + AmstradCPC::Machine _amstradCPC; +} + +- (CRTMachine::Machine * const)machine { + return &_amstradCPC; +} + +- (NSString *)userDefaultsPrefix { return @"amstradCPC"; } + +@end