From 287ff99bbcfd597735a151d6461e175aca4ffde6 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 17 Oct 2025 15:06:05 -0400 Subject: [PATCH] Use `Numeric::Counter`. --- Components/8272/i8272.cpp | 11 +++++++---- Components/8272/i8272.hpp | 4 +++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Components/8272/i8272.cpp b/Components/8272/i8272.cpp index 05621bfbf..a083b2dc3 100644 --- a/Components/8272/i8272.cpp +++ b/Components/8272/i8272.cpp @@ -8,6 +8,7 @@ #include "i8272.hpp" +#include "Numeric/CompileTimeCounter.hpp" #include "Outputs/Log.hpp" namespace { @@ -144,21 +145,23 @@ uint8_t i8272::read(const int address) { } void i8272::posit_event(const int event_type) { + using CounterTag = Numeric::Counter::SeqBase; + #define BEGIN_SECTION() switch(resume_point_) { default: #define END_SECTION() } -#define WAIT_FOR_EVENT(mask) resume_point_ = __LINE__; \ +#define WAIT_FOR_EVENT(mask) resume_point_ = Numeric::Counter::next(); \ interesting_event_mask_ = int(mask); \ return; \ - case __LINE__: + case Numeric::Counter::current(): #define WAIT_FOR_TIME(ms) interesting_event_mask_ = int(Event8272::Timer); \ delay_time_ = ms_to_cycles(ms); \ is_sleeping_ = false; \ update_clocking_observer(); \ - resume_point_ = __LINE__; \ + resume_point_ = Numeric::Counter::next(); \ [[fallthrough]]; \ - case __LINE__: \ + case Numeric::Counter::current(): \ if(delay_time_) return; #define PASTE(x, y) x##y diff --git a/Components/8272/i8272.hpp b/Components/8272/i8272.hpp index 35989c772..fb955e7d6 100644 --- a/Components/8272/i8272.hpp +++ b/Components/8272/i8272.hpp @@ -72,9 +72,11 @@ private: }; void posit_event(int type) final; int interesting_event_mask_ = int(Event8272::CommandByte); - int resume_point_ = 0; bool is_access_command_ = false; + static constexpr int IdleResumePoint = 0; + int resume_point_ = 0; + // The counter used for ::Timer events. Cycles::IntType delay_time_ = 0;