From 4a71e48a07479eee53412313ab6a1c3b3deb2719 Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Fri, 10 Mar 2017 09:17:11 +0100 Subject: [PATCH] NUSIZ player improvements. Match NUSIZ during draw / decode and hblank to hardware behavior. --- src/emucore/tia/Player.cxx | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/emucore/tia/Player.cxx b/src/emucore/tia/Player.cxx index d2936fe92..64a67890c 100644 --- a/src/emucore/tia/Player.cxx +++ b/src/emucore/tia/Player.cxx @@ -109,21 +109,30 @@ void Player::nusiz(uInt8 value, bool hblank) // decode and rendering. if (myIsRendering) { + Int8 delta = myRenderCounter - Count::renderCounterOffset; switch ((myDivider << 4) | myDividerPending) { case 0x12: case 0x14: - if ((myRenderCounter - Count::renderCounterOffset) < 3) - setDivider(myDividerPending); - else - myDividerChangeCounter = 1; + if (hblank) { + if (delta < 4) + setDivider(myDividerPending); + else + myDividerChangeCounter = (delta < 5 ? 1 : 0); + } else { + if (delta < 3) + setDivider(myDividerPending); + else + myDividerChangeCounter = 1; + } + break; case 0x21: case 0x41: - if ((myRenderCounter - Count::renderCounterOffset) < (hblank ? 4 : 3)) { + if (delta < (hblank ? 4 : 3)) { setDivider(myDividerPending); - } else if ((myRenderCounter - Count::renderCounterOffset) < (hblank ? 6 : 5)) { + } else if (delta < (hblank ? 6 : 5)) { setDivider(myDividerPending); myRenderCounter--; } else {