From e927fd00d8e0ac6ce95d8a081962a67cb3e6b831 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 15 Nov 2023 11:01:28 -0500 Subject: [PATCH 01/31] Do just enough to include x86 code in the main build. --- Analyser/Machines.hpp | 1 + InstructionSets/x86/Flags.hpp | 2 +- Machines/PCCompatible/PCCompatible.cpp | 43 +++++++++++++++++++ Machines/PCCompatible/PCCompatible.hpp | 33 ++++++++++++++ Machines/TimedMachine.hpp | 1 - .../Clock Signal.xcodeproj/project.pbxproj | 16 +++++++ 6 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 Machines/PCCompatible/PCCompatible.cpp create mode 100644 Machines/PCCompatible/PCCompatible.hpp diff --git a/Analyser/Machines.hpp b/Analyser/Machines.hpp index bf4d408e7..0e801325f 100644 --- a/Analyser/Machines.hpp +++ b/Analyser/Machines.hpp @@ -25,6 +25,7 @@ enum class Machine { MasterSystem, MSX, Oric, + PCCompatible, Vic20, ZX8081, ZXSpectrum, diff --git a/InstructionSets/x86/Flags.hpp b/InstructionSets/x86/Flags.hpp index 599dd3203..082267c17 100644 --- a/InstructionSets/x86/Flags.hpp +++ b/InstructionSets/x86/Flags.hpp @@ -163,7 +163,7 @@ class Flags { set_from(value & FlagValue::Interrupt); set_from(value & FlagValue::Direction); - set_from(value); + set_from(uint8_t(value)); set_from((~value) & FlagValue::Zero); set_from((~value) & FlagValue::Parity); diff --git a/Machines/PCCompatible/PCCompatible.cpp b/Machines/PCCompatible/PCCompatible.cpp new file mode 100644 index 000000000..924756029 --- /dev/null +++ b/Machines/PCCompatible/PCCompatible.cpp @@ -0,0 +1,43 @@ +// +// PCCompatible.cpp +// Clock Signal +// +// Created by Thomas Harte on 15/11/2023. +// Copyright © 2023 Thomas Harte. All rights reserved. +// + +#include "PCCompatible.hpp" +#include "../../InstructionSets/x86/Instruction.hpp" +#include "../../InstructionSets/x86/Perform.hpp" + +#include "../TimedMachine.hpp" + +namespace PCCompatible { + +class ConcreteMachine: + public Machine, + public MachineTypes::TimedMachine +{ + public: + ConcreteMachine( + [[maybe_unused]] const Analyser::Static::Target &target, + [[maybe_unused]] const ROMMachine::ROMFetcher &rom_fetcher + ) { + // This is actually a MIPS count; try 3 million. + set_clock_rate(3'000'000); + } + + void run_for([[maybe_unused]] const Cycles cycles) override {} +}; + + +} + +using namespace PCCompatible; + +// See header; constructs and returns an instance of the Amstrad CPC. +Machine *Machine::PCCompatible(const Analyser::Static::Target *target, const ROMMachine::ROMFetcher &rom_fetcher) { + return new PCCompatible::ConcreteMachine(*target, rom_fetcher); +} + +Machine::~Machine() {} diff --git a/Machines/PCCompatible/PCCompatible.hpp b/Machines/PCCompatible/PCCompatible.hpp new file mode 100644 index 000000000..0362a414c --- /dev/null +++ b/Machines/PCCompatible/PCCompatible.hpp @@ -0,0 +1,33 @@ +// +// PCCompatible.hpp +// Clock Signal +// +// Created by Thomas Harte on 15/11/2023. +// Copyright © 2023 Thomas Harte. All rights reserved. +// + +#ifndef PCCompatible_hpp +#define PCCompatible_hpp + +#include "../../Analyser/Static/StaticAnalyser.hpp" +#include "../ROMMachine.hpp" + +namespace PCCompatible { + +/*! + Models a PC compatible. +*/ +class Machine { + public: + virtual ~Machine(); + + /// Creates and returns a PC Compatible. + static Machine *PCCompatible( + const Analyser::Static::Target *target, + const ROMMachine::ROMFetcher &rom_fetcher + ); +}; + +} + +#endif /* PCCompatible_hpp */ diff --git a/Machines/TimedMachine.hpp b/Machines/TimedMachine.hpp index 6c1580342..f634cccaa 100644 --- a/Machines/TimedMachine.hpp +++ b/Machines/TimedMachine.hpp @@ -13,7 +13,6 @@ #include "../ClockReceiver/TimeTypes.hpp" #include "AudioProducer.hpp" -#include "ScanProducer.hpp" #include diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index 248e9fc01..bb8eb4145 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -9,6 +9,8 @@ /* Begin PBXBuildFile section */ 423BDC4A2AB24699008E37B6 /* 8088Tests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 423BDC492AB24699008E37B6 /* 8088Tests.mm */; }; 42437B332AC70833006DFED1 /* HDV.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B6FD0342923061300EC4760 /* HDV.cpp */; }; + 425739382B051EA800B7D1E4 /* PCCompatible.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 425739372B051EA800B7D1E4 /* PCCompatible.cpp */; }; + 425739392B051EA800B7D1E4 /* PCCompatible.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 425739372B051EA800B7D1E4 /* PCCompatible.cpp */; }; 4281683A2A37AFB4008ECD27 /* DispatcherTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 428168392A37AFB4008ECD27 /* DispatcherTests.mm */; }; 42A5E80C2ABBE04600A0DD5D /* NeskellTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42A5E80B2ABBE04600A0DD5D /* NeskellTests.swift */; }; 42A5E8442ABBE16F00A0DD5D /* illegal_rmw_test.bin in Resources */ = {isa = PBXBuildFile; fileRef = 42A5E8332ABBE16F00A0DD5D /* illegal_rmw_test.bin */; }; @@ -1138,6 +1140,8 @@ 4257392E2AFBE2BC00B7D1E4 /* Repetition.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Repetition.hpp; sourceTree = ""; }; 4257392F2AFBE36B00B7D1E4 /* LoadStore.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = LoadStore.hpp; sourceTree = ""; }; 425739302AFBE47700B7D1E4 /* InOut.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = InOut.hpp; sourceTree = ""; }; + 425739362B051EA800B7D1E4 /* PCCompatible.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = PCCompatible.hpp; sourceTree = ""; }; + 425739372B051EA800B7D1E4 /* PCCompatible.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PCCompatible.cpp; sourceTree = ""; }; 4281572E2AA0334300E16AA1 /* Carry.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Carry.hpp; sourceTree = ""; }; 428168372A16C25C008ECD27 /* LineLayout.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = LineLayout.hpp; sourceTree = ""; }; 428168392A37AFB4008ECD27 /* DispatcherTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DispatcherTests.mm; sourceTree = ""; }; @@ -2353,6 +2357,15 @@ path = Implementation; sourceTree = ""; }; + 425739352B051EA800B7D1E4 /* PCCompatible */ = { + isa = PBXGroup; + children = ( + 425739362B051EA800B7D1E4 /* PCCompatible.hpp */, + 425739372B051EA800B7D1E4 /* PCCompatible.cpp */, + ); + path = PCCompatible; + sourceTree = ""; + }; 42A5E8322ABBE16F00A0DD5D /* Neskell Tests */ = { isa = PBXGroup; children = ( @@ -4475,6 +4488,7 @@ 4B7F188B2154825D00388727 /* MasterSystem */, 4B79A4FC1FC8FF9800EEDAD5 /* MSX */, 4BCF1FA51DADC3E10039D2E7 /* Oric */, + 425739352B051EA800B7D1E4 /* PCCompatible */, 4B0F1BC92602F17B00B85C66 /* Sinclair */, 4B2B3A461F9B8FA70062DABF /* Utility */, ); @@ -5733,6 +5747,7 @@ 4BD424E62193B5830097291A /* Shader.cpp in Sources */, 4BC080CB26A238CC00D03FD8 /* AmigaADF.cpp in Sources */, 4B4B1A3D200198CA00A0F866 /* KonamiSCC.cpp in Sources */, + 425739392B051EA800B7D1E4 /* PCCompatible.cpp in Sources */, 4B055AC31FAE9AE80060FFFF /* AmstradCPC.cpp in Sources */, 4B055A9E1FAE85DA0060FFFF /* G64.cpp in Sources */, 4B055AB81FAE860F0060FFFF /* ZX80O81P.cpp in Sources */, @@ -5951,6 +5966,7 @@ 4B643F3F1D77B88000D431D6 /* DocumentController.swift in Sources */, 4BDA00E422E663B900AC3CD0 /* NSData+CRC32.m in Sources */, 4B9EC0E626AA4A660060A31F /* Chipset.cpp in Sources */, + 425739382B051EA800B7D1E4 /* PCCompatible.cpp in Sources */, 4BB8616E24E22DC500A00E03 /* BufferingScanTarget.cpp in Sources */, 4BB4BFB022A42F290069048D /* MacintoshIMG.cpp in Sources */, 4B05401E219D1618001BF69C /* ScanTarget.cpp in Sources */, From 1676ed985085332503e81828bc1b40e7fc0ee15b Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 15 Nov 2023 11:02:44 -0500 Subject: [PATCH 02/31] Add to SDL and Qt builds. --- OSBindings/Qt/clksignal.pro | 2 ++ OSBindings/SDL/SConstruct | 1 + 2 files changed, 3 insertions(+) diff --git a/OSBindings/Qt/clksignal.pro b/OSBindings/Qt/clksignal.pro index e26e3e77b..95cfe635e 100644 --- a/OSBindings/Qt/clksignal.pro +++ b/OSBindings/Qt/clksignal.pro @@ -99,6 +99,7 @@ SOURCES += \ $$SRC/Machines/MasterSystem/*.cpp \ $$SRC/Machines/MSX/*.cpp \ $$SRC/Machines/Oric/*.cpp \ + $$SRC/Machines/PCCompatible/*.cpp \ $$SRC/Machines/Utility/*.cpp \ $$SRC/Machines/Sinclair/Keyboard/*.cpp \ $$SRC/Machines/Sinclair/ZX8081/*.cpp \ @@ -232,6 +233,7 @@ HEADERS += \ $$SRC/Machines/MasterSystem/*.hpp \ $$SRC/Machines/MSX/*.hpp \ $$SRC/Machines/Oric/*.hpp \ + $$SRC/Machines/PCCompatible/*.hpp \ $$SRC/Machines/Utility/*.hpp \ $$SRC/Machines/Sinclair/Keyboard/*.hpp \ $$SRC/Machines/Sinclair/ZX8081/*.hpp \ diff --git a/OSBindings/SDL/SConstruct b/OSBindings/SDL/SConstruct index af2dd675c..3cadda6a2 100644 --- a/OSBindings/SDL/SConstruct +++ b/OSBindings/SDL/SConstruct @@ -86,6 +86,7 @@ SOURCES += glob.glob('../../Machines/Enterprise/*.cpp') SOURCES += glob.glob('../../Machines/MasterSystem/*.cpp') SOURCES += glob.glob('../../Machines/MSX/*.cpp') SOURCES += glob.glob('../../Machines/Oric/*.cpp') +SOURCES += glob.glob('../../Machines/PCCompatible/*.cpp') SOURCES += glob.glob('../../Machines/Utility/*.cpp') SOURCES += glob.glob('../../Machines/Sinclair/Keyboard/*.cpp') SOURCES += glob.glob('../../Machines/Sinclair/ZX8081/*.cpp') From 7323af0b413155a7c92e590d438610115109b2d2 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 15 Nov 2023 11:10:01 -0500 Subject: [PATCH 03/31] Avoid shadowing template parameter. --- InstructionSets/x86/Flags.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/InstructionSets/x86/Flags.hpp b/InstructionSets/x86/Flags.hpp index 082267c17..d91ad0017 100644 --- a/InstructionSets/x86/Flags.hpp +++ b/InstructionSets/x86/Flags.hpp @@ -82,8 +82,8 @@ class Flags { using FlagT = uint32_t; // Flag getters. - template bool flag() const { - switch(flag) { + template bool flag() const { + switch(flag_v) { case Flag::Carry: return carry_; case Flag::AuxiliaryCarry: return auxiliary_carry_; case Flag::Sign: return sign_; From af7069ac215af65f462682747462be71608f51a1 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 15 Nov 2023 11:32:23 -0500 Subject: [PATCH 04/31] Include and fetch a BIOS. --- Machines/PCCompatible/PCCompatible.cpp | 9 +++++++++ Machines/Utility/ROMCatalogue.cpp | 2 ++ Machines/Utility/ROMCatalogue.hpp | 3 +++ ROMImages/PCCompatible/GLABIOS_0.2.5_8T.ROM | Bin 0 -> 8192 bytes ROMImages/PCCompatible/readme.txt | 5 +++++ 5 files changed, 19 insertions(+) create mode 100644 ROMImages/PCCompatible/GLABIOS_0.2.5_8T.ROM create mode 100644 ROMImages/PCCompatible/readme.txt diff --git a/Machines/PCCompatible/PCCompatible.cpp b/Machines/PCCompatible/PCCompatible.cpp index 924756029..80288da8e 100644 --- a/Machines/PCCompatible/PCCompatible.cpp +++ b/Machines/PCCompatible/PCCompatible.cpp @@ -25,9 +25,18 @@ class ConcreteMachine: ) { // This is actually a MIPS count; try 3 million. set_clock_rate(3'000'000); + + // Fetch the BIOS. [8088 only, for now] + ROM::Request request = ROM::Request(ROM::Name::PCCompatibleGLaBIOS); + auto roms = rom_fetcher(request); + if(!request.validate(roms)) { + throw ROMMachine::Error::MissingROMs; + } } void run_for([[maybe_unused]] const Cycles cycles) override {} + + private: }; diff --git a/Machines/Utility/ROMCatalogue.cpp b/Machines/Utility/ROMCatalogue.cpp index 930a0d701..0d6a42f63 100644 --- a/Machines/Utility/ROMCatalogue.cpp +++ b/Machines/Utility/ROMCatalogue.cpp @@ -567,6 +567,8 @@ Description::Description(Name name) { case Name::OricMicrodisc: *this = Description(name, "Oric", "the Oric Microdisc ROM", "microdisc.rom", 8*1024, 0xa9664a9cu); break; case Name::Oric8DOSBoot: *this = Description(name, "Oric", "the 8DOS boot ROM", "8dos.rom", 512, 0x49a74c06u); break; + case Name::PCCompatibleGLaBIOS: *this = Description(name, "PCCompatible", "8088 GLaBIOS 0.2.5", "GLABIOS_0.2.5_8T.ROM", 8 * 1024, 0x9576944cu); break; + // TODO: CRCs below are incomplete, at best. case Name::MSXGenericBIOS: *this = Description(name, "MSX", "a generix MSX BIOS", "msx.rom", 32*1024, 0x94ee12f3u); break; case Name::MSXJapaneseBIOS: *this = Description(name, "MSX", "a Japanese MSX BIOS", "msx-japanese.rom", 32*1024, 0xee229390u); break; diff --git a/Machines/Utility/ROMCatalogue.hpp b/Machines/Utility/ROMCatalogue.hpp index 2580ad70c..54571bb98 100644 --- a/Machines/Utility/ROMCatalogue.hpp +++ b/Machines/Utility/ROMCatalogue.hpp @@ -132,6 +132,9 @@ enum Name { OricMicrodisc, Oric8DOSBoot, + // PCCompatible. + PCCompatibleGLaBIOS, + // Sinclair QL. SinclairQLJS, diff --git a/ROMImages/PCCompatible/GLABIOS_0.2.5_8T.ROM b/ROMImages/PCCompatible/GLABIOS_0.2.5_8T.ROM new file mode 100644 index 0000000000000000000000000000000000000000..717a289b0755303f52a531481d2a2c08b932156b GIT binary patch literal 8192 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 Date: Wed, 15 Nov 2023 14:27:04 -0500 Subject: [PATCH 05/31] Add necessary wiring for File -> New... --- Machines/Utility/MachineForTarget.cpp | 5 + .../Machine/StaticAnalyser/CSStaticAnalyser.h | 5 + .../StaticAnalyser/CSStaticAnalyser.mm | 10 + .../Base.lproj/MachinePicker.xib | 186 +++++++++++------- .../MachinePicker/MachinePicker.swift | 3 + 5 files changed, 135 insertions(+), 74 deletions(-) diff --git a/Machines/Utility/MachineForTarget.cpp b/Machines/Utility/MachineForTarget.cpp index 8b0f3026a..8bde43eba 100644 --- a/Machines/Utility/MachineForTarget.cpp +++ b/Machines/Utility/MachineForTarget.cpp @@ -25,6 +25,7 @@ #include "../MasterSystem/MasterSystem.hpp" #include "../MSX/MSX.hpp" #include "../Oric/Oric.hpp" +#include "../PCCompatible/PCCompatible.hpp" #include "../Sinclair/ZX8081/ZX8081.hpp" #include "../Sinclair/ZXSpectrum/ZXSpectrum.hpp" @@ -69,6 +70,7 @@ Machine::DynamicMachine *Machine::MachineForTarget(const Analyser::Static::Targe Bind(Enterprise) Bind(MSX) Bind(Oric) + Bind(PCCompatible) BindD(Sega::MasterSystem, MasterSystem) BindD(Sinclair::ZX8081, ZX8081) BindD(Sinclair::ZXSpectrum, ZXSpectrum) @@ -139,6 +141,7 @@ std::string Machine::ShortNameForTargetMachine(const Analyser::Machine machine) case Analyser::Machine::MasterSystem: return "MasterSystem"; case Analyser::Machine::MSX: return "MSX"; case Analyser::Machine::Oric: return "Oric"; + case Analyser::Machine::PCCompatible: return "PCCompatible"; case Analyser::Machine::Vic20: return "Vic20"; case Analyser::Machine::ZX8081: return "ZX8081"; case Analyser::Machine::ZXSpectrum: return "ZXSpectrum"; @@ -162,6 +165,7 @@ std::string Machine::LongNameForTargetMachine(Analyser::Machine machine) { case Analyser::Machine::MasterSystem: return "Sega Master System"; case Analyser::Machine::MSX: return "MSX"; case Analyser::Machine::Oric: return "Oric"; + case Analyser::Machine::PCCompatible: return "PC Compatible"; case Analyser::Machine::Vic20: return "Vic 20"; case Analyser::Machine::ZX8081: return "ZX80/81"; case Analyser::Machine::ZXSpectrum: return "ZX Spectrum"; @@ -244,6 +248,7 @@ std::map> Machine::Target Add(Macintosh); Add(MSX); Add(Oric); + options.emplace(std::make_pair(LongNameForTargetMachine(Analyser::Machine::PCCompatible), new Analyser::Static::Target(Analyser::Machine::PCCompatible))); AddMapped(Vic20, Commodore); Add(ZX8081); Add(ZXSpectrum); diff --git a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.h b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.h index bcb958cb1..2028fb66f 100644 --- a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.h +++ b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.h @@ -123,6 +123,10 @@ typedef NS_ENUM(NSInteger, CSMachineMSXRegion) { CSMachineMSXRegionJapanese, }; +typedef NS_ENUM(NSInteger, CSPCCompatibleModel) { + CSPCCompatibleModelTurboXT, +}; + typedef int Kilobytes; @interface CSStaticAnalyser : NSObject @@ -143,6 +147,7 @@ typedef int Kilobytes; - (instancetype)initWithVic20Region:(CSMachineVic20Region)region memorySize:(Kilobytes)memorySize hasC1540:(BOOL)hasC1540; - (instancetype)initWithZX80MemorySize:(Kilobytes)memorySize useZX81ROM:(BOOL)useZX81ROM; - (instancetype)initWithZX81MemorySize:(Kilobytes)memorySize; +- (instancetype)initWithPCCompatibleModel:(CSPCCompatibleModel)model; @property(nonatomic, readonly, nullable) NSString *optionsNibName; @property(nonatomic, readonly) NSString *displayName; diff --git a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm index dbca34373..bb7c8db8b 100644 --- a/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm +++ b/OSBindings/Mac/Clock Signal/Machine/StaticAnalyser/CSStaticAnalyser.mm @@ -272,6 +272,16 @@ return self; } +- (instancetype)initWithPCCompatibleModel:(CSPCCompatibleModel)model { + self = [super init]; + if(self) { + using Target = Analyser::Static::Target; + auto target = std::make_unique(Analyser::Machine::PCCompatible); + _targets.push_back(std::move(target)); + } + return self; +} + - (instancetype)initWithSpectrumModel:(CSMachineSpectrumModel)model { self = [super init]; if(self) { diff --git a/OSBindings/Mac/Clock Signal/MachinePicker/Base.lproj/MachinePicker.xib b/OSBindings/Mac/Clock Signal/MachinePicker/Base.lproj/MachinePicker.xib index c3733c142..540acaa95 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 @@ - + - + @@ -17,10 +17,10 @@ - - + + - + - + @@ -59,7 +59,7 @@ Gw - + @@ -81,7 +81,7 @@ Gw - + @@ -89,7 +89,7 @@ Gw - + @@ -148,7 +148,7 @@ Gw - + @@ -172,7 +172,7 @@ Gw - + @@ -180,7 +180,7 @@ Gw - + @@ -235,19 +235,19 @@ Gw - + - - + + - - + + @@ -255,7 +255,7 @@ Gw - + @@ -269,7 +269,7 @@ Gw - + @@ -303,7 +303,7 @@ Gw - + @@ -338,32 +338,32 @@ Gw - +