diff --git a/Machines/Amiga/Chipset.cpp b/Machines/Amiga/Chipset.cpp index f9631f1f9..01be6c3a7 100644 --- a/Machines/Amiga/Chipset.cpp +++ b/Machines/Amiga/Chipset.cpp @@ -63,6 +63,13 @@ void Chipset::perform(const CPU::MC68000::Microcycle &cycle) { cycle.set_value16(position); } break; + case Write(0x02a): + LOG("TODO: write vertical position high " << PADHEX(4) << cycle.value16()); + break; + case Write(0x02c): + LOG("TODO: write vertical position low " << PADHEX(4) << cycle.value16()); + break; + // Disk DMA. case Write(0x020): case Write(0x022): case Write(0x024): case Write(0x026): @@ -104,6 +111,29 @@ void Chipset::perform(const CPU::MC68000::Microcycle &cycle) { LOG("Interrupt request modified by " << PADHEX(4) << cycle.value16() << "; is now " << std::bitset<16>{interrupt_requests_}); break; + // Display management. + case Write(0x08e): { + const uint16_t value = cycle.value16(); + display_window_start_[0] = value & 0xff; + display_window_start_[1] = value >> 8; + LOG("Display window start set to " << std::dec << display_window_start_[0] << ", " << display_window_start_[1]); + } break; + case Write(0x090): { + const uint16_t value = cycle.value16(); + display_window_stop_[0] = 0x100 | (value & 0xff); + display_window_stop_[1] = value >> 8; + display_window_stop_[1] |= ((value >> 7) & 0x100) ^ 0x100; + LOG("Display window stop set to " << std::dec << display_window_stop_[0] << ", " << display_window_stop_[1]); + } break; + case Write(0x092): + fetch_window_[0] = uint16_t((cycle.value16() & 0xfc) << 1); + LOG("Fetch window start set to " << std::dec << fetch_window_[0]); + break; + case Write(0x094): + fetch_window_[1] = uint16_t((cycle.value16() & 0xfc) << 1); + LOG("Fetch window stop set to " << std::dec << fetch_window_[1]); + break; + // Bitplanes. case Write(0x100): case Write(0x102): diff --git a/Machines/Amiga/Chipset.hpp b/Machines/Amiga/Chipset.hpp index 347b08948..31aec88f7 100644 --- a/Machines/Amiga/Chipset.hpp +++ b/Machines/Amiga/Chipset.hpp @@ -60,6 +60,10 @@ class Chipset { int x_ = 0, y_ = 0; int line_length_ = 227; + + uint16_t display_window_start_[2] = {0, 0}; + uint16_t display_window_stop_[2] = {0, 0}; + uint16_t fetch_window_[2] = {0, 0}; }; }