From 37ca0e4f81f3ec58525048da2fe63da5fc8d27ab Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 30 Oct 2025 22:23:01 -0400 Subject: [PATCH] Introduce one-directional FIFO. --- Machines/Acorn/Tube/FIFO.hpp | 37 +++++++++++++++++++ .../Clock Signal.xcodeproj/project.pbxproj | 10 +++++ 2 files changed, 47 insertions(+) create mode 100644 Machines/Acorn/Tube/FIFO.hpp diff --git a/Machines/Acorn/Tube/FIFO.hpp b/Machines/Acorn/Tube/FIFO.hpp new file mode 100644 index 000000000..49484fa9d --- /dev/null +++ b/Machines/Acorn/Tube/FIFO.hpp @@ -0,0 +1,37 @@ +// +// Header.hpp +// Clock Signal +// +// Created by Thomas Harte on 30/10/2025. +// Copyright © 2025 Thomas Harte. All rights reserved. +// + +#pragma once + +namespace Acorn::Tube { + +template +struct FIFO { + uint8_t status() const { + return + ((read != write) ? 0x80 : 0x00) | + ((write - read < length) ? 0x40 : 0x00); + } + + void write(const uint8_t value) { + if(write - read == length) return; + buffer[write++] = value; + } + + void read() { + const uint8_t result = buffer[read]; + if(write != read) ++read; + } + +private: + std::array buffer; + uint32_t read = 0; + uint32_t write = 0; +}; + +} diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index e63f14720..6c05480af 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -1612,6 +1612,7 @@ 4B49F0A823346F7A0045E6A6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Clock Signal/Base.lproj/MacintoshOptions.xib"; sourceTree = SOURCE_ROOT; }; 4B4A75BC2EB2C55100EA398F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CompositeDynamicCropOptions.xib; sourceTree = ""; }; 4B4A75BF2EB399D700EA398F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/DynamicCropOptions.xib; sourceTree = ""; }; + 4B4A75C22EB43F1C00EA398F /* FIFO.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = FIFO.hpp; sourceTree = ""; }; 4B4A762E1DB1A3FA007AAE2E /* AY38910.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AY38910.cpp; sourceTree = ""; }; 4B4A762F1DB1A3FA007AAE2E /* AY38910.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = AY38910.hpp; sourceTree = ""; }; 4B4B1A3A200198C900A0F866 /* KonamiSCC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KonamiSCC.cpp; sourceTree = ""; }; @@ -3354,6 +3355,14 @@ path = uPD7002; sourceTree = ""; }; + 4B4A75C32EB43F1C00EA398F /* Tube */ = { + isa = PBXGroup; + children = ( + 4B4A75C22EB43F1C00EA398F /* FIFO.hpp */, + ); + path = Tube; + sourceTree = ""; + }; 4B4A762D1DB1A35C007AAE2E /* AY38910 */ = { isa = PBXGroup; children = ( @@ -4673,6 +4682,7 @@ 4BB505682B962DDF0031C43C /* Acorn */ = { isa = PBXGroup; children = ( + 4B4A75C32EB43F1C00EA398F /* Tube */, 4BB505692B962DDF0031C43C /* Archimedes */, 4B710C8C2E77A3B20056BDF4 /* BBCMicro */, 4BB5056A2B962DDF0031C43C /* Electron */,