diff options
author | notaz | 2010-12-07 00:06:21 +0200 |
---|---|---|
committer | notaz | 2010-12-14 15:24:50 +0200 |
commit | ae602c19f527fbc1f44cdb744cf824d04b8eceb1 (patch) | |
tree | 000d4051fb09ea2d8f4c35344dabbd40cc54213d /libpcsxcore/new_dynarec | |
parent | 5067f3414032416f7112cd771ebe0a7aaf9eb7bf (diff) | |
download | pcsx_rearmed-ae602c19f527fbc1f44cdb744cf824d04b8eceb1.tar.gz pcsx_rearmed-ae602c19f527fbc1f44cdb744cf824d04b8eceb1.tar.bz2 pcsx_rearmed-ae602c19f527fbc1f44cdb744cf824d04b8eceb1.zip |
improve event handling (still has problems though)
Diffstat (limited to 'libpcsxcore/new_dynarec')
-rw-r--r-- | libpcsxcore/new_dynarec/emu_if.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/libpcsxcore/new_dynarec/emu_if.c b/libpcsxcore/new_dynarec/emu_if.c index 2560eb3..3df83e4 100644 --- a/libpcsxcore/new_dynarec/emu_if.c +++ b/libpcsxcore/new_dynarec/emu_if.c @@ -6,12 +6,15 @@ #include "../psxmem.h" #include "../psxhle.h" +#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) + //#define memprintf printf #define memprintf(...) //#define evprintf printf #define evprintf(...) char invalid_code[0x100000]; +u32 event_cycles[6]; void MTC0_() { @@ -24,6 +27,9 @@ void MTC0_() void gen_interupt() { + u32 c, min; + int i; + evprintf("ari64_gen_interupt\n"); evprintf(" +ge %08x, %d->%d\n", psxRegs.pc, psxRegs.cycle, next_interupt); #ifdef DRC_DBG @@ -32,7 +38,16 @@ void gen_interupt() psxBranchTest(); - next_interupt = psxNextsCounter + psxNextCounter; + min = psxNextsCounter + psxNextCounter; + for (i = 0; i < ARRAY_SIZE(event_cycles); i++) { + c = event_cycles[i]; + evprintf(" ev %d\n", c - psxRegs.cycle); + if (psxRegs.cycle < c && c < min) + min = c; + } + next_interupt = min; + + //next_interupt = psxNextsCounter + psxNextCounter; evprintf(" -ge %08x, %d->%d\n", psxRegs.pc, psxRegs.cycle, next_interupt); pending_exception = 1; /* FIXME */ @@ -110,7 +125,7 @@ static int ari64_init() new_dynarec_init(); - for (i = 0; i < sizeof(readmem) / sizeof(readmem[0]); i++) { + for (i = 0; i < ARRAY_SIZE(readmem); i++) { readmemb[i] = read_mem8; readmemh[i] = read_mem16; readmem[i] = read_mem32; @@ -119,7 +134,7 @@ static int ari64_init() writemem[i] = write_mem32; } - for (i = 0; i < sizeof(gte_handlers) / sizeof(gte_handlers[0]); i++) + for (i = 0; i < ARRAY_SIZE(gte_handlers); i++) if (psxCP2[i] != psxNULL) gte_handlers[i] = psxCP2[i]; |