1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-12-23 20:29:42 +00:00

Eliminate data_block_ entirely.

This commit is contained in:
Thomas Harte 2023-02-18 21:41:22 -05:00
parent d6e4f12fdc
commit 270c5dfe85
2 changed files with 10 additions and 14 deletions

View File

@ -503,13 +503,14 @@ template<ScreenMode mode> void Base<personality>::fetch_yamaha(LineBuffer &line_
case Type::Name:
switch(mode) {
case ScreenMode::Text: {
const auto column = AddressT(Storage<personality>::data_block_);
const auto column = AddressT(Storage<personality>::next_event_->id << 1);
text_fetcher.fetch_name(column, 0);
text_fetcher.fetch_name(column + 1, 1);
} break;
case ScreenMode::YamahaText80: {
const auto column = AddressT(Storage<personality>::data_block_);
const auto column = AddressT(Storage<personality>::next_event_->id << 2);
const auto start = pattern_name_address_ & bits<12>(AddressT((y >> 3) * 80));
name_[0] = ram_[start + column + 0];
@ -532,7 +533,7 @@ template<ScreenMode mode> void Base<personality>::fetch_yamaha(LineBuffer &line_
case Type::Colour:
switch(mode) {
case ScreenMode::YamahaText80: {
const auto column = AddressT(Storage<personality>::data_block_ >> 3);
const auto column = AddressT(Storage<personality>::next_event_->id);
const auto address = colour_table_address_ & bits<9>(AddressT((y >> 3) * 10));
line_buffer.characters.flags[column] = ram_[address + column];
} break;
@ -551,18 +552,16 @@ template<ScreenMode mode> void Base<personality>::fetch_yamaha(LineBuffer &line_
case Type::Pattern:
switch(mode) {
case ScreenMode::Text: {
const auto column = AddressT(Storage<personality>::data_block_);
Storage<personality>::data_block_ += 2;
const auto column = AddressT(Storage<personality>::next_event_->id << 1);
text_fetcher.fetch_pattern(column, 0);
text_fetcher.fetch_pattern(column + 1, 1);
} break;
case ScreenMode::YamahaText80: {
const auto column = AddressT(Storage<personality>::data_block_);
Storage<personality>::data_block_ += 4;
const auto column = Storage<personality>::next_event_->id << 2;
const auto start = pattern_generator_table_address_ & bits<11>(AddressT(y & 7));
line_buffer.characters.shapes[column + 0] = ram_[start + AddressT(name_[0] << 3)];
line_buffer.characters.shapes[column + 1] = ram_[start + AddressT(name_[1] << 3)];
line_buffer.characters.shapes[column + 2] = ram_[start + AddressT(name_[2] << 3)];

View File

@ -81,7 +81,6 @@ template <Personality personality> struct Storage<personality, std::enable_if_t<
// State that tracks fetching position within a line.
const Event *next_event_ = nullptr;
int data_block_ = 0;
// Text blink colours.
uint8_t blink_text_colour_ = 0;
@ -97,8 +96,6 @@ template <Personality personality> struct Storage<personality, std::enable_if_t<
/// Resets line-ephemeral state for a new line.
void begin_line(ScreenMode mode, bool is_refresh) {
data_block_ = 0;
if(is_refresh) {
next_event_ = refresh_events.data();
return;
@ -383,9 +380,9 @@ template <Personality personality> struct Storage<personality, std::enable_if_t<
const int sub_block = offset % 48;
switch(sub_block) {
default: break;
case 0: return Event::Type::Name;
case 18: return (block & 1) ? Event::Type::External : Event::Type::Colour;
case 24: return Event::Type::Pattern;
case 0: return Event(Event::Type::Name, uint8_t(block));
case 18: return (block & 1) ? Event::Type::External : Event(Event::Type::Colour, uint8_t(block >> 1));
case 24: return Event(Event::Type::Pattern, uint8_t(block));
}
}