mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-05 05:34:20 +00:00
Corrects multicolour text mode.
This commit is contained in:
parent
0278d5b61c
commit
8ff265c3a1
@ -605,7 +605,6 @@ HalfCycles Base::half_cycles_before_internal_cycles(int internal_cycles) {
|
|||||||
return HalfCycles(((internal_cycles << 2) - cycles_error_) / 3);
|
return HalfCycles(((internal_cycles << 2) - cycles_error_) / 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HalfCycles TMS9918::get_time_until_interrupt() {
|
HalfCycles TMS9918::get_time_until_interrupt() {
|
||||||
if(!generate_interrupts_ && !enable_line_interrupts_) return HalfCycles(-1);
|
if(!generate_interrupts_ && !enable_line_interrupts_) return HalfCycles(-1);
|
||||||
if(get_interrupt_line()) return HalfCycles(0);
|
if(get_interrupt_line()) return HalfCycles(0);
|
||||||
|
@ -554,7 +554,7 @@ class Base {
|
|||||||
|
|
||||||
LineBuffer &line_buffer = line_buffers_[write_pointer_.row];
|
LineBuffer &line_buffer = line_buffers_[write_pointer_.row];
|
||||||
LineBuffer &sprite_selection_buffer = line_buffers_[(write_pointer_.row + 1) % mode_timing_.total_lines];
|
LineBuffer &sprite_selection_buffer = line_buffers_[(write_pointer_.row + 1) % mode_timing_.total_lines];
|
||||||
const size_t row_base = pattern_name_address_ & (static_cast<size_t>((write_pointer_.row << 2)&~31) | 0x3c00);
|
const size_t row_base = pattern_name_address_ & (size_t((write_pointer_.row << 2)&~31) | 0x3c00);
|
||||||
|
|
||||||
size_t pattern_base = pattern_generator_table_address_;
|
size_t pattern_base = pattern_generator_table_address_;
|
||||||
size_t colour_base = colour_table_address_;
|
size_t colour_base = colour_table_address_;
|
||||||
@ -562,17 +562,20 @@ class Base {
|
|||||||
|
|
||||||
if(screen_mode_ == ScreenMode::Graphics) {
|
if(screen_mode_ == ScreenMode::Graphics) {
|
||||||
// If this is high resolution mode, allow the row number to affect the pattern and colour addresses.
|
// If this is high resolution mode, allow the row number to affect the pattern and colour addresses.
|
||||||
pattern_base &= static_cast<size_t>(0x2000 | ((write_pointer_.row & 0xc0) << 5));
|
pattern_base &= size_t(0x2000 | ((write_pointer_.row & 0xc0) << 5));
|
||||||
colour_base &= static_cast<size_t>(0x2000 | ((write_pointer_.row & 0xc0) << 5));
|
colour_base &= size_t(0x2000 | ((write_pointer_.row & 0xc0) << 5));
|
||||||
|
|
||||||
colour_base += static_cast<size_t>(write_pointer_.row & 7);
|
colour_base += size_t(write_pointer_.row & 7);
|
||||||
colour_name_shift = 0;
|
colour_name_shift = 0;
|
||||||
|
} else {
|
||||||
|
colour_base &= size_t(0xffc0 | (write_pointer_.row & 7));
|
||||||
|
pattern_base &= size_t(0x3800);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(screen_mode_ == ScreenMode::MultiColour) {
|
if(screen_mode_ == ScreenMode::MultiColour) {
|
||||||
pattern_base += static_cast<size_t>((write_pointer_.row >> 2) & 7);
|
pattern_base += size_t((write_pointer_.row >> 2) & 7);
|
||||||
} else {
|
} else {
|
||||||
pattern_base += static_cast<size_t>(write_pointer_.row & 7);
|
pattern_base += size_t(write_pointer_.row & 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(start) {
|
switch(start) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user