1
0
mirror of https://github.com/TomHarte/CLK.git synced 2026-01-06 12:17:28 +00:00

Use Numeric::Counter.

This commit is contained in:
Thomas Harte
2025-10-17 15:06:05 -04:00
parent 0bbfcedabb
commit 287ff99bbc
2 changed files with 10 additions and 5 deletions

View File

@@ -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<i8272, IdleResumePoint+1>;
#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<CounterTag>(); \
interesting_event_mask_ = int(mask); \
return; \
case __LINE__:
case Numeric::Counter::current<CounterTag>():
#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<CounterTag>(); \
[[fallthrough]]; \
case __LINE__: \
case Numeric::Counter::current<CounterTag>(): \
if(delay_time_) return;
#define PASTE(x, y) x##y

View File

@@ -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;