1
0
mirror of https://github.com/TomHarte/CLK.git synced 2026-03-11 04:42:20 +00:00

Handle clock-rate change correctly in onward signalling.

This commit is contained in:
Thomas Harte
2025-09-16 13:04:03 -04:00
parent 04344a3723
commit 512179d92a

View File

@@ -132,11 +132,16 @@ struct SystemVIAPortHandler: public MOS::MOS6522::IRQDelegatePortHandler {
return 0xff;
}
// Read keyboard.
// Read keyboard. Low six bits of output are key to check, state should be returned in high bit.
// Logger::info().append("Keyboard read from line %d", port_a_output_);
switch(port_a_output_ & 0x7f) {
default: return 0xff;
case 9: return 0xff; // All switches off.
default: return 0xff; // Default: key not pressed.
case 9: return 0x00; //
case 8: return 0x00; // Startup mode. (= mode 7?)
case 7: return 0x00; //
case 6: return 0xff; // Boot from network?
}
}
@@ -164,6 +169,7 @@ public:
void set_control(const uint8_t value) {
Logger::info().append("Video control set to %x", value);
cycle_length_ = (value & 0x10) ? 8 : 16;
}
/*!
@@ -173,11 +179,12 @@ public:
void perform_bus_cycle(const Motorola::CRTC::BusState &state) {
system_via_.set_control_line_input<MOS::MOS6522::Port::A, MOS::MOS6522::Line::One>(state.vsync);
// static bool print = false;
// bool print = false;
// uint16_t start_address = 0x7c00;
// if(print) {
// for(int y = 0; y < 25; y++) {
// for(int y = 0; y < 24; y++) {
// for(int x = 0; x < 40; x++) {
// printf("%c", ram_[0x7c00 + y*40 + x]);
// printf("%c", ram_[start_address + y*40 + x]);
// }
// printf("\n");
// }
@@ -233,7 +240,7 @@ public:
}
// Increment cycles since state changed.
cycles_ += 8;
cycles_ += cycle_length_;
// // Collect some more pixels if output is ongoing.
// if(previous_output_mode_ == OutputMode::Pixels) {
@@ -324,6 +331,7 @@ private:
} previous_output_mode_ = OutputMode::Sync;
int cycles_ = 0;
int cycles_into_hsync_ = 0;
int cycle_length_ = 8;
Outputs::CRT::CRT crt_;
uint8_t *pixel_data_ = nullptr, *pixel_pointer_ = nullptr;