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
This commit is contained in:
notaz 2009-09-30 15:38:57 +00:00
parent 1b3f584492
commit 2ea2cbfe8b
2 changed files with 4 additions and 5 deletions

View file

@ -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);

View file

@ -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;
}