diff --git a/src/debug.cpp b/src/debug.cpp index dbde6a31..3a1e2d2c 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -533,35 +533,36 @@ void IncrementInstructionsCounters() delta_instructions++; } -void BreakHit(int bp_num, bool force) -{ - if(!force) +bool CondForbidTest(int bp_num) { + if (bp_num >= 0 && !condition(&watchpoint[bp_num])) { - if (bp_num >= 0 && !condition(&watchpoint[bp_num])) - { - return; // condition rejected - } + return false; // condition rejected + } - //check to see whether we fall in any forbid zone - for (int i = 0; i < numWPs; i++) - { - watchpointinfo& wp = watchpoint[i]; - if(!(wp.flags & WP_F) || !(wp.flags & WP_E)) - continue; + //check to see whether we fall in any forbid zone + for (int i = 0; i < numWPs; i++) + { + watchpointinfo& wp = watchpoint[i]; + if (!(wp.flags & WP_F) || !(wp.flags & WP_E)) + continue; - if (condition(&wp)) - { - if (wp.endaddress) { - if( (wp.address <= _PC) && (wp.endaddress >= _PC) ) - return; //forbid - } else { - if(wp.address == _PC) - return; //forbid - } + if (condition(&wp)) + { + if (wp.endaddress) { + if ((wp.address <= _PC) && (wp.endaddress >= _PC)) + return false; //forbid + } + else { + if (wp.address == _PC) + return false; //forbid } } } + return true; +} +void BreakHit(int bp_num) +{ FCEUI_SetEmulationPaused(EMULATIONPAUSED_PAUSED); //mbg merge 7/19/06 changed to use EmulationPaused() #ifdef WIN32 @@ -585,17 +586,17 @@ static void breakpoint(uint8 *opcode, uint16 A, int size) { if (break_asap) { break_asap = false; - BreakHit(BREAK_TYPE_LUA, true); + BreakHit(BREAK_TYPE_LUA); } if (break_on_cycles && ((timestampbase + (uint64)timestamp - total_cycles_base) > break_cycles_limit)) - BreakHit(BREAK_TYPE_CYCLES_EXCEED, true); + BreakHit(BREAK_TYPE_CYCLES_EXCEED); if (break_on_instructions && (total_instructions > break_instructions_limit)) - BreakHit(BREAK_TYPE_INSTRUCTIONS_EXCEED, true); + BreakHit(BREAK_TYPE_INSTRUCTIONS_EXCEED); //if the current instruction is bad, and we are breaking on bad opcodes, then hit the breakpoint if(dbgstate.badopbreak && (size == 0)) - BreakHit(BREAK_TYPE_BADOP, true); + BreakHit(BREAK_TYPE_BADOP); //if we're stepping out, track the nest level if (dbgstate.stepout) { @@ -614,7 +615,7 @@ static void breakpoint(uint8 *opcode, uint16 A, int size) { //if we're stepping, then we'll always want to break if (dbgstate.step) { dbgstate.step = false; - BreakHit(BREAK_TYPE_STEP, true); + BreakHit(BREAK_TYPE_STEP); return; } @@ -626,7 +627,7 @@ static void breakpoint(uint8 *opcode, uint16 A, int size) { if (diff<=0) { dbgstate.runline=false; - BreakHit(BREAK_TYPE_STEP, true); + BreakHit(BREAK_TYPE_STEP); return; } } @@ -635,7 +636,7 @@ static void breakpoint(uint8 *opcode, uint16 A, int size) { if ((watchpoint[64].address == _PC) && (watchpoint[64].flags)) { watchpoint[64].address = 0; watchpoint[64].flags = 0; - BreakHit(BREAK_TYPE_STEP, true); + BreakHit(BREAK_TYPE_STEP); return; } @@ -657,7 +658,7 @@ static void breakpoint(uint8 *opcode, uint16 A, int size) { default: break; } - #define BREAKHIT(x) { breakHit = (x); goto STOPCHECKING; } +#define BREAKHIT(x) { if (CondForbidTest(x)) { breakHit = (x); goto STOPCHECKING; } } int breakHit = -1; for (i = 0; i < numWPs; i++) { diff --git a/src/debug.h b/src/debug.h index 9c25b376..5cf883c0 100644 --- a/src/debug.h +++ b/src/debug.h @@ -93,7 +93,7 @@ static INLINE int FCEUI_GetLoggingCD() { return debug_loggingCD; } extern int iaPC; extern uint32 iapoffset; //mbg merge 7/18/06 changed from int void DebugCycle(); -void BreakHit(int bp_num, bool force = false); +void BreakHit(int bp_num); extern bool break_asap; extern uint64 total_cycles_base; diff --git a/src/ppu.cpp b/src/ppu.cpp index 5aa5aee3..3d3c9656 100644 --- a/src/ppu.cpp +++ b/src/ppu.cpp @@ -1218,7 +1218,64 @@ static void RefreshLine(int lastpixel) { #undef PPU_VRC5FETCH } else { for (X1 = firsttile; X1 < lasttile; X1++) { - #include "pputile.inc" +// #include "pputile.inc" + uint8 *C; + register uint8 cc; + uint32 vadr; + + register uint8 zz; + + if (X1 >= 2) { + uint8 *S = PALRAM; + uint32 pixdata; + + pixdata = ppulut1[(pshift[0] >> (8 - XOffset)) & 0xFF] | ppulut2[(pshift[1] >> (8 - XOffset)) & 0xFF]; + + pixdata |= ppulut3[XOffset | (atlatch << 3)]; + + P[0] = S[pixdata & 0xF]; + pixdata >>= 4; + P[1] = S[pixdata & 0xF]; + pixdata >>= 4; + P[2] = S[pixdata & 0xF]; + pixdata >>= 4; + P[3] = S[pixdata & 0xF]; + pixdata >>= 4; + P[4] = S[pixdata & 0xF]; + pixdata >>= 4; + P[5] = S[pixdata & 0xF]; + pixdata >>= 4; + P[6] = S[pixdata & 0xF]; + pixdata >>= 4; + P[7] = S[pixdata & 0xF]; + P += 8; + } + + zz = RefreshAddr & 0x1F; + C = vnapage[(RefreshAddr >> 10) & 3]; + + vadr = (C[RefreshAddr & 0x3ff] << 4) + vofs; // Fetch name table byte. + cc = C[0x3c0 + (zz >> 2) + ((RefreshAddr & 0x380) >> 4)]; // Fetch attribute table byte. + cc = ((cc >> ((zz & 2) + ((RefreshAddr & 0x40) >> 4))) & 3); + + atlatch >>= 2; + atlatch |= cc << 2; + + pshift[0] <<= 8; + pshift[1] <<= 8; + + C = VRAMADR(vadr); + if (ScreenON) + RENDER_LOGP(C); + pshift[0] |= C[0]; + if (ScreenON) + RENDER_LOGP(C + 8); + pshift[1] |= C[8]; + + if ((RefreshAddr & 0x1f) == 0x1f) + RefreshAddr ^= 0x41F; + else + RefreshAddr++; } } } diff --git a/src/unif.h b/src/unif.h index f85e6e45..94d5db83 100644 --- a/src/unif.h +++ b/src/unif.h @@ -51,7 +51,7 @@ void EKROM_Init(CartInfo *info); void ELROM_Init(CartInfo *info); void ETROM_Init(CartInfo *info); void EWROM_Init(CartInfo *info); -void GNROM_Init(CartInfo *info); +//void GNROM_Init(CartInfo *info); void HKROM_Init(CartInfo *info); void LE05_Init(CartInfo *info); void LH10_Init(CartInfo *info);