diff --git a/Machines/Acorn/Archimedes/Video.hpp b/Machines/Acorn/Archimedes/Video.hpp index 32922433a..607f82c0d 100644 --- a/Machines/Acorn/Archimedes/Video.hpp +++ b/Machines/Acorn/Archimedes/Video.hpp @@ -202,10 +202,12 @@ struct Video { // Move along line. switch(vertical_state_.phase()) { - case Phase::Sync: tick_horizontal(); break; - case Phase::Blank: tick_horizontal(); break; - case Phase::Border: tick_horizontal(); break; - case Phase::Display: tick_horizontal(); break; + case Phase::Sync: tick_horizontal(); break; + case Phase::Blank: tick_horizontal(); break; + case Phase::Border: tick_horizontal(); break; + case Phase::Display: tick_horizontal(); break; + case Phase::StartInterlacedSync: tick_horizontal(); break; + case Phase::EndInterlacedSync: tick_horizontal(); break; } ++time_in_phase_; } @@ -466,7 +468,7 @@ private: void set_phase(Phase phase) { if(time_in_phase_) { switch(phase_) { - case Phase::Sync: crt_.output_sync(time_in_phase_); break; + default: crt_.output_sync(time_in_phase_); break; case Phase::Blank: crt_.output_blank(time_in_phase_); break; case Phase::Border: crt_.output_level(time_in_phase_, phased_border_colour_); break; case Phase::Display: flush_pixels(); break; @@ -500,6 +502,7 @@ private: if(phase_ == Phase::Blank && horizontal_state_.position == horizontal_timing_.interlace_sync_position) { set_phase(Phase::Sync); } + return; } // End interlaced sync lines: do sync up to the programmed cutoff, then do blank. @@ -507,6 +510,7 @@ private: if(phase_ == Phase::Sync && horizontal_state_.position == horizontal_timing_.interlace_sync_position) { set_phase(Phase::Blank); } + return; } // Blank lines: obey only the transition from sync to non-sync.