Files
DbNesEmulator/nescorelib/emu/cpu.h
T

115 lines
3.3 KiB
C++

#pragma once
#include "nescorelib_global.h"
// Qt includes
#include <QtGlobal>
// forward declarations
class NesEmulator;
class QDataStream;
class NESCORELIB_EXPORT Cpu
{
union CpuRegister
{
quint16 v;
struct {
quint8 l;
quint8 h;
};
};
public:
explicit Cpu(NesEmulator &emu);
quint8 getRegisterP() const;
void setRegisterP(const quint8 value);
quint8 getRegisterPb() const;
void clock();
void hardReset();
void softReset();
void interrupt();
void branch(const bool condition);
void push(const quint8 value);
quint8 _pull();
quint8 pull();
void writeState(QDataStream &dataStream) const;
void readState(QDataStream &dataStream);
bool suspendNmi() const;
bool suspendIrq() const;
bool flagI() const;
bool nmiPin() const;
void setNmiPin(bool nmiPin);
bool irqPin() const;
void setIrqPin(bool irqPin);
private:
// addressing modes
void imp____(); void zpgX_r_(); void abs_rw_();
void indX_r_(); void zpgX_w_(); void absX_r_();
void indX_w_(); void zpgX_rw(); void absX_w_();
void indX_rw(); void zpgY_r_(); void absX_rw();
void indY_r_(); void zpgY_w_(); void absY_r_();
void indY_w_(); void zpgY_rw(); void absY_w_();
void indY_rw(); void imm____(); void absY_rw();
void zpg_r__(); void imA____();
void zpg_w__(); void abs_r__();
void zpg_rw_(); void abs_w__();
// instructions
void adc__(); void clc__(); void lax__(); void sax__();
void ahc__(); void cld__(); void lda__(); void sdc__();
void alr__(); void clv__(); void ldx__(); void sec__();
void anc__(); void cmp__(); void ldy__(); void sei__();
void and__(); void cpx__(); void lsr_a(); void shx__();
void arr__(); void cpy__(); void lsr_m(); void shy__();
void axs__(); void cli__(); void nop__(); void slo__();
void asl_m(); void dcp__(); void ora__(); void sre__();
void asl_a(); void dec__(); void pha__(); void sta__();
void bcc__(); void dey__(); void php__(); void stx__();
void bcs__(); void dex__(); void pla__(); void sty__();
void beq__(); void eor__(); void plp__(); void tax__();
void bit__(); void inc__(); void rla__(); void tay__();
void brk__(); void inx__(); void rol_a(); void tsx__();
void bpl__(); void iny__(); void rol_m(); void txa__();
void bne__(); void isc__(); void ror_a(); void txs__();
void bmi__(); void jmp__(); void ror_m(); void tya__();
void bvm__(); void jmp_i(); void rra__(); void xaa__();
void bvs__(); void jsr__(); void rti__(); void xas__();
void sed__(); void lar__(); void rts__();
NesEmulator &m_emu;
CpuRegister m_regPc {};
CpuRegister m_regSp {};
CpuRegister m_regEa {};
quint8 m_regA {};
quint8 m_regX {};
quint8 m_regY {};
//flags
bool m_flagN {};
bool m_flagV {};
bool m_flagD {};
bool m_flagI {};
bool m_flagZ {};
bool m_flagC {};
quint8 m_m {};
quint8 m_opcode {};
bool m_irqPin {};
bool m_nmiPin {};
bool m_suspendNmi {};
bool m_suspendIrq {};
};