1
0
mirror of https://github.com/TomHarte/CLK.git synced 2025-02-05 21:32:55 +00:00

Clock convert for draw_ calls.

This commit is contained in:
Thomas Harte 2023-01-08 17:31:08 -05:00
parent b522d65c50
commit 8cc20844a9

View File

@ -405,6 +405,12 @@ void TMS9918<personality>::run_for(const HalfCycles cycles) {
// Left border. // Left border.
border(Timing<personality>::StartOfLeftBorder, line_buffer.first_pixel_output_column); border(Timing<personality>::StartOfLeftBorder, line_buffer.first_pixel_output_column);
#define draw(function, converter) { \
const int relative_start = this->clock_converter_.converter(start - line_buffer.first_pixel_output_column); \
const int relative_end = this->clock_converter_.converter(end - line_buffer.first_pixel_output_column); \
if(relative_start == relative_end) break; \
this->function; }
// Pixel region. // Pixel region.
intersect( intersect(
line_buffer.first_pixel_output_column, line_buffer.first_pixel_output_column,
@ -417,12 +423,10 @@ void TMS9918<personality>::run_for(const HalfCycles cycles) {
} }
if(this->pixel_target_) { if(this->pixel_target_) {
const int relative_start = start - line_buffer.first_pixel_output_column;
const int relative_end = end - line_buffer.first_pixel_output_column;
switch(line_buffer.line_mode) { switch(line_buffer.line_mode) {
case LineMode::SMS: this->draw_sms(relative_start, relative_end, cram_value); break; case LineMode::SMS: draw(draw_sms(relative_start, relative_end, cram_value), to_tms_access_clock); break;
case LineMode::Character: this->draw_tms_character(relative_start, relative_end); break; case LineMode::Character: draw(draw_tms_character(relative_start, relative_end), to_tms_access_clock); break;
case LineMode::Text: this->draw_tms_text(relative_start, relative_end); break; case LineMode::Text: draw(draw_tms_text(relative_start, relative_end), to_tms_access_clock); break;
case LineMode::Refresh: break; /* Dealt with elsewhere. */ case LineMode::Refresh: break; /* Dealt with elsewhere. */
} }
@ -436,6 +440,8 @@ void TMS9918<personality>::run_for(const HalfCycles cycles) {
} }
); );
#undef draw
// Additional right border, if called for. // Additional right border, if called for.
if(line_buffer.next_border_column != Timing<personality>::CyclesPerLine) { if(line_buffer.next_border_column != Timing<personality>::CyclesPerLine) {
border(line_buffer.next_border_column, Timing<personality>::CyclesPerLine); border(line_buffer.next_border_column, Timing<personality>::CyclesPerLine);