From 1ca261986e19b8622a46b82744ea11f48cf895bd Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 19 Nov 2025 17:04:39 -0500 Subject: [PATCH] New direction: attempt a first sweep with the EP128Emu ROM. --- Analyser/Static/StaticAnalyser.hpp | 10 +++++- Machines/Utility/ROMCatalogue.cpp | 9 ++++++ Machines/Utility/ROMCatalogue.hpp | 2 ++ .../Clock Signal.xcodeproj/project.pbxproj | 18 +++++++++++ Storage/FileBundle/FileBundle.cpp | 9 ++++++ Storage/FileBundle/FileBundle.hpp | 31 +++++++++++++++++++ 6 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 Storage/FileBundle/FileBundle.cpp create mode 100644 Storage/FileBundle/FileBundle.hpp diff --git a/Analyser/Static/StaticAnalyser.hpp b/Analyser/Static/StaticAnalyser.hpp index 640c298f1..f3cd2d5a5 100644 --- a/Analyser/Static/StaticAnalyser.hpp +++ b/Analyser/Static/StaticAnalyser.hpp @@ -12,6 +12,7 @@ #include "Storage/Cartridge/Cartridge.hpp" #include "Storage/Disk/Disk.hpp" +#include "Storage/FileBundle/FileBundle.hpp" #include "Storage/MassStorage/MassStorageDevice.hpp" #include "Storage/Tape/Tape.hpp" #include "Storage/TargetPlatforms.hpp" @@ -33,9 +34,15 @@ struct Media { std::vector> tapes; std::vector> cartridges; std::vector> mass_storage_devices; + std::vector> file_bundles; bool empty() const { - return disks.empty() && tapes.empty() && cartridges.empty() && mass_storage_devices.empty(); + return + disks.empty() && + tapes.empty() && + cartridges.empty() && + mass_storage_devices.empty() && + file_bundles.empty(); } Media &operator +=(const Media &rhs) { @@ -47,6 +54,7 @@ struct Media { append(tapes, rhs.tapes); append(cartridges, rhs.cartridges); append(mass_storage_devices, rhs.mass_storage_devices); + append(file_bundles, rhs.file_bundles); return *this; } diff --git a/Machines/Utility/ROMCatalogue.cpp b/Machines/Utility/ROMCatalogue.cpp index d5b2355fb..99a590998 100644 --- a/Machines/Utility/ROMCatalogue.cpp +++ b/Machines/Utility/ROMCatalogue.cpp @@ -670,6 +670,15 @@ const std::vector &Description::all_roms() { 0xe6daa0e9u }, + { + EnterpriseEPFILEIO, + "Enterprise", + "the EP128Emu direction FILE IO ROM", + "epfileio.rom", + 16_kb, + 0x60c79925u + }, + // // Macintosh // diff --git a/Machines/Utility/ROMCatalogue.hpp b/Machines/Utility/ROMCatalogue.hpp index 3d46e70cd..88b621db4 100644 --- a/Machines/Utility/ROMCatalogue.hpp +++ b/Machines/Utility/ROMCatalogue.hpp @@ -118,6 +118,8 @@ enum Name { EnterpriseEPDOS, EnterpriseEXDOS, + EnterpriseEPFILEIO, + // Macintosh. Macintosh128k, Macintosh512k, diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index d60957154..6697271b9 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -1148,6 +1148,9 @@ 4BCE0060227D39AB000CA200 /* Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BCE005E227D39AB000CA200 /* Video.cpp */; }; 4BCE1DF125D4C3FA00AE7A2B /* Bus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BCE1DEF25D4C3FA00AE7A2B /* Bus.cpp */; }; 4BCE1DF225D4C3FA00AE7A2B /* Bus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BCE1DEF25D4C3FA00AE7A2B /* Bus.cpp */; }; + 4BCF1ACF2ECE759000109999 /* FileBundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF1ACD2ECE759000109999 /* FileBundle.cpp */; }; + 4BCF1AD02ECE759000109999 /* FileBundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF1ACD2ECE759000109999 /* FileBundle.cpp */; }; + 4BCF1AD12ECE759000109999 /* FileBundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF1ACD2ECE759000109999 /* FileBundle.cpp */; }; 4BCF1FA41DADC3DD0039D2E7 /* Oric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF1FA21DADC3DD0039D2E7 /* Oric.cpp */; }; 4BD0FBC3233706A200148981 /* CSApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BD0FBC2233706A200148981 /* CSApplication.m */; }; 4BD191F52191180E0042E144 /* ScanTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD191F22191180E0042E144 /* ScanTarget.cpp */; }; @@ -2426,6 +2429,8 @@ 4BCE005F227D39AB000CA200 /* Video.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Video.hpp; sourceTree = ""; }; 4BCE1DEF25D4C3FA00AE7A2B /* Bus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bus.cpp; sourceTree = ""; }; 4BCE1DF025D4C3FA00AE7A2B /* Bus.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Bus.hpp; sourceTree = ""; }; + 4BCF1ACC2ECE759000109999 /* FileBundle.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = FileBundle.hpp; sourceTree = ""; }; + 4BCF1ACD2ECE759000109999 /* FileBundle.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FileBundle.cpp; sourceTree = ""; }; 4BCF1FA21DADC3DD0039D2E7 /* Oric.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Oric.cpp; sourceTree = ""; }; 4BCF1FA31DADC3DD0039D2E7 /* Oric.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Oric.hpp; sourceTree = ""; }; 4BD060A51FE49D3C006E14BE /* Speaker.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Speaker.hpp; sourceTree = ""; }; @@ -3589,6 +3594,7 @@ 4BEE0A691D72496600532C7B /* Cartridge */, 4B8805F81DCFF6CD003085B1 /* Data */, 4BAB62AA1D3272D200DF5BA0 /* Disk */, + 4BCF1ACE2ECE759000109999 /* FileBundle */, 4B6AAEA1230E3E1D0078E864 /* MassStorage */, 4B8DD3832634D37E00B3C866 /* State */, 4B69FB3A1C4D908A00B5F0AA /* Tape */, @@ -5291,6 +5297,15 @@ path = ADB; sourceTree = ""; }; + 4BCF1ACE2ECE759000109999 /* FileBundle */ = { + isa = PBXGroup; + children = ( + 4BCF1ACC2ECE759000109999 /* FileBundle.hpp */, + 4BCF1ACD2ECE759000109999 /* FileBundle.cpp */, + ); + path = FileBundle; + sourceTree = ""; + }; 4BCF1FA51DADC3E10039D2E7 /* Oric */ = { isa = PBXGroup; children = ( @@ -6199,6 +6214,7 @@ 4B65086122F4CFE0009C1100 /* Keyboard.cpp in Sources */, 4BBB70A9202014E2002FE009 /* MultiProducer.cpp in Sources */, 4B2E86BF25D74F160024F1E9 /* Mouse.cpp in Sources */, + 4BCF1AD12ECE759000109999 /* FileBundle.cpp in Sources */, 4B6ED2F1208E2F8A0047B343 /* WOZ.cpp in Sources */, 4B5D5C9825F56FC7001B4623 /* Spectrum.cpp in Sources */, 4B7C681727517A59001671EC /* Sprites.cpp in Sources */, @@ -6499,6 +6515,7 @@ 4BEDA3BF25B25563000C2DBD /* Decoder.cpp in Sources */, 4B051C95266EF50200CA44E8 /* AppleIIController.swift in Sources */, 4B4DC82B1D2C27A4003C5BF8 /* SerialBus.cpp in Sources */, + 4BCF1ACF2ECE759000109999 /* FileBundle.cpp in Sources */, 4BE8EB6625C750B50040BC40 /* DAT.cpp in Sources */, 4BBFFEE61F7B27F1005F3FEB /* TrackSerialiser.cpp in Sources */, 4B8855A52E84D51B00E251DD /* SAA5050.cpp in Sources */, @@ -6859,6 +6876,7 @@ 4B778F4023A5F1910000D260 /* z8530.cpp in Sources */, 4B778EFD23A5EB8E0000D260 /* AppleDSK.cpp in Sources */, 4B7752B728217EF40073E2C5 /* Chipset.cpp in Sources */, + 4BCF1AD02ECE759000109999 /* FileBundle.cpp in Sources */, 4B06AAF72C64606E0034D014 /* DiskII.cpp in Sources */, 4B778EFB23A5EB7E0000D260 /* HFE.cpp in Sources */, 4BC751B21D157E61006C31D9 /* 6522Tests.swift in Sources */, diff --git a/Storage/FileBundle/FileBundle.cpp b/Storage/FileBundle/FileBundle.cpp new file mode 100644 index 000000000..93fcec767 --- /dev/null +++ b/Storage/FileBundle/FileBundle.cpp @@ -0,0 +1,9 @@ +// +// FileBundle.cpp +// Clock Signal +// +// Created by Thomas Harte on 19/11/2025. +// Copyright © 2025 Thomas Harte. All rights reserved. +// + +#include "FileBundle.hpp" diff --git a/Storage/FileBundle/FileBundle.hpp b/Storage/FileBundle/FileBundle.hpp new file mode 100644 index 000000000..07a7e0dff --- /dev/null +++ b/Storage/FileBundle/FileBundle.hpp @@ -0,0 +1,31 @@ +// +// FileBundle.hpp +// Clock Signal +// +// Created by Thomas Harte on 19/11/2025. +// Copyright © 2025 Thomas Harte. All rights reserved. +// + +#pragma once + +namespace Storage::FileBundle { + +/*! + A File Bundle is a collection of individual files, abstracted from whatever media they might + be one. + + Initial motivation is allowing some machines direct local filesystem access. An attempt has + been made to draft this in such a way as to allow it to do things like expose ZIP files as + bundles in the future. +*/ +struct FileBundle { + + +}; + + +struct LocalFSFileBundle { + +}; + +};