1
0
mirror of https://github.com/TomHarte/CLK.git synced 2026-04-21 17:16:44 +00:00

Formalised clock-rate multiplication within disk drives, discovered that the stepper didn't have ideal behaviour for my timed event loop and hence nailed down the semantics a ilttle more.

(obiter: the 1540 now appears to discern the correct sequence of bits. Framing is off in my test printfs but that's neither here nor there).
This commit is contained in:
Thomas Harte
2016-07-31 13:32:30 -04:00
parent 6ee784a893
commit 2332f72875
7 changed files with 59 additions and 14 deletions
+10 -1
View File
@@ -32,6 +32,8 @@ PCMTrack::Event PCMTrack::get_next_event()
while(_segment_pointer < _segments.size())
{
unsigned int clock_multiplier = _track_clock_rate / _segments[_segment_pointer].length_of_a_bit.clock_rate;
unsigned int bit_length = clock_multiplier * _segments[_segment_pointer].length_of_a_bit.length;
const uint8_t *segment_data = _segments[_segment_pointer].data.get();
while(_bit_pointer < _segments[_segment_pointer].number_of_bits)
{
@@ -39,7 +41,7 @@ PCMTrack::Event PCMTrack::get_next_event()
// TODO: should I account for the converse bit ordering? Or can I assume MSB first?
int bit = segment_data[_bit_pointer >> 3] & (0x80 >> (_bit_pointer&7));
_bit_pointer++;
_next_event.length.length += clock_multiplier * _segments[_segment_pointer].length_of_a_bit.length;
_next_event.length.length += bit_length;
if(bit) return _next_event;
}
@@ -74,5 +76,12 @@ void PCMTrack::fix_length()
_next_event.length.clock_rate += _segments[c].length_of_a_bit.length * _segments[c].number_of_bits * multiplier;
}
uint8_t *data = _segments[0].data.get();
for(int c = 0; c < _segments[0].number_of_bits >> 3; c++)
{
printf("%02x.", data[c]);
}
printf("===\n");
_segment_pointer = _bit_pointer = 0;
}