2017-08-29 13:13:56 +00:00
|
|
|
using System;
|
|
|
|
|
|
|
|
namespace BizHawk.Emulation.Common.Components.LR35902
|
|
|
|
{
|
|
|
|
public partial class LR35902
|
|
|
|
{
|
|
|
|
private bool iff1;
|
|
|
|
public bool IFF1 { get { return iff1; } set { iff1 = value; } }
|
|
|
|
|
|
|
|
private bool iff2;
|
|
|
|
public bool IFF2 { get { return iff2; } set { iff2 = value; } }
|
|
|
|
|
|
|
|
private bool nonMaskableInterrupt;
|
|
|
|
public bool NonMaskableInterrupt
|
|
|
|
{
|
|
|
|
get { return nonMaskableInterrupt; }
|
|
|
|
set { if (value && !nonMaskableInterrupt) NonMaskableInterruptPending = true; nonMaskableInterrupt = value; }
|
|
|
|
}
|
|
|
|
|
|
|
|
private bool nonMaskableInterruptPending;
|
|
|
|
public bool NonMaskableInterruptPending { get { return nonMaskableInterruptPending; } set { nonMaskableInterruptPending = value; } }
|
|
|
|
|
|
|
|
private int interruptMode;
|
|
|
|
public int InterruptMode
|
|
|
|
{
|
|
|
|
get { return interruptMode; }
|
|
|
|
set { if (value < 0 || value > 2) throw new ArgumentOutOfRangeException(); interruptMode = value; }
|
|
|
|
}
|
|
|
|
|
2017-11-19 00:45:11 +00:00
|
|
|
private void INTERRUPT_()
|
2017-08-29 13:13:56 +00:00
|
|
|
{
|
|
|
|
cur_instr = new ushort[]
|
|
|
|
{IDLE,
|
|
|
|
IDLE,
|
|
|
|
IDLE,
|
|
|
|
IDLE,
|
|
|
|
IDLE,
|
|
|
|
DEC16, SPl, SPh,
|
|
|
|
IDLE,
|
|
|
|
WR, SPl, SPh, PCh,
|
|
|
|
IDLE,
|
2017-11-19 14:30:18 +00:00
|
|
|
INT_GET, W,// NOTE: here is where we check for a cancelled IRQ
|
|
|
|
DEC16, SPl, SPh,
|
2017-08-29 13:13:56 +00:00
|
|
|
WR, SPl, SPh, PCl,
|
|
|
|
IDLE,
|
|
|
|
IDLE,
|
2017-11-19 14:30:18 +00:00
|
|
|
IDLE,
|
|
|
|
IDLE,
|
2017-11-19 00:45:11 +00:00
|
|
|
TR, PCl, W,
|
2017-08-29 13:13:56 +00:00
|
|
|
ASGN, PCh, 0,
|
|
|
|
IDLE,
|
|
|
|
OP };
|
|
|
|
}
|
|
|
|
|
2017-11-19 00:45:11 +00:00
|
|
|
private static ushort[] INT_vectors = new ushort[] {0x40, 0x48, 0x50, 0x58, 0x60, 0x00};
|
|
|
|
|
|
|
|
public ushort int_src;
|
2017-08-29 13:13:56 +00:00
|
|
|
|
|
|
|
private void ResetInterrupts()
|
|
|
|
{
|
|
|
|
IFF1 = false;
|
|
|
|
IFF2 = false;
|
|
|
|
NonMaskableInterrupt = false;
|
|
|
|
NonMaskableInterruptPending = false;
|
|
|
|
InterruptMode = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|