X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2Fsh2%2Fsh2.c;h=7b9f9a1c24597531bab80b2c0b881fa6f3fe1370;hb=a8fd6e376175c06e2423d0914359c761829d6e93;hp=937f8e423a078e4a11bb81f7ba4438ecd5f6ccd1;hpb=ed4402a7dfd12dbbf34c547b438a671ae8114197;p=picodrive.git diff --git a/cpu/sh2/sh2.c b/cpu/sh2/sh2.c index 937f8e4..7b9f9a1 100644 --- a/cpu/sh2/sh2.c +++ b/cpu/sh2/sh2.c @@ -63,23 +63,27 @@ void sh2_do_irq(SH2 *sh2, int level, int vector) // sh2->icount -= 13; } -void sh2_irl_irq(SH2 *sh2, int level, int nested_call) +int sh2_irl_irq(SH2 *sh2, int level, int nested_call) { + int taken; + sh2->pending_irl = level; if (level < sh2->pending_int_irq) level = sh2->pending_int_irq; sh2->pending_level = level; - if (!nested_call) { - // not in memhandler, so handle this now (recompiler friendly) - // do this to avoid missing irqs that other SH2 might clear - if (level > ((sh2->sr >> 4) & 0x0f)) { + taken = (level > ((sh2->sr >> 4) & 0x0f)); + if (taken) { + if (!nested_call) { + // not in memhandler, so handle this now (recompiler friendly) + // do this to avoid missing irqs that other SH2 might clear int vector = sh2->irq_callback(sh2, level); sh2_do_irq(sh2, level, vector); } + else + sh2->test_irq = 1; } - else - sh2->test_irq = 1; + return taken; } void sh2_internal_irq(SH2 *sh2, int level, int vector)