1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-07-05 10:28:58 +00:00

Fixed Time addition, added accumulation of distance into track into the disk drive, added a short circuit for LCM.

This commit is contained in:
Thomas Harte 2016-08-03 07:26:05 -04:00
parent 30f8b6baa4
commit 21f1fa37a4
4 changed files with 18 additions and 1 deletions

View File

@ -29,6 +29,8 @@ unsigned int NumberTheory::greatest_common_divisor(unsigned int a, unsigned int
unsigned int NumberTheory::least_common_multiple(unsigned int a, unsigned int b)
{
if(a == b) return a;
unsigned int gcd = greatest_common_divisor(a, b);
return (a / gcd) * (b / gcd);
}

View File

@ -101,9 +101,11 @@ void DiskDrive::process_next_event()
{
case Track::Event::FluxTransition:
_pll->add_pulse();
_time_into_track = _time_into_track + _current_event.length;
break;
case Track::Event::IndexHole:
_cycles_since_index_hole = 0;
_time_into_track.set_zero();
process_index_hole();
break;
}

View File

@ -103,6 +103,7 @@ class DiskDrive: public DigitalPhaseLockedLoop::Delegate, public TimedEventLoop
inline void get_next_event();
Track::Event _current_event;
Time _time_into_track;
};
}

View File

@ -49,9 +49,21 @@ struct Time {
{
Time result;
result.clock_rate = NumberTheory::least_common_multiple(clock_rate, other.clock_rate);
result.length = length * (clock_rate / result.clock_rate) + other.length * (other.clock_rate / result.clock_rate);
result.length = length * (result.clock_rate / clock_rate) + other.length * (result.clock_rate / other.clock_rate);
return result;
}
inline void set_zero()
{
length = 0;
clock_rate = 1;
}
inline void set_one()
{
length = 1;
clock_rate = 1;
}
};