mirror of
https://github.com/TomHarte/CLK.git
synced 2024-12-26 09:29:45 +00:00
Threw in 300-baud support. Why not?
This commit is contained in:
parent
3e925e80a3
commit
01e5dae512
@ -69,7 +69,8 @@ static int gzget32(gzFile file)
|
|||||||
UEF::UEF(const char *file_name) :
|
UEF::UEF(const char *file_name) :
|
||||||
_time_base(1200),
|
_time_base(1200),
|
||||||
_is_at_end(false),
|
_is_at_end(false),
|
||||||
_pulse_pointer(0)
|
_pulse_pointer(0),
|
||||||
|
_is_300_baud(false)
|
||||||
{
|
{
|
||||||
_file = gzopen(file_name, "rb");
|
_file = gzopen(file_name, "rb");
|
||||||
|
|
||||||
@ -166,7 +167,7 @@ void UEF::parse_next_tape_chunk()
|
|||||||
case 0x0114: queue_security_cycles(); break;
|
case 0x0114: queue_security_cycles(); break;
|
||||||
case 0x0104: queue_defined_data(chunk_length); break;
|
case 0x0104: queue_defined_data(chunk_length); break;
|
||||||
|
|
||||||
case 0x113: // change of base rate
|
case 0x0113: // change of base rate
|
||||||
{
|
{
|
||||||
// TODO: something smarter than just converting this to an int
|
// TODO: something smarter than just converting this to an int
|
||||||
float new_time_base = gzgetfloat(_file);
|
float new_time_base = gzgetfloat(_file);
|
||||||
@ -174,6 +175,13 @@ void UEF::parse_next_tape_chunk()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 0x0117:
|
||||||
|
{
|
||||||
|
int baud_rate = gzget16(_file);
|
||||||
|
_is_300_baud = (baud_rate == 300);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("!!! Skipping %04x\n", chunk_id);
|
printf("!!! Skipping %04x\n", chunk_id);
|
||||||
break;
|
break;
|
||||||
@ -335,26 +343,27 @@ void UEF::queue_implicit_byte(uint8_t byte)
|
|||||||
|
|
||||||
void UEF::queue_bit(int bit)
|
void UEF::queue_bit(int bit)
|
||||||
{
|
{
|
||||||
// TODO: allow for 300-baud encoding
|
int number_of_cycles;
|
||||||
|
Time duration;
|
||||||
|
duration.clock_rate = _time_base * 4;
|
||||||
|
|
||||||
if(bit)
|
if(bit)
|
||||||
{
|
{
|
||||||
// Encode a 1 as four high-frequency waves
|
// encode high-frequency waves
|
||||||
Time duration;
|
|
||||||
duration.length = 1;
|
duration.length = 1;
|
||||||
duration.clock_rate = _time_base * 4;
|
number_of_cycles = 2;
|
||||||
|
|
||||||
_queued_pulses.emplace_back(Pulse::Low, duration);
|
|
||||||
_queued_pulses.emplace_back(Pulse::High, duration);
|
|
||||||
_queued_pulses.emplace_back(Pulse::Low, duration);
|
|
||||||
_queued_pulses.emplace_back(Pulse::High, duration);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Encode a 0 as two low-frequency waves
|
// encode low-frequency waves
|
||||||
Time duration;
|
|
||||||
duration.length = 2;
|
duration.length = 2;
|
||||||
duration.clock_rate = _time_base * 4;
|
number_of_cycles = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(_is_300_baud) number_of_cycles *= 4;
|
||||||
|
|
||||||
|
while(number_of_cycles--)
|
||||||
|
{
|
||||||
_queued_pulses.emplace_back(Pulse::Low, duration);
|
_queued_pulses.emplace_back(Pulse::Low, duration);
|
||||||
_queued_pulses.emplace_back(Pulse::High, duration);
|
_queued_pulses.emplace_back(Pulse::High, duration);
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ class UEF : public Tape {
|
|||||||
gzFile _file;
|
gzFile _file;
|
||||||
unsigned int _time_base;
|
unsigned int _time_base;
|
||||||
bool _is_at_end;
|
bool _is_at_end;
|
||||||
|
bool _is_300_baud;
|
||||||
|
|
||||||
std::vector<Pulse> _queued_pulses;
|
std::vector<Pulse> _queued_pulses;
|
||||||
size_t _pulse_pointer;
|
size_t _pulse_pointer;
|
||||||
|
Loading…
Reference in New Issue
Block a user