void X6502_Run(int32 cycles) { if(PAL) cycles*=15; // 15*4=60 else cycles*=16; // 16*4=64 _count+=cycles; extern int test; test++; while(_count>0) { int32 temp; uint8 b1; if(_IRQlow) { if(_IRQlow&FCEU_IQRESET) { DEBUG( if(debug_loggingCD) LogCDVectors(0xFFFC); ) _PC=RdMem(0xFFFC); _PC|=RdMem(0xFFFD)<<8; _jammed=0; _PI=_P=I_FLAG; _IRQlow&=~FCEU_IQRESET; } else if(_IRQlow&FCEU_IQNMI2)
/** * Initializes the 6502 CPU **/ void X6502_Init(void) { unsigned int i; // Initialize the CPU structure memset((void *)&X,0,sizeof(X)); _PC=RdMem(0xFFFC); _PC|=RdMem(0xFFFD)<<8; _jammed=0; _PI=_P=Z_FLAG | U_FLAG; _S=0xFF; for(i = 0; i < sizeof(ZNTable); i++) { if(!i) { ZNTable[i] = Z_FLAG; } else if ( i & 0x80 ) { ZNTable[i] = N_FLAG; } else { ZNTable[i] = 0; } } }
static INLINE uint8 RdRAM(unsigned int A) { //bbit edited: this was changed so cheat substituion would work //return(_DB=ARead[A](A)); // return(_DB=RAM[A]); return RdMem(A); }
static void TriggerNMIReal(void) { if(!_jammed) { dprintf("NMI"); ADDCYC(7); PUSH(_PC>>8); PUSH(_PC); _P&=~B_FLAG; PUSH(_P|U_FLAG); _PC=RdMem(0xFFFA); _PC|=RdMem(0xFFFB)<<8; #ifdef DEBUG_ASM_6502 PC_prev = _PC; OP_prev = 0x100; #endif }
void X6502_Run(int32 cycles) { uint8 b1; _PI=_P; b1=RdMem(_PC); _PC++; switch(b1) { #include "ops.inc" } // } }
static void X6502_RunDebug(int32 cycles) { #define RdRAM RdMemHook #define WrRAM WrMemHook #define RdMem RdMemHook #define WrMem WrMemHook if (PAL) cycles *= 15; /* 15*4=60 */ else cycles *= 16; /* 16*4=64 */ _count += cycles; while (_count > 0) { int32 temp; uint8 b1; if (_IRQlow) { if (_IRQlow & FCEU_IQRESET) { _PC = RdMem(0xFFFC); _PC |= RdMem(0xFFFD) << 8; _jammed = 0; _PI = _P = I_FLAG; _IRQlow &= ~FCEU_IQRESET; } else if (_IRQlow & FCEU_IQNMI2) { _IRQlow &= ~FCEU_IQNMI2; _IRQlow |= FCEU_IQNMI; } else if (_IRQlow & FCEU_IQNMI) { if (!_jammed) { ADDCYC(7); PUSH(_PC >> 8); PUSH(_PC); PUSH((_P & ~B_FLAG) | (U_FLAG)); _P |= I_FLAG; _PC = RdMem(0xFFFA); _PC |= RdMem(0xFFFB) << 8; _IRQlow &= ~FCEU_IQNMI; } } else { if (!(_PI & I_FLAG) && !_jammed) { ADDCYC(7); PUSH(_PC >> 8); PUSH(_PC); PUSH((_P & ~B_FLAG) | (U_FLAG)); _P |= I_FLAG; _PC = RdMem(0xFFFE); _PC |= RdMem(0xFFFF) << 8; } }
static void X6502_RunDebug(int32 cycles) { #define RdMem RdMemHook #define WrMem WrMemHook #define ADDBT(x) NESDBG_AddBranchTrace(x) if(PAL) cycles*=15; // 15*4=60 else cycles*=16; // 16*4=64 _count+=cycles; PenguinPower: while(_count>0) { int32 temp; uint8 b1; if(_IRQlow && !X.cpoint) // Don't run IRQ stuff if we weren't here in a save state { if(_IRQlow&MDFN_IQRESET) { _PC=RdMem(0xFFFC); _PC|=RdMem(0xFFFD)<<8; ADDBT(_PC); _jammed=0; _PI=_P=I_FLAG; _IRQlow&=~MDFN_IQRESET; } else if(_IRQlow&MDFN_IQNMI2) { _IRQlow&=~MDFN_IQNMI2; _IRQlow|=MDFN_IQNMI; } else if(_IRQlow&MDFN_IQNMI) { if(!_jammed) { ADDCYC(7); PUSH(_PC>>8); PUSH(_PC); PUSH((_P&~B_FLAG)|(U_FLAG)); _P|=I_FLAG; _PC=RdMem(0xFFFA); _PC|=RdMem(0xFFFB)<<8; ADDBT(_PC); _IRQlow&=~MDFN_IQNMI; } } else { if(!(_PI&I_FLAG) && !_jammed) { ADDCYC(7); PUSH(_PC>>8); PUSH(_PC); PUSH((_P&~B_FLAG)|(U_FLAG)); _P|=I_FLAG; _PC=RdMem(0xFFFE); _PC|=RdMem(0xFFFF)<<8; ADDBT(_PC); } }