From: notaz Date: Wed, 30 Sep 2009 15:38:57 +0000 (+0000) Subject: 32x: sh2mame: critical bugfix (irqs on delay slot) + global cycle counter X-Git-Tag: v1.85~254 X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2ea2cbfe8ba1607505f4fa7a4b4e9074c6337066;p=picodrive.git 32x: sh2mame: critical bugfix (irqs on delay slot) + global cycle counter git-svn-id: file:///home/notaz/opt/svn/PicoDrive@796 be3aeb3a-fb24-0410-a615-afba39da0efa --- 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; }