diff --git a/cpu/sh2mame/sh2.h b/cpu/sh2mame/sh2.h index b83a9c49..1fab412c 100644 --- a/cpu/sh2mame/sh2.h +++ b/cpu/sh2mame/sh2.h @@ -48,10 +48,10 @@ typedef struct void (*irq_callback)(int id, int level); int is_slave; - // XXX: unused, will we ever use? - int internal_irq_level; + UINT32 cycles_aim; // subtract sh2_icount to get global counter } SH2; +SH2 *sh2; // active sh2 extern int sh2_icount; void sh2_init(SH2 *sh2, int is_slave); diff --git a/cpu/sh2mame/sh2pico.c b/cpu/sh2mame/sh2pico.c index 463261ec..fb4bea63 100644 --- a/cpu/sh2mame/sh2pico.c +++ b/cpu/sh2mame/sh2pico.c @@ -55,8 +55,6 @@ void sh2_reset(SH2 *sh2) sh2->pc = RL(0); sh2->r[15] = RL(4); sh2->sr = I; - - sh2->internal_irq_level = -1; } /* Execute cycles - returns number of cycles actually run */ @@ -64,6 +62,7 @@ int sh2_execute(SH2 *sh2_, int cycles) { sh2 = sh2_; sh2_icount = cycles; + sh2->cycles_aim += cycles; do { @@ -112,7 +111,7 @@ int sh2_execute(SH2 *sh2_, int cycles) } sh2_icount--; } - while (sh2_icount > 0); + while (sh2_icount > 0 || sh2->delay); /* can't interrupt before delay */ return cycles - sh2_icount; }