From 754d2a116875fb56a806d909d1100c022188536d Mon Sep 17 00:00:00 2001 From: EkeEke Date: Mon, 21 Oct 2013 00:19:23 +0200 Subject: [PATCH] [Core/MCD] fixed pending level 1 interrupts when GFX interrupt is disabled (fixes random freezes out of "Batman Returns" option menu) --- core/cd_hw/scd.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/cd_hw/scd.c b/core/cd_hw/scd.c index e750374..3cb1f1a 100644 --- a/core/cd_hw/scd.c +++ b/core/cd_hw/scd.c @@ -739,7 +739,10 @@ static void scd_write_byte(unsigned int address, unsigned int data) /* update IEN2 flag */ scd.regs[0x00].byte.h = (scd.regs[0x00].byte.h & 0x7f) | ((data & 0x04) << 5); - + + /* clear level 1 interrupt if disabled ("Batman Returns" option menu) */ + scd.pending &= ~(data & 0x02); + /* update IRQ level */ s68k_update_irq((scd.pending & data) >> 1); return; @@ -1025,6 +1028,9 @@ static void scd_write_word(unsigned int address, unsigned int data) /* update IEN2 flag */ scd.regs[0x00].byte.h = (scd.regs[0x00].byte.h & 0x7f) | ((data & 0x04) << 5); + + /* clear pending level 1 interrupt if disabled ("Batman Returns" option menu) */ + scd.pending &= ~(data & 0x02); /* update IRQ level */ s68k_update_irq((scd.pending & data) >> 1);