54 lines
1.4 KiB
C++
54 lines
1.4 KiB
C++
#ifndef MOS6502X_H
|
|
#define MOS6502X_H
|
|
|
|
#include "ints.h"
|
|
|
|
class MOS6502X
|
|
{
|
|
public:
|
|
bool BCD_Enabled;
|
|
bool debug;
|
|
bool throw_unhandled;
|
|
|
|
byte A;
|
|
byte X;
|
|
byte Y;
|
|
byte P;
|
|
ushort PC;
|
|
byte S;
|
|
|
|
bool IRQ;
|
|
bool NMI;
|
|
|
|
int TotalExecutedCycles;
|
|
|
|
byte (__cdecl *ReadMemory)(ushort);
|
|
byte (__cdecl *DummyReadMemory)(ushort);
|
|
void (__cdecl *WriteMemory)(ushort, byte);
|
|
|
|
//opcode bytes.. theoretically redundant with the temp variables? who knows.
|
|
int opcode;
|
|
byte opcode2, opcode3;
|
|
|
|
int ea, alu_temp; //cpu internal temp variables
|
|
int mi; //microcode index
|
|
bool iflag_pending; //iflag must be stored after it is checked in some cases (CLI and SEI).
|
|
|
|
//tracks whether an interrupt condition has popped up recently.
|
|
//not sure if this is real or not but it helps with the branch_irq_hack
|
|
bool interrupt_pending;
|
|
bool branch_irq_hack; //see Uop.RelBranch_Stage3 for more details
|
|
|
|
|
|
__declspec(dllexport) void ExecuteOne();
|
|
void FetchDummy();
|
|
__declspec(dllexport) void Reset();
|
|
__declspec(dllexport) void NESSoftReset();
|
|
__declspec(dllexport) void SetTrampolines(byte (__cdecl *ReadMemory)(ushort), byte (__cdecl *DummyReadMemory)(ushort), void (__cdecl *WriteMemory)(ushort, byte));
|
|
};
|
|
|
|
extern "C" __declspec(dllexport) void* __cdecl Create();
|
|
extern "C" __declspec(dllexport) void __cdecl Destroy(void *);
|
|
|
|
#endif // MOS6502X_H
|