mirror of https://github.com/stella-emu/stella.git
Even more accurate RESMx.
This commit is contained in:
parent
990fac5895
commit
94292bbbd1
|
@ -67,7 +67,7 @@ void Missile::hmm(uInt8 value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void Missile::resm(uInt8 counter)
|
void Missile::resm(uInt8 counter, uInt32 hctr)
|
||||||
{
|
{
|
||||||
myCounter = counter;
|
myCounter = counter;
|
||||||
|
|
||||||
|
@ -76,26 +76,34 @@ void Missile::resm(uInt8 counter)
|
||||||
myRenderCounter = Count::renderCounterOffset + (counter - 157);
|
myRenderCounter = Count::renderCounterOffset + (counter - 157);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// The following is an effective description of the behavior of missile width after a
|
// The following is an effective description of the behavior of missile width after a
|
||||||
// RESMx during draw. It would be much simpler without the HBLANK cases :)
|
// RESMx during draw. It would be much simpler without the HBLANK cases :)
|
||||||
|
uInt8 delta = 0;
|
||||||
|
bool hblank = counter != 157;
|
||||||
|
|
||||||
|
if (hblank) {
|
||||||
|
if (hctr > 72) delta = 0;
|
||||||
|
else if (hctr > 66) delta = 1;
|
||||||
|
else delta = 2;
|
||||||
|
}
|
||||||
|
|
||||||
switch (myWidth) {
|
switch (myWidth) {
|
||||||
case 8:
|
case 8:
|
||||||
myRenderCounter = (counter - 157) + ((myRenderCounter >= 4) ? 5 : 0);
|
myRenderCounter = delta + ((myRenderCounter >= 4) ? 5 : 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
myRenderCounter = counter - 157;
|
myRenderCounter = delta;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
if (counter != 157) myIsRendering = myRenderCounter > 1;
|
if (hblank) myIsRendering = myRenderCounter > 1;
|
||||||
else if (myRenderCounter == 0) myRenderCounter++;
|
else if (myRenderCounter == 0) myRenderCounter++;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (counter != 157) myIsRendering = myRenderCounter > 0;
|
if (hblank) myIsRendering = myRenderCounter > 0;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ class Missile : public Serializable
|
||||||
void hmm(uInt8 value);
|
void hmm(uInt8 value);
|
||||||
uInt32 hmm() const { return myHmmClocks; }
|
uInt32 hmm() const { return myHmmClocks; }
|
||||||
|
|
||||||
void resm(uInt8 counter);
|
void resm(uInt8 counter, uInt32 hctr);
|
||||||
|
|
||||||
void resmp(uInt8 value, const Player& player);
|
void resmp(uInt8 value, const Player& player);
|
||||||
bool resmp() const { return bool(myResmp); }
|
bool resmp() const { return bool(myResmp); }
|
||||||
|
|
|
@ -459,12 +459,12 @@ bool TIA::poke(uInt16 address, uInt8 value)
|
||||||
|
|
||||||
case RESM0:
|
case RESM0:
|
||||||
myLinesSinceChange = 0;
|
myLinesSinceChange = 0;
|
||||||
myMissile0.resm(resxCounter());
|
myMissile0.resm(resxCounter(), myHctr);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RESM1:
|
case RESM1:
|
||||||
myLinesSinceChange = 0;
|
myLinesSinceChange = 0;
|
||||||
myMissile1.resm(resxCounter());
|
myMissile1.resm(resxCounter(), myHctr);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RESMP0:
|
case RESMP0:
|
||||||
|
|
Loading…
Reference in New Issue