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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user