diff --git a/src/mame/drivers/feversoc.c b/src/mame/drivers/feversoc.c index e5c00cb1d37..93369de5d54 100644 --- a/src/mame/drivers/feversoc.c +++ b/src/mame/drivers/feversoc.c @@ -336,9 +336,7 @@ ROM_END static DRIVER_INIT( feversoc ) { -// seibuspi_text_decrypt(memory_region(machine, "gfx1")); -// seibuspi_bg_decrypt(memory_region(machine, "gfx2"), memory_region_length(machine, "gfx2")); - seibuspi_rise11_sprite_decrypt(memory_region(machine, "gfx1"), 0x200000); //WRONG! + seibuspi_rise11_sprite_decrypt_feversoc(memory_region(machine, "gfx1"), 0x200000); } GAME( 2000, feversoc, 0, feversoc, feversoc, feversoc, ROT0, "Seibu", "Fever Soccer", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) diff --git a/src/mame/drivers/seibuspi.c b/src/mame/drivers/seibuspi.c index d2b45971305..4b7dbbe2869 100644 --- a/src/mame/drivers/seibuspi.c +++ b/src/mame/drivers/seibuspi.c @@ -2037,7 +2037,7 @@ static DRIVER_INIT( rfjet ) memory_install_read32_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x002894c, 0x002894f, 0, 0, rfjet_speedup_r ); seibuspi_rise11_text_decrypt(memory_region(machine, "gfx1")); seibuspi_rise11_bg_decrypt(memory_region(machine, "gfx2"), memory_region_length(machine, "gfx2")); - seibuspi_rise11_sprite_decrypt(memory_region(machine, "gfx3"), 0x800000); + seibuspi_rise11_sprite_decrypt_rfjet(memory_region(machine, "gfx3"), 0x800000); memory_install_write32_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x560, 0x563, 0, 0, sprite_dma_start_w); } diff --git a/src/mame/includes/seibuspi.h b/src/mame/includes/seibuspi.h index 8763bdd0049..7e4c9e1de94 100644 --- a/src/mame/includes/seibuspi.h +++ b/src/mame/includes/seibuspi.h @@ -19,7 +19,8 @@ void seibuspi_rise10_sprite_decrypt(UINT8 *rom, int romsize); void seibuspi_rise11_text_decrypt(UINT8 *rom); void seibuspi_rise11_bg_decrypt(UINT8 *rom, int size); -void seibuspi_rise11_sprite_decrypt(UINT8 *rom, int romsize); +void seibuspi_rise11_sprite_decrypt_rfjet(UINT8 *rom, int romsize); +void seibuspi_rise11_sprite_decrypt_feversoc(UINT8 *rom, int romsize); /*----------- defined in video/seibuspi.c -----------*/ diff --git a/src/mame/machine/seibuspi.c b/src/mame/machine/seibuspi.c index 0fa35b59da8..36f893b3f3e 100644 --- a/src/mame/machine/seibuspi.c +++ b/src/mame/machine/seibuspi.c @@ -303,10 +303,31 @@ cpu #0 (PC=002C40F9): unmapped program memory dword write to 0000054C = 00000300 plane543 = partial_carry_sum24( plane543, 0x01cb64, 0x01aadd ) ^ 0x016a4c; plane210 = partial_carry_sum24( plane210, i, 0xd6375b ) ^ 0x8bf23b; +feversoc + +CPU 'main' (PC=00021C74): unmapped program memory dword write to 0601004C = D5A90000 & FFFF0000 +CPU 'main' (PC=00021C74): unmapped program memory dword write to 0601004C = 4EB50000 & FFFF0000 +CPU 'main' (PC=00021C74): unmapped program memory dword write to 0601004C = 9A4A0000 & FFFF0000 +CPU 'main' (PC=00021C74): unmapped program memory dword write to 0601004C = ADB30000 & FFFF0000 +CPU 'main' (PC=00021C74): unmapped program memory dword write to 0601004C = E9320000 & FFFF0000 // +CPU 'main' (PC=00021C74): unmapped program memory dword write to 0601004C = 9DF50000 & FFFF0000 +CPU 'main' (PC=00021C74): unmapped program memory dword write to 0601004C = 99E90000 & FFFF0000 // +CPU 'main' (PC=00021C74): unmapped program memory dword write to 0601004C = B2590000 & FFFF0000 +CPU 'main' (PC=00021C74): unmapped program memory dword write to 0601004C = 961D0000 & FFFF0000 // +CPU 'main' (PC=00021C74): unmapped program memory dword write to 0601004C = 8B970000 & FFFF0000 // +CPU 'main' (PC=00021C74): unmapped program memory dword write to 0601004C = EAAE0000 & FFFF0000 +CPU 'main' (PC=00021C74): unmapped program memory dword write to 0601004C = D5AC0000 & FFFF0000 // +CPU 'main' (PC=00021C74): unmapped program memory dword write to 0601004C = 03000000 & FFFF0000 + + plane543 = partial_carry_sum24( plane543, 0x18f5b2, 0x18e999 ) ^ 0x3032e9; + plane210 = partial_carry_sum24( plane210, i, 0x968bd5 ) ^ 0x1d97ac; + plane210 = partial_carry_sum24( plane210, 1, 0x000001 ); + ******************************************************************************************/ -void seibuspi_rise11_sprite_decrypt(UINT8 *rom, int size) +void seibuspi_rise11_sprite_decrypt(UINT8 *rom, int size, + UINT32 k1, UINT32 k2, UINT32 k3, UINT32 k4, UINT32 k5, int feversoc_kludge) { int i; @@ -369,8 +390,10 @@ void seibuspi_rise11_sprite_decrypt(UINT8 *rom, int size) (BIT(b1, 5)<<22) | (BIT(b3,15)<<23); - plane543 = partial_carry_sum24( plane543, 0x01cb64, 0x01aadd ) ^ 0x016a4c; - plane210 = partial_carry_sum24( plane210, i, 0xd6375b ) ^ 0x8bf23b; + plane543 = partial_carry_sum24( plane543, k1, k2 ) ^ k3; + plane210 = partial_carry_sum24( plane210, i, k4 ) ^ k5; + if (feversoc_kludge) + plane210 = partial_carry_sum24( plane210, 1, 0x000001 ); rom[0*size+2*i] = plane543 >> 16; rom[0*size+2*i+1] = plane543 >> 8; @@ -387,3 +410,15 @@ void seibuspi_rise11_sprite_decrypt(UINT8 *rom, int size) sprite_reorder(&rom[2*size+2*i]); } } + + +void seibuspi_rise11_sprite_decrypt_rfjet(UINT8 *rom, int size) +{ + seibuspi_rise11_sprite_decrypt(rom, size, 0x01cb64, 0x01aadd, 0x016a4c, 0xd6375b, 0x8bf23b, 0); +} + + +void seibuspi_rise11_sprite_decrypt_feversoc(UINT8 *rom, int size) +{ + seibuspi_rise11_sprite_decrypt(rom, size, 0x18f5b2, 0x18e999, 0x3032e9, 0x968bd5, 0x1d97ac, 1); +}