diff --git a/libpcsxcore/new_dynarec/new_dynarec.c b/libpcsxcore/new_dynarec/new_dynarec.c index ede1f93c..1c8965f0 100644 --- a/libpcsxcore/new_dynarec/new_dynarec.c +++ b/libpcsxcore/new_dynarec/new_dynarec.c @@ -324,7 +324,7 @@ static struct compile_info int new_dynarec_hacks_old; int new_dynarec_did_compile; - #define HACK_ENABLED(x) ((new_dynarec_hacks | new_dynarec_hacks_pergame) & (x)) + #define HACK_ENABLED(x) ((NDHACK_NO_STALLS) & (x)) extern int cycle_count; // ... until end of the timeslice, counts -N -> 0 (CCREG) extern int last_count; // last absolute target, often = next_interupt @@ -602,6 +602,7 @@ static int cycle_multiplier_active; static int CLOCK_ADJUST(int x) { + return x * 2; int m = cycle_multiplier_active; int s = (x >> 31) | 1; return (x * m + s * 50) / 100; @@ -776,6 +777,9 @@ static noinline u_int generate_exception(u_int pc) // This is called from the recompiled JR/JALR instructions static void noinline *get_addr(u_int vaddr, int can_compile) { +#ifdef DRC_DBG +printf("get_addr %08x, pc=%08x\n", vaddr, psxRegs.pc); +#endif u_int start_page = get_page_prev(vaddr); u_int i, page, end_page = get_page(vaddr); void *found_clean = NULL; @@ -7157,7 +7161,7 @@ static noinline void pass2_unneeded_regs(int istart,int iend,int r) // R0 is always unneeded u|=1; // Save it - unneeded_reg[i]=u; + unneeded_reg[i]=1;//u; gte_unneeded[i]=gte_u; /* printf("ur (%d,%d) %x: ",istart,iend,start+i*4); @@ -8299,6 +8303,7 @@ static noinline void pass5a_preallocate1(void) static noinline void pass5b_preallocate2(void) { int i, hr; + return; for(i=0;isubCycleStep >= 0x10000); regs->subCycle += regs->subCycleStep; - regs->cycle += regs->subCycle >> 16; + regs->cycle += 2; //regs->subCycle >> 16; regs->subCycle &= 0xffff; } @@ -1344,8 +1344,14 @@ static void intShutdown() { // single step (may do several ops in case of a branch or load delay) // called by asm/dynarec void execI(psxRegisters *regs) { + extern int last_count; + void do_insn_cmp(void); + printf("execI %08x c %u, ni %u\n", regs->pc, regs->cycle, next_interupt); + last_count = 0; do { execIbp(psxMemRLUT, regs); + if (regs->dloadReg[0] || regs->dloadReg[1]) + do_insn_cmp(); } while (regs->dloadReg[0] || regs->dloadReg[1]); }