mirror of
https://github.com/TomHarte/CLK.git
synced 2025-11-23 21:17:42 +00:00
Compare commits
1 Commits
QueueDeleg
...
6845LinesP
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a245f729ab |
@@ -125,6 +125,7 @@ public:
|
|||||||
case 0b01: layout_.interlace_mode_ = InterlaceMode::Sync; break;
|
case 0b01: layout_.interlace_mode_ = InterlaceMode::Sync; break;
|
||||||
case 0b11: layout_.interlace_mode_ = InterlaceMode::SyncAndVideo; break;
|
case 0b11: layout_.interlace_mode_ = InterlaceMode::SyncAndVideo; break;
|
||||||
}
|
}
|
||||||
|
layout_.update_lines_per_row();
|
||||||
|
|
||||||
// Per CPC documentation, skew doesn't work on a "type 1 or 2", i.e. an MC6845 or a UM6845R.
|
// Per CPC documentation, skew doesn't work on a "type 1 or 2", i.e. an MC6845 or a UM6845R.
|
||||||
// if(personality != Personality::UM6845R && personality != Personality::MC6845) {
|
// if(personality != Personality::UM6845R && personality != Personality::MC6845) {
|
||||||
@@ -135,7 +136,10 @@ public:
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
break;
|
break;
|
||||||
case 9: layout_.vertical.end_line = value; break;
|
case 9:
|
||||||
|
layout_.vertical.end_line = value;
|
||||||
|
layout_.update_lines_per_row();
|
||||||
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
layout_.vertical.start_cursor = value;
|
layout_.vertical.start_cursor = value;
|
||||||
layout_.cursor_flags = value >> 5;
|
layout_.cursor_flags = value >> 5;
|
||||||
@@ -206,10 +210,7 @@ public:
|
|||||||
// Shared signals.
|
// Shared signals.
|
||||||
//
|
//
|
||||||
const bool character_total_hit = character_counter_ == layout_.horizontal.total; // r00_h_total_hit
|
const bool character_total_hit = character_counter_ == layout_.horizontal.total; // r00_h_total_hit
|
||||||
const auto lines_per_row =
|
const bool line_end_hit = line_ == layout_.vertical.lines_per_row && !is_in_adjustment_period_; // max_scanline_hit
|
||||||
layout_.interlace_mode_ == InterlaceMode::SyncAndVideo ?
|
|
||||||
layout_.vertical.end_line & LineAddress::IntT(~1) : layout_.vertical.end_line; // max_scanline
|
|
||||||
const bool line_end_hit = line_ == lines_per_row && !is_in_adjustment_period_; // max_scanline_hit
|
|
||||||
const bool new_frame =
|
const bool new_frame =
|
||||||
character_total_hit && eof_latched_ &&
|
character_total_hit && eof_latched_ &&
|
||||||
(
|
(
|
||||||
@@ -512,9 +513,16 @@ private:
|
|||||||
LineAddress end_line; // r09_max_scanline_addr
|
LineAddress end_line; // r09_max_scanline_addr
|
||||||
LineAddress start_cursor; // r10_cursor_start
|
LineAddress start_cursor; // r10_cursor_start
|
||||||
LineAddress end_cursor; // r11_cursor_end
|
LineAddress end_cursor; // r11_cursor_end
|
||||||
|
|
||||||
|
LineAddress lines_per_row; // max_scanline
|
||||||
} vertical;
|
} vertical;
|
||||||
|
|
||||||
InterlaceMode interlace_mode_ = InterlaceMode::Off; // r08_interlace
|
InterlaceMode interlace_mode_ = InterlaceMode::Off; // r08_interlace
|
||||||
|
void update_lines_per_row() {
|
||||||
|
vertical.lines_per_row =
|
||||||
|
interlace_mode_ == InterlaceMode::SyncAndVideo ?
|
||||||
|
vertical.end_line & LineAddress::IntT(~1) : vertical.end_line;
|
||||||
|
}
|
||||||
|
|
||||||
RefreshAddress start_address; // r12_start_addr_h + r13_start_addr_l
|
RefreshAddress start_address; // r12_start_addr_h + r13_start_addr_l
|
||||||
RefreshAddress cursor_address; // r14_cursor_h + r15_cursor_l
|
RefreshAddress cursor_address; // r14_cursor_h + r15_cursor_l
|
||||||
|
|||||||
Reference in New Issue
Block a user