9 , referenceTime(EmuTime::zero())
10 , periodic(false) , status(false), signalEdge(false)
20 if (signalEdge && !status && newStatus) {
30 listener->
signal(*
this, time);
49 listener->
signal(*
this, time);
61 return ((time - referenceTime) % totalDur) < hiDur;
84 int a = (
begin < referenceTime) ?
86 (
begin - referenceTime) / totalDur;
87 int b = (
end - referenceTime) / totalDur;
97 if (signalEdge != wanted) {
101 EmuTime tmp(referenceTime);
115 void ClockPin::unschedule()
120 void ClockPin::schedule(EmuTime::param time)
122 assert(signalEdge && periodic && listener);
126 void ClockPin::executeUntil(EmuTime::param time)
128 assert(signalEdge && periodic && listener);
131 schedule(time + totalDur);
136 template<
typename Archive>
139 ar.template serializeBase<Schedulable>(*
this);
140 ar.serialize(
"totalDur", totalDur,
142 "referenceTime", referenceTime,
143 "periodic", periodic,
145 "signalEdge", signalEdge);
virtual void signal(ClockPin &pin, EmuTime::param time)=0
virtual void signalPosEdge(ClockPin &pin, EmuTime::param time)=0
ClockPin(Scheduler &scheduler, ClockPinListener *listener=nullptr)
void generateEdgeSignals(bool wanted, EmuTime::param time)
void setState(bool status, EmuTime::param time)
void serialize(Archive &ar, unsigned version)
int getTicksBetween(EmuTime::param begin, EmuTime::param end) const
bool getState(EmuTime::param time) const
EmuDuration::param getHighDuration() const
void setPeriodicState(EmuDuration::param total, EmuDuration::param hi, EmuTime::param time)
EmuDuration::param getTotalDuration() const
static constexpr EmuDuration zero()
Every class that wants to get scheduled at some point must inherit from this class.
void setSyncPoint(EmuTime::param timestamp)
This file implemented 3 utility functions:
#define INSTANTIATE_SERIALIZE_METHODS(CLASS)
constexpr auto begin(const zstring_view &x)
constexpr auto end(const zstring_view &x)