1
0
mirror of https://github.com/TomHarte/CLK.git synced 2026-04-20 10:17:05 +00:00

Add video counter writes.

This commit is contained in:
Thomas Harte
2025-01-07 21:56:04 -05:00
parent 2fd34b649d
commit 7f8e90bd29
3 changed files with 18 additions and 15 deletions
+9 -8
View File
@@ -330,17 +330,20 @@ public:
case 0xff1e: *value = video_.read<0xff1e>(); break;
case 0xff1f: *value = video_.read<0xff1f>(); break;
case 0xff3e: *value = 0; break;
case 0xff3f: *value = 0; break;
default:
printf("TODO: TED read at %04x\n", address);
}
} else {
switch(address) {
case 0xff00: timers_.write<0>(*value); break;
case 0xff01: timers_.write<1>(*value); break;
case 0xff02: timers_.write<2>(*value); break;
case 0xff03: timers_.write<3>(*value); break;
case 0xff04: timers_.write<4>(*value); break;
case 0xff05: timers_.write<5>(*value); break;
case 0xff00: timers_.write<0>(*value); break;
case 0xff01: timers_.write<1>(*value); break;
case 0xff02: timers_.write<2>(*value); break;
case 0xff03: timers_.write<3>(*value); break;
case 0xff04: timers_.write<4>(*value); break;
case 0xff05: timers_.write<5>(*value); break;
case 0xff06: video_.write<0xff06>(*value); break;
case 0xff07: video_.write<0xff07>(*value); break;
case 0xff08:
@@ -428,8 +431,6 @@ public:
case 0xff3e: page_cpu_rom(); break;
case 0xff3f: page_cpu_ram(); break;
// TODO: audio is 0xff10, 0xff11, 0xff0e, 0xff0f and shares 0xff18.
default:
printf("TODO: TED write at %04x\n", address);
}
+6 -4
View File
@@ -164,11 +164,13 @@ public:
case 0xff1a: load_high10(character_position_reload_); break;
case 0xff1b: load_low8(character_position_reload_); break;
case 0xff1c:
case 0xff1d:
case 0xff1e:
case 0xff1c: vertical_counter_ = (vertical_counter_ & 0x00ff) | ((value & 3) << 8); break;
case 0xff1d: vertical_counter_ = (vertical_counter_ & 0xff00) | value; break;
case 0xff1e: horizontal_counter_ = (horizontal_counter_ & 0x07) | ((value<< 2) & 0x1f8); break;
case 0xff1f:
printf("TODO: TED video write at %04x\n", address);
vertical_sub_count_ = value & 0x7;
flash_count_ = (flash_count_ & 0x10) | ((value >> 3) & 0xf);
break;
}
}
+3 -3
View File
@@ -61,12 +61,12 @@ PRG::Serialiser::Serialiser(const std::string &file_name) :
load_address_ = file_.get16le();
length_ = uint16_t(file_.stats().st_size - 2);
if (load_address_ + length_ >= 65536)
if(load_address_ + length_ >= 65536)
throw ErrorBadFormat;
}
Storage::Tape::Pulse PRG::Serialiser::next_pulse() {
// these are all microseconds per pole
// The below are in microseconds per pole.
constexpr unsigned int leader_zero_length = 179;
constexpr unsigned int zero_length = 169;
constexpr unsigned int one_length = 247;
@@ -76,7 +76,7 @@ Storage::Tape::Pulse PRG::Serialiser::next_pulse() {
if(!bit_phase_) get_next_output_token();
Pulse pulse;
pulse.length.clock_rate = 1000000;
pulse.length.clock_rate = 1'000'000;
pulse.type = (bit_phase_&1) ? Pulse::High : Pulse::Low;
switch(output_token_) {
case Leader: pulse.length.length = leader_zero_length; break;