1
0
mirror of https://github.com/TomHarte/CLK.git synced 2025-02-02 01:31:15 +00:00

Ensure Master System horizontal scroll is latched every line.

This commit is contained in:
Thomas Harte 2024-01-21 17:09:51 -05:00
parent 789c4a080f
commit 295d5ae0c3

View File

@ -222,13 +222,13 @@ void TMS9918<personality>::run_for(const HalfCycles cycles) {
// Latch scrolling position, if necessary. // Latch scrolling position, if necessary.
// --------------------------------------- // ---------------------------------------
if constexpr (is_sega_vdp(personality)) { if constexpr (is_sega_vdp(personality)) {
if(!this->fetch_pointer_.row) { // TODO: where did this magic constant come from? https://www.smspower.org/forums/17970-RoadRashHow#111000 mentioned in passing
// TODO: where did this magic constant come from? https://www.smspower.org/forums/17970-RoadRashHow#111000 mentioned in passing // that "the vertical scroll register is latched at the start of the active display" and this is two clocks before that, so it's
// that "the vertical scroll register is latched at the start of the active display" and this is two clocks before that, so it's // not uncompelling. I can just no longer find my source.
// not uncompelling. I can just no longer find my source. constexpr auto latch_time = LineLayout<personality>::EndOfLeftBorder - 2;
constexpr auto latch_time = LineLayout<personality>::EndOfLeftBorder - 2; static_assert(latch_time > 0);
static_assert(latch_time > 0); if(this->fetch_pointer_.column < latch_time && end_column >= latch_time) {
if(this->fetch_pointer_.column < latch_time && end_column >= latch_time) { if(!this->fetch_pointer_.row) {
Storage<personality>::latched_vertical_scroll_ = Storage<personality>::vertical_scroll_; Storage<personality>::latched_vertical_scroll_ = Storage<personality>::vertical_scroll_;
if(Storage<personality>::mode4_enable_) { if(Storage<personality>::mode4_enable_) {