rewrite enam delay for consistency
This commit is contained in:
parent
5e4874a870
commit
9d0d7fa85a
|
@ -287,6 +287,11 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
private byte pf1_max_delay = 0;
|
||||
private byte pf2_max_delay = 0;
|
||||
|
||||
private int enam0_delay = 0;
|
||||
private int enam1_delay = 0;
|
||||
private bool enam0_val = false;
|
||||
private bool enam1_val = false;
|
||||
|
||||
private bool do_ticks = false;
|
||||
private byte _hsyncCnt;
|
||||
private int _capChargeStart;
|
||||
|
@ -444,6 +449,29 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
//delay latch to missile enable
|
||||
if (enam0_delay>0)
|
||||
{
|
||||
enam0_delay++;
|
||||
if (enam0_delay==3)
|
||||
{
|
||||
enam0_delay = 0;
|
||||
_player0.Missile.Enabled = enam0_val;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (enam1_delay > 0)
|
||||
{
|
||||
enam1_delay++;
|
||||
if (enam1_delay == 3)
|
||||
{
|
||||
enam1_delay = 0;
|
||||
_player1.Missile.Enabled = enam1_val;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Reset the RDY flag when we reach hblank
|
||||
if (_hsyncCnt <= 0)
|
||||
{
|
||||
|
@ -1219,36 +1247,13 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
else if (maskedAddr == 0x1D) // ENAM0
|
||||
{
|
||||
if (_player0.Missile.Enabled)
|
||||
{
|
||||
if (((value & 0x02) == 0))
|
||||
{
|
||||
_player0.Missile.Delay2 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
_player0.Missile.Enabled = (value & 0x02) != 0;
|
||||
if (_player0.Missile.Enabled)
|
||||
{
|
||||
_player0.Missile.Delay = 1;
|
||||
}
|
||||
enam0_val = (value & 0x02) != 0;
|
||||
enam0_delay = 1;
|
||||
}
|
||||
else if (maskedAddr == 0x1E) // ENAM1
|
||||
{
|
||||
if (_player1.Missile.Enabled)
|
||||
{
|
||||
if (((value & 0x02) == 0))
|
||||
{
|
||||
_player1.Missile.Delay2 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
_player1.Missile.Enabled = (value & 0x02) != 0;
|
||||
if (_player1.Missile.Enabled)
|
||||
{
|
||||
_player1.Missile.Delay = 1;
|
||||
}
|
||||
|
||||
enam1_val = (value & 0x02) != 0;
|
||||
enam1_delay = 1;
|
||||
}
|
||||
else if (maskedAddr == 0x1F) // ENABL
|
||||
{
|
||||
|
|
|
@ -7,9 +7,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
private struct MissileData
|
||||
{
|
||||
public bool Enabled;
|
||||
public bool Enabled_use;
|
||||
public int Delay;
|
||||
public int Delay2;
|
||||
public bool ResetToPlayer;
|
||||
public byte HPosCnt;
|
||||
public byte Size;
|
||||
|
@ -19,21 +16,12 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
|
||||
public bool Tick()
|
||||
{
|
||||
|
||||
|
||||
var result = false;
|
||||
|
||||
Enabled_use = Enabled;
|
||||
if (Delay2 > 0)
|
||||
{
|
||||
Enabled_use = true;
|
||||
}
|
||||
|
||||
|
||||
// At hPosCnt == 0, start drawing the missile, if enabled
|
||||
if (HPosCnt < (1 << Size))
|
||||
{
|
||||
if (Enabled_use && !ResetToPlayer && Delay == 0)
|
||||
if (Enabled && !ResetToPlayer)
|
||||
{
|
||||
// Draw the missile
|
||||
result = true;
|
||||
|
@ -44,7 +32,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
{
|
||||
if (HPosCnt >= 16 && HPosCnt <= (16 + (1 << Size) - 1))
|
||||
{
|
||||
if (Enabled_use && !ResetToPlayer && Delay == 0)
|
||||
if (Enabled && !ResetToPlayer)
|
||||
{
|
||||
// Draw the missile
|
||||
result = true;
|
||||
|
@ -56,7 +44,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
{
|
||||
if (HPosCnt >= 32 && HPosCnt <= (32 + (1 << Size) - 1))
|
||||
{
|
||||
if (Enabled_use && !ResetToPlayer && Delay == 0)
|
||||
if (Enabled && !ResetToPlayer)
|
||||
{
|
||||
// Draw the missile
|
||||
result = true;
|
||||
|
@ -68,7 +56,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
{
|
||||
if (HPosCnt >= 64 && HPosCnt <= (64 + (1 << Size) - 1))
|
||||
{
|
||||
if (Enabled_use && !ResetToPlayer && Delay == 0)
|
||||
if (Enabled && !ResetToPlayer)
|
||||
{
|
||||
// Draw the missile
|
||||
result = true;
|
||||
|
@ -82,16 +70,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
// Counter loops at 160
|
||||
HPosCnt %= 160;
|
||||
|
||||
if (Delay > 0)
|
||||
{
|
||||
Delay--;
|
||||
}
|
||||
|
||||
if (Delay2 > 0)
|
||||
{
|
||||
Delay2--;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue