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; } }
void X6502_DMW(uint32 A, uint8 V) { ADDCYC(1); BWrite[A](A,V); #ifdef _S9XLUA_H CallRegisteredLuaMemHook(A, 1, V, LUAMEMHOOK_WRITE); #endif }
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_DMW(uint32 A, uint8 V) { ADDCYC(1); BWrite[A](A,V); }
uint8 X6502_DMR(uint32 A) { ADDCYC(1); return(X.DB=ARead[A](A)); }
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); } }
void FASTAPASS(1) X6502_AddCycles_c(int x) { ADDCYC(x); }
void FASTAPASS(2) X6502_DMW(uint32 A, uint8 V) { ADDCYC(1); BWrite[A](A, V); }
uint8 FASTAPASS(1) X6502_DMR(uint32 A) { ADDCYC(1); return(X.DB = ARead[A](A)); }