C64: Try counting IRQ and BA correctly
This commit is contained in:
parent
f22c9b7abd
commit
db38d5e65b
|
@ -214,7 +214,6 @@
|
||||||
_intSpriteCollision = false;
|
_intSpriteCollision = false;
|
||||||
if ((val & 0x08) != 0)
|
if ((val & 0x08) != 0)
|
||||||
_intLightPen = false;
|
_intLightPen = false;
|
||||||
UpdatePins();
|
|
||||||
break;
|
break;
|
||||||
case 0x1E:
|
case 0x1E:
|
||||||
case 0x1F:
|
case 0x1F:
|
||||||
|
@ -358,14 +357,12 @@
|
||||||
_intSpriteDataCollision = (val & 0x02) != 0;
|
_intSpriteDataCollision = (val & 0x02) != 0;
|
||||||
_intSpriteCollision = (val & 0x04) != 0;
|
_intSpriteCollision = (val & 0x04) != 0;
|
||||||
_intLightPen = (val & 0x08) != 0;
|
_intLightPen = (val & 0x08) != 0;
|
||||||
UpdatePins();
|
|
||||||
break;
|
break;
|
||||||
case 0x1A:
|
case 0x1A:
|
||||||
_enableIntRaster = (val & 0x01) != 0;
|
_enableIntRaster = (val & 0x01) != 0;
|
||||||
_enableIntSpriteDataCollision = (val & 0x02) != 0;
|
_enableIntSpriteDataCollision = (val & 0x02) != 0;
|
||||||
_enableIntSpriteCollision = (val & 0x04) != 0;
|
_enableIntSpriteCollision = (val & 0x04) != 0;
|
||||||
_enableIntLightPen = (val & 0x08) != 0;
|
_enableIntLightPen = (val & 0x08) != 0;
|
||||||
UpdatePins();
|
|
||||||
break;
|
break;
|
||||||
case 0x1B:
|
case 0x1B:
|
||||||
_sprite0.Priority = (val & 0x01) != 0;
|
_sprite0.Priority = (val & 0x01) != 0;
|
||||||
|
|
|
@ -26,7 +26,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS
|
||||||
|
|
||||||
public bool ReadAec() { return _pinAec; }
|
public bool ReadAec() { return _pinAec; }
|
||||||
public bool ReadBa() { return _pinBa; }
|
public bool ReadBa() { return _pinBa; }
|
||||||
public bool ReadIrq() { return (_irqBuffer & 1) != 0; }
|
public bool ReadIrq() { return (_irqBuffer & 1) == 0; }
|
||||||
|
|
||||||
private readonly int _cyclesPerSec;
|
private readonly int _cyclesPerSec;
|
||||||
private readonly int[] _rasterXPipeline;
|
private readonly int[] _rasterXPipeline;
|
||||||
|
@ -320,7 +320,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS
|
||||||
{
|
{
|
||||||
if (_ba)
|
if (_ba)
|
||||||
_baCount = BaResetCounter;
|
_baCount = BaResetCounter;
|
||||||
else if (_baCount >= 0)
|
else if (_baCount > 0)
|
||||||
_baCount--;
|
_baCount--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,16 +334,16 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS
|
||||||
|
|
||||||
private void UpdatePins()
|
private void UpdatePins()
|
||||||
{
|
{
|
||||||
var irqTemp = !(
|
var irqTemp =
|
||||||
(_enableIntRaster & _intRaster) |
|
(_enableIntRaster & _intRaster) |
|
||||||
(_enableIntSpriteDataCollision & _intSpriteDataCollision) |
|
(_enableIntSpriteDataCollision & _intSpriteDataCollision) |
|
||||||
(_enableIntSpriteCollision & _intSpriteCollision) |
|
(_enableIntSpriteCollision & _intSpriteCollision) |
|
||||||
(_enableIntLightPen & _intLightPen));
|
(_enableIntLightPen & _intLightPen);
|
||||||
|
|
||||||
// IRQ buffer is treated as a delay line
|
// IRQ buffer is treated as a delay line
|
||||||
_irqBuffer >>= 1;
|
_irqBuffer >>= 1;
|
||||||
_irqBuffer |= irqTemp ? 0x1 : 0;
|
_irqBuffer |= irqTemp ? 0x8 : 0;
|
||||||
_pinAec = _ba || _baCount >= 0;
|
_pinAec = _ba || _baCount > 0;
|
||||||
_pinBa = _ba;
|
_pinBa = _ba;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue