mirror of
https://github.com/TomHarte/CLK.git
synced 2024-09-29 16:55:59 +00:00
Implements horizontal scrolling lock.
This commit is contained in:
parent
05248ab990
commit
de4e5c40aa
@ -647,7 +647,7 @@ void Base::draw_tms_text(int start, int end) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Base::draw_sms(int start, int end) {
|
void Base::draw_sms(int start, int end) {
|
||||||
if(!start) {
|
if(!start && (row_ >= 16 || !master_system_.horizontal_scroll_lock)) {
|
||||||
pixel_target_ += master_system_.horizontal_scroll & 7;
|
pixel_target_ += master_system_.horizontal_scroll & 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -655,7 +655,9 @@ void Base::draw_sms(int start, int end) {
|
|||||||
int byte_column = start >> 3;
|
int byte_column = start >> 3;
|
||||||
int pixels_left = end - start;
|
int pixels_left = end - start;
|
||||||
int length = std::min(pixels_left, 8 - shift);
|
int length = std::min(pixels_left, 8 - shift);
|
||||||
|
|
||||||
uint32_t pattern = *reinterpret_cast<uint32_t *>(master_system_.tile_graphics[byte_column]);
|
uint32_t pattern = *reinterpret_cast<uint32_t *>(master_system_.tile_graphics[byte_column]);
|
||||||
|
uint8_t *const pattern_index = reinterpret_cast<uint8_t *>(&pattern);
|
||||||
|
|
||||||
if(master_system_.names[byte_column].flags&2)
|
if(master_system_.names[byte_column].flags&2)
|
||||||
pattern >>= shift;
|
pattern >>= shift;
|
||||||
@ -664,25 +666,25 @@ void Base::draw_sms(int start, int end) {
|
|||||||
|
|
||||||
while(true) {
|
while(true) {
|
||||||
pixels_left -= length;
|
pixels_left -= length;
|
||||||
const uint32_t palette_offset = static_cast<uint32_t>((master_system_.names[byte_column].flags&0x08) << 1);
|
const int palette_offset = (master_system_.names[byte_column].flags&0x08) << 1;
|
||||||
if(master_system_.names[byte_column].flags&2) {
|
if(master_system_.names[byte_column].flags&2) {
|
||||||
for(int c = 0; c < length; ++c) {
|
for(int c = 0; c < length; ++c) {
|
||||||
const uint32_t value =
|
const int value =
|
||||||
((pattern & 0x00000001) >> 0) |
|
((pattern_index[3] & 0x01) << 3) |
|
||||||
((pattern & 0x00000100) >> 6) |
|
((pattern_index[2] & 0x01) << 2) |
|
||||||
((pattern & 0x00010000) >> 15) |
|
((pattern_index[1] & 0x01) << 1) |
|
||||||
((pattern & 0x01000000) >> 24) |
|
((pattern_index[0] & 0x01) << 0) |
|
||||||
palette_offset;
|
palette_offset;
|
||||||
pixel_target_[c] = master_system_.colour_ram[value];
|
pixel_target_[c] = master_system_.colour_ram[value];
|
||||||
pattern >>= 1;
|
pattern >>= 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for(int c = 0; c < length; ++c) {
|
for(int c = 0; c < length; ++c) {
|
||||||
const uint32_t value =
|
const int value =
|
||||||
((pattern & 0x00000080) >> 7) |
|
((pattern_index[3] & 0x80) >> 4) |
|
||||||
((pattern & 0x00008000) >> 14) |
|
((pattern_index[2] & 0x80) >> 5) |
|
||||||
((pattern & 0x00800000) >> 21) |
|
((pattern_index[1] & 0x80) >> 6) |
|
||||||
((pattern & 0x80000000) >> 28) |
|
((pattern_index[0] & 0x80) >> 7) |
|
||||||
palette_offset;
|
palette_offset;
|
||||||
pixel_target_[c] = master_system_.colour_ram[value];
|
pixel_target_[c] = master_system_.colour_ram[value];
|
||||||
pattern <<= 1;
|
pattern <<= 1;
|
||||||
|
@ -597,7 +597,7 @@ class Base {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define fetch_tile_name(column) {\
|
#define fetch_tile_name(column) {\
|
||||||
const size_t scrolled_column = (column - (master_system_.horizontal_scroll >> 3)) & 0x1f;\
|
const size_t scrolled_column = (column - horizontal_offset) & 0x1f;\
|
||||||
const size_t address = pattern_address_base + (scrolled_column << 1); \
|
const size_t address = pattern_address_base + (scrolled_column << 1); \
|
||||||
master_system_.names[column].flags = ram_[address+1]; \
|
master_system_.names[column].flags = ram_[address+1]; \
|
||||||
master_system_.names[column].offset = static_cast<size_t>( \
|
master_system_.names[column].offset = static_cast<size_t>( \
|
||||||
@ -634,6 +634,7 @@ class Base {
|
|||||||
const int scrolled_row = (row_ + master_system_.vertical_scroll) % 224;
|
const int scrolled_row = (row_ + master_system_.vertical_scroll) % 224;
|
||||||
const size_t pattern_address_base = (pattern_name_address_ | size_t(0x3ff)) & static_cast<size_t>(((scrolled_row & ~7) << 3) | 0x3800);
|
const size_t pattern_address_base = (pattern_name_address_ | size_t(0x3ff)) & static_cast<size_t>(((scrolled_row & ~7) << 3) | 0x3800);
|
||||||
const size_t sub_row[2] = {static_cast<size_t>((scrolled_row & 7) << 2), 28 ^ static_cast<size_t>((scrolled_row & 7) << 2)};
|
const size_t sub_row[2] = {static_cast<size_t>((scrolled_row & 7) << 2), 28 ^ static_cast<size_t>((scrolled_row & 7) << 2)};
|
||||||
|
const int horizontal_offset = (row_ >= 16 || !master_system_.horizontal_scroll_lock) ? (master_system_.horizontal_scroll >> 3) : 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
To add, relative to the times below:
|
To add, relative to the times below:
|
||||||
|
Loading…
Reference in New Issue
Block a user