mirror of https://github.com/stella-emu/stella.git
Fix buggy blanking of line 0.
This commit is contained in:
parent
861778f627
commit
cf55f5d413
|
@ -67,11 +67,13 @@ FrameManager::FrameManager()
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameManager::setHandlers(
|
void FrameManager::setHandlers(
|
||||||
FrameManager::callback frameStartCallback,
|
FrameManager::callback frameStartCallback,
|
||||||
FrameManager::callback frameCompleteCallback
|
FrameManager::callback frameCompleteCallback,
|
||||||
|
FrameManager::callback renderingStartCallback
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
myOnFrameStart = frameStartCallback;
|
myOnFrameStart = frameStartCallback;
|
||||||
myOnFrameComplete = frameCompleteCallback;
|
myOnFrameComplete = frameCompleteCallback;
|
||||||
|
myOnRenderingStart = renderingStartCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -199,6 +201,7 @@ void FrameManager::setState(FrameManager::State state)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case State::frame:
|
case State::frame:
|
||||||
|
if (myOnRenderingStart) myOnRenderingStart();
|
||||||
myVsyncLines = 0;
|
myVsyncLines = 0;
|
||||||
myY = 0;
|
myY = 0;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -39,7 +39,11 @@ class FrameManager : public Serializable
|
||||||
|
|
||||||
static uInt8 initialGarbageFrames();
|
static uInt8 initialGarbageFrames();
|
||||||
|
|
||||||
void setHandlers(callback frameStartCallback, callback frameCompletionCallback);
|
void setHandlers(
|
||||||
|
callback frameStartCallback,
|
||||||
|
callback frameCompletionCallback,
|
||||||
|
callback renderingStartCallback
|
||||||
|
);
|
||||||
|
|
||||||
void reset();
|
void reset();
|
||||||
|
|
||||||
|
@ -136,6 +140,7 @@ class FrameManager : public Serializable
|
||||||
|
|
||||||
callback myOnFrameStart;
|
callback myOnFrameStart;
|
||||||
callback myOnFrameComplete;
|
callback myOnFrameComplete;
|
||||||
|
callback myOnRenderingStart;
|
||||||
|
|
||||||
VblankManager myVblankManager;
|
VblankManager myVblankManager;
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,9 @@ TIA::TIA(Console& console, Sound& sound, Settings& settings)
|
||||||
},
|
},
|
||||||
[this] () {
|
[this] () {
|
||||||
onFrameComplete();
|
onFrameComplete();
|
||||||
|
},
|
||||||
|
[this] () {
|
||||||
|
onRenderingStart();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -123,6 +126,7 @@ void TIA::reset()
|
||||||
myLastCycle = 0;
|
myLastCycle = 0;
|
||||||
mySubClock = 0;
|
mySubClock = 0;
|
||||||
myXDelta = 0;
|
myXDelta = 0;
|
||||||
|
myXAtRenderingStart = 0;
|
||||||
|
|
||||||
memset(myShadowRegisters, 0, 64);
|
memset(myShadowRegisters, 0, 64);
|
||||||
|
|
||||||
|
@ -986,10 +990,7 @@ void TIA::updateEmulation()
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void TIA::onFrameStart()
|
void TIA::onFrameStart()
|
||||||
{
|
{
|
||||||
const Int32 x = myHctr - 68;
|
myXAtRenderingStart = 0;
|
||||||
|
|
||||||
if (x > 0)
|
|
||||||
memset(myFramebuffer.get(), 0, x);
|
|
||||||
|
|
||||||
for (uInt8 i = 0; i < 4; i++)
|
for (uInt8 i = 0; i < 4; i++)
|
||||||
updatePaddle(i);
|
updatePaddle(i);
|
||||||
|
@ -1014,12 +1015,21 @@ void TIA::onFrameStart()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void TIA::onRenderingStart()
|
||||||
|
{
|
||||||
|
myXAtRenderingStart = myHctr > 68 ? myHctr - 68 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void TIA::onFrameComplete()
|
void TIA::onFrameComplete()
|
||||||
{
|
{
|
||||||
mySystem->m6502().stop();
|
mySystem->m6502().stop();
|
||||||
mySystem->resetCycles();
|
mySystem->resetCycles();
|
||||||
|
|
||||||
|
if (myXAtRenderingStart > 0)
|
||||||
|
memset(myFramebuffer.get(), 0, myXAtRenderingStart);
|
||||||
|
|
||||||
// Blank out any extra lines not drawn this frame
|
// Blank out any extra lines not drawn this frame
|
||||||
const uInt32 missingScanlines = myFrameManager.missingScanlines();
|
const uInt32 missingScanlines = myFrameManager.missingScanlines();
|
||||||
if (missingScanlines > 0)
|
if (missingScanlines > 0)
|
||||||
|
|
|
@ -396,6 +396,8 @@ class TIA : public Device
|
||||||
|
|
||||||
void onFrameStart();
|
void onFrameStart();
|
||||||
|
|
||||||
|
void onRenderingStart();
|
||||||
|
|
||||||
void onFrameComplete();
|
void onFrameComplete();
|
||||||
|
|
||||||
void onHalt();
|
void onHalt();
|
||||||
|
@ -477,6 +479,7 @@ class TIA : public Device
|
||||||
Int32 myHblankCtr;
|
Int32 myHblankCtr;
|
||||||
Int32 myHctr;
|
Int32 myHctr;
|
||||||
uInt32 myXDelta;
|
uInt32 myXDelta;
|
||||||
|
uInt32 myXAtRenderingStart;
|
||||||
|
|
||||||
bool myCollisionUpdateRequired;
|
bool myCollisionUpdateRequired;
|
||||||
uInt32 myCollisionMask;
|
uInt32 myCollisionMask;
|
||||||
|
|
Loading…
Reference in New Issue