Files

60 lines
1.1 KiB
C++
Raw Permalink Normal View History

2018-12-16 22:19:06 +01:00
#include "ffe.h"
// Qt includes
#include <QDataStream>
// local includes
#include "nesemulator.h"
Ffe::Ffe(NesEmulator &emu, const Rom &rom) :
Board(emu, rom)
{
}
Ffe::~Ffe()
{
}
void Ffe::writeEx(quint16 address, quint8 value)
{
switch (address)
{
case 0x4501:
m_irqEnable = false;
m_emu.interrupts().removeFlag(Interrupts::IRQ_BOARD);
break;
case 0x4502:
m_irqCounter = (m_irqCounter & 0xFF00) | value;
break;
case 0x4503:
m_irqEnable = true;
m_irqCounter = (m_irqCounter & 0x00FF) | (value << 8);
break;
}
}
void Ffe::onCpuClock()
{
if (m_irqEnable)
{
m_irqCounter++;
if (m_irqCounter >= 0xFFFF)
{
m_irqCounter = 0;
m_emu.interrupts().addFlag(Interrupts::IRQ_BOARD);
}
}
}
void Ffe::readState(QDataStream &dataStream)
{
Board::readState(dataStream);
dataStream >> m_irqEnable >> m_irqCounter;
}
void Ffe::writeState(QDataStream &dataStream) const
{
Board::writeState(dataStream);
dataStream << m_irqEnable << m_irqCounter;
}