openMSX

Represents a clock with a variable frequency. More...
#include <DynamicClock.hh>
Public Member Functions  
DynamicClock (EmuTime::param time)  
Create a new clock, which starts ticking at given time. More...  
DynamicClock (EmuTime::param time, unsigned freq)  
Create a new clock, which starts ticking at given time with given frequency. More...  
EmuTime::param  getTime () const 
Gets the time at which the last clock tick occurred. More...  
bool  before (EmuTime::param e) const 
Checks whether this clock's last tick is or is not before the given time stamp. More...  
unsigned  getTicksTill (EmuTime::param e) const 
Calculate the number of ticks for this clock until the given time. More...  
template<typename FIXED >  
void  getTicksTill (EmuTime::param e, FIXED &result) const 
unsigned  getTicksTillUp (EmuTime::param e) const 
Calculate the number of ticks this clock has to tick to reach or go past the given time. More...  
double  getTicksTillDouble (EmuTime::param e) const 
uint64_t  getTotalTicks () const 
void  setFreq (unsigned freq) 
Change the frequency at which this clock ticks. More...  
void  setFreq (unsigned freq_num, unsigned freq_denom) 
Equivalent to setFreq(freq_num / freq_denom), but possibly with less rounding errors. More...  
unsigned  getFreq () const 
Returns the frequency (in Hz) at which this clock ticks. More...  
EmuDuration  getPeriod () const 
Returns the length of one clockcycle. More...  
void  reset (EmuTime::param e) 
Reset the clock to start ticking at the given time. More...  
void  advance (EmuTime::param e) 
Advance this clock in time until the last tick which is not past the given time. More...  
void  operator+= (uint64_t n) 
Advance this clock by the given number of ticks. More...  
EmuTime  operator+ (uint64_t n) const 
Calculate the time at which this clock will have ticked the given number of times (counted from its last tick). More...  
void  fastAdd (unsigned n) 
Advance this clock by the given number of ticks. More...  
EmuTime  getFastAdd (unsigned n) const 
EmuTime  add (EmuTime::param time, unsigned n) const 
template<typename Archive >  
void  serialize (Archive &ar, unsigned version) 
Represents a clock with a variable frequency.
The frequency is in Hertz, so every tick is 1/frequency second. A clock has a current time, which can be increased by an integer number of ticks.
Definition at line 15 of file DynamicClock.hh.

inlineexplicit 
Create a new clock, which starts ticking at given time.
The initial frequency is infinite; in other words, the clock stands still.
Definition at line 24 of file DynamicClock.hh.

inline 
Create a new clock, which starts ticking at given time with given frequency.
Definition at line 29 of file DynamicClock.hh.
References setFreq().

inline 
Definition at line 161 of file DynamicClock.hh.
References openmsx::EmuTime, openmsx::DivModBySame::getDivisor(), and serialize().
Referenced by openmsx::CPUClock::calcTime(), and getFastAdd().

inline 
Advance this clock in time until the last tick which is not past the given time.
It is not allowed to advance a clock to a time in the past.
Definition at line 127 of file DynamicClock.hh.
References openmsx::DivModBySame::mod().
Referenced by openmsx::CPUClock::advanceTime(), openmsx::LaserdiscPlayer::setMuting(), and openmsx::MC6850::writeIO().

inline 
Checks whether this clock's last tick is or is not before the given time stamp.
Definition at line 44 of file DynamicClock.hh.
Referenced by openmsx::TC8566AF::readReg(), and openmsx::TC8566AF::writeReg().

inline 
Advance this clock by the given number of ticks.
This method is similar to operator+=, but it's optimized for speed. OTOH the amount of ticks should not be too large, otherwise an overflow occurs. Use operator+() when the duration of the ticks approaches 1 second.
Definition at line 151 of file DynamicClock.hh.
Referenced by openmsx::CPUClock::sync().

inline 
Definition at line 158 of file DynamicClock.hh.
References add().
Referenced by openmsx::ResampleLQ< CHANNELS >::fetchData(), openmsx::ResampleHQ< CHANNELS >::generateOutput(), openmsx::CPUClock::getTimeFast(), and openmsx::MSXMixer::reInit().

inline 
Returns the frequency (in Hz) at which this clock ticks.
Definition at line 106 of file DynamicClock.hh.
Referenced by openmsx::ResampleLQ< CHANNELS >::create(), openmsx::ResampledSoundDevice::createResampler(), openmsx::CPUClock::getFreq(), openmsx::WavImage::getFrequency(), openmsx::LaserdiscPlayer::serialize(), and serialize().

inline 
Returns the length of one clockcycle.
Definition at line 113 of file DynamicClock.hh.
References openmsx::EmuDuration.
Referenced by openmsx::MC6850::writeIO().

inline 
Calculate the number of ticks for this clock until the given time.
It is not allowed to call this method for a time in the past.
Definition at line 51 of file DynamicClock.hh.
References openmsx::DivModBySame::div().
Referenced by openmsx::ResampleLQ< CHANNELS >::fetchData(), openmsx::ResampleBlip< CHANNELS >::generateOutput(), openmsx::ResampleHQ< CHANNELS >::generateOutput(), openmsx::CassettePlayer::getAmplificationFactorImpl(), openmsx::WavImage::getSampleAt(), openmsx::Autofire::getSignal(), openmsx::LaserdiscPlayer::setMuting(), openmsx::MSXMixer::updateStream(), and openmsx::DACSound16S::writeDAC().

inline 
Definition at line 57 of file DynamicClock.hh.
References openmsx::IDEDeviceFactory::create(), and openmsx::DivModBySame::div().

inline 
Definition at line 72 of file DynamicClock.hh.
Referenced by openmsx::ResampleHQ< CHANNELS >::generateOutput().

inline 
Calculate the number of ticks this clock has to tick to reach or go past the given time.
It is not allowed to call this method for a time in the past.
Definition at line 67 of file DynamicClock.hh.
References openmsx::DivModBySame::div().
Referenced by openmsx::CPUClock::advanceHalt(), and openmsx::CPUClock::setLimit().

inline 
Gets the time at which the last clock tick occurred.
Definition at line 37 of file DynamicClock.hh.
Referenced by openmsx::ResampleLQ< CHANNELS >::fetchData(), openmsx::ResampleHQ< CHANNELS >::generateOutput(), openmsx::WavImage::getEndTime(), openmsx::CPUClock::getTime(), openmsx::WD2793::peekDTRQ(), openmsx::EmuTimer::setStart(), and openmsx::MC6850::writeIO().

inline 
Definition at line 77 of file DynamicClock.hh.
Referenced by openmsx::CPUClock::waitForEvenCycle().

inline 
Calculate the time at which this clock will have ticked the given number of times (counted from its last tick).
Definition at line 141 of file DynamicClock.hh.
References openmsx::EmuTime.

inline 
Advance this clock by the given number of ticks.
Definition at line 134 of file DynamicClock.hh.

inline 
Reset the clock to start ticking at the given time.
Definition at line 119 of file DynamicClock.hh.
Referenced by openmsx::WD2793::peekDataReg(), openmsx::MSXMixer::reInit(), openmsx::WD2793::reset(), openmsx::MC6850::reset(), openmsx::TC8566AF::serialize(), openmsx::WD2793::serialize(), openmsx::WD2793::setDataReg(), openmsx::EmuTimer::setStart(), openmsx::CPUClock::setTime(), openmsx::MC6850::writeIO(), and openmsx::TC8566AF::writeReg().
void openmsx::DynamicClock::serialize  (  Archive &  ar, 
unsigned  version  
) 
Definition at line 7 of file DynamicClock.cc.
References getFreq(), and setFreq().
Referenced by add().

inline 
Change the frequency at which this clock ticks.
freq  New frequency in Hertz. 
Definition at line 86 of file DynamicClock.hh.
References openmsx::DivModBySame::setDivisor().
Referenced by DynamicClock(), openmsx::EmuTimer::EmuTimer(), openmsx::CassettePlayer::getAmplificationFactorImpl(), openmsx::WD2793::peekDTRQ(), openmsx::TC8566AF::readReg(), openmsx::MSXMixer::reInit(), openmsx::MC6850::reset(), openmsx::TC8566AF::serialize(), openmsx::LaserdiscPlayer::serialize(), openmsx::WD2793::serialize(), serialize(), openmsx::CPUClock::setFreq(), openmsx::WavImage::WavImage(), openmsx::MC6850::writeIO(), and openmsx::Autofire::~Autofire().

inline 
Equivalent to setFreq(freq_num / freq_denom), but possibly with less rounding errors.
Definition at line 94 of file DynamicClock.hh.
References openmsx::DivModBySame::setDivisor().