This commit is contained in:
twinaphex 2016-09-09 05:22:07 +02:00
commit 79d5df0a67
5 changed files with 18 additions and 3 deletions

View File

@ -33,7 +33,8 @@ Genesis Plus GX 1.7.5 (xx/xx/xxxx) (Eke-Eke)
* fixed incorrect masking of Level 3 (GFX) interrupts (spurious freeze during Japanese BIOS intro) * fixed incorrect masking of Level 3 (GFX) interrupts (spurious freeze during Japanese BIOS intro)
* fixed H-INT vector handling when using Mode 1 * fixed H-INT vector handling when using Mode 1
* fixed access to "write-only" communication flags (verified on real hardware by Notaz) * fixed access to "write-only" communication flags (verified on real hardware by Notaz)
* fixed pending level 1 interrupts when GFX interrupt is disabled (fixes random freezes out of "Batman Returns" option menu) * fixed access to Sub-CPU "read-only" communication registers (fixes Round 5 Boss freeze in Streets of Rage / Sega Classics Arcade Collection)
* fixed pending level 1 interrupts when GFX interrupt is disabled (fixes random freezes when exiting "Batman Returns" option menu)
* fixed CDD seek command again (Final Fight CD freeze with model 2 BIOS) * fixed CDD seek command again (Final Fight CD freeze with model 2 BIOS)
* optimized Sub-CPU / Main-CPU synchronization * optimized Sub-CPU / Main-CPU synchronization

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 MiB

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 MiB

After

Width:  |  Height:  |  Size: 3.3 MiB

View File

@ -1010,11 +1010,18 @@ static void scd_write_byte(unsigned int address, unsigned int data)
default: default:
{ {
/* SUB-CPU communication words */ /* SUB-CPU communication words */
if ((address & 0xf0) == 0x20) if ((address & 0x1f0) == 0x20)
{ {
s68k_poll_sync(1 << ((address - 0x10) & 0x1f)); s68k_poll_sync(1 << ((address - 0x10) & 0x1f));
} }
/* MAIN-CPU communication words */
else if ((address & 0x1f0) == 0x10)
{
/* read-only (Sega Classic Arcade Collection) */
return;
}
/* default registers */ /* default registers */
if (address & 1) if (address & 1)
{ {
@ -1297,11 +1304,18 @@ static void scd_write_word(unsigned int address, unsigned int data)
default: default:
{ {
/* SUB-CPU communication words */ /* SUB-CPU communication words */
if ((address & 0xf0) == 0x20) if ((address & 0x1f0) == 0x20)
{ {
s68k_poll_sync(3 << ((address - 0x10) & 0x1e)); s68k_poll_sync(3 << ((address - 0x10) & 0x1e));
} }
/* MAIN-CPU communication words */
else if ((address & 0x1f0) == 0x10)
{
/* read-only (Sega Classic Arcade Collection) */
return;
}
/* default registers */ /* default registers */
scd.regs[(address >> 1) & 0xff].w = data; scd.regs[(address >> 1) & 0xff].w = data;
return; return;