From be52b31b5cd7e49512a2a644916ec50182cef100 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 2 Oct 2018 22:05:58 -0400 Subject: [PATCH] Attempts fully to revive text mode. --- Components/9918/9918.cpp | 47 ++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/Components/9918/9918.cpp b/Components/9918/9918.cpp index 8ffab2c7a..f1196f446 100644 --- a/Components/9918/9918.cpp +++ b/Components/9918/9918.cpp @@ -330,32 +330,6 @@ void TMS9918::run_for(const HalfCycles cycles) { } break; - case LineMode::Text: { - if(pixel_target_) { - const uint32_t colours[2] = { palette[background_colour_], palette[text_colour_] }; - - const int shift = (output_column_ - first_pixel_column_) % 6; - int byte_column = (output_column_ - first_pixel_column_) / 6; - int pattern = reverse_table.map[pattern_buffer_[byte_column]] >> shift; - int pixels_left = pixels_end - output_column_; - int length = std::min(pixels_left, 6 - shift); - while(true) { - pixels_left -= length; - for(int c = 0; c < length; ++c) { - pixel_target_[c] = colours[pattern&0x01]; - pattern >>= 1; - } - pixel_target_ += length; - - if(!pixels_left) break; - length = std::min(6, pixels_left); - byte_column++; - pattern = reverse_table.map[pattern_buffer_[byte_column]]; - } - } - output_column_ = pixels_end; - } break; - case LineMode::Character: { // If this is the start of the visible area, seed sprite shifter positions. SpriteSet &sprite_set = sprite_sets_[active_sprite_set_ ^ 1]; @@ -686,8 +660,25 @@ void Base::draw_tms_character(int start, int end) { } void Base::draw_tms_text(int start, int end) { - for(int c = start; c < end; ++c) { - pixel_target_[c] = static_cast(c * 0x01010101); + const uint32_t colours[2] = { palette[background_colour_], palette[text_colour_] }; + + const int shift = start % 6; + int byte_column = start / 6; + int pattern = reverse_table.map[pattern_buffer_[byte_column]] >> shift; + int pixels_left = end - start; + int length = std::min(pixels_left, 6 - shift); + while(true) { + pixels_left -= length; + for(int c = 0; c < length; ++c) { + pixel_target_[c] = colours[pattern&0x01]; + pattern >>= 1; + } + pixel_target_ += length; + + if(!pixels_left) break; + length = std::min(6, pixels_left); + byte_column++; + pattern = reverse_table.map[pattern_buffer_[byte_column]]; } }