From 829dc47b26ea80851ba0467cc3c105c880b10377 Mon Sep 17 00:00:00 2001 From: David Haywood <28625134+DavidHaywood@users.noreply.github.com> Date: Mon, 21 Jun 2021 20:37:01 +0100 Subject: finalap3bl: allow to boot / run (custom bootleg protection) (#8200) --- src/mame/drivers/namcos2.cpp | 20 +++++++++++++++++--- src/mame/includes/namcos2.h | 5 ++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/mame/drivers/namcos2.cpp b/src/mame/drivers/namcos2.cpp index 8d6d0cf7c13..283bfb94781 100644 --- a/src/mame/drivers/namcos2.cpp +++ b/src/mame/drivers/namcos2.cpp @@ -3314,8 +3314,8 @@ ROM_START( finalap3bl ) // bootleg set ROM_REGION( 8*1024, "user2", 0 ) /* zoom */ ROM_LOAD( "04544191.6r", 0, 8*1024, CRC(90db1bf6) SHA1(dbb9e50a8efc3b4012fcf587cc87da9ef42a1b80) ) - ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */ - ROM_LOAD( "finalap3.nv", 0x000000, 0x2000, CRC(efbc6274) SHA1(f542012e467027b7bd5d7102096ff91d8c9adee3) ) + ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration and machine ID code that passes protection */ + ROM_LOAD( "finalap3bl.nv", 0x000000, 0x2000, CRC(60226586) SHA1(d66afd1149c3c95cbb0108337c530cab78327d97) ) ROM_END /* FINEST HOUR */ @@ -5525,6 +5525,20 @@ void namcos2_state::init_finalap3() m_finallap_prot_count = 0; } +uint16_t namcos2_state::finalap3bl_prot_r() +{ + // code at 0x3f22 expects this to be 0x4d00 or it sets a value in NVRAM which prevents booting + // address 0x180020 (0x10 in NVRAM) must also be 0x6b (machine ID code first byte) or the same will occur + // for the 2nd issue we use a default NVRAM with this set + return 0x4d00; +} + +void namcos2_state::init_finalap3bl() +{ + init_finalap3(); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x3ffff0, 0x3ffff1, read16smo_delegate(*this, FUNC(namcos2_state::finalap3bl_prot_r))); +} + void namcos2_state::init_finehour() { m_gametype = NAMCOS2_FINEST_HOUR; @@ -5764,7 +5778,7 @@ GAMEL( 1992, finalap3, 0, finalap3, finalap3, namcos2_state, init_final GAMEL( 1992, finalap3a, finalap3, finalap3, finalap3, namcos2_state, init_finalap3, ROT0, "Namco", "Final Lap 3 (World, set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap ) GAMEL( 1992, finalap3j, finalap3, finalap3, finalap3, namcos2_state, init_finalap3, ROT0, "Namco", "Final Lap 3 (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap ) GAMEL( 1992, finalap3jc, finalap3, finalap3, finalap3, namcos2_state, init_finalap3, ROT0, "Namco", "Final Lap 3 (Japan, Rev C)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap ) -GAMEL( 1992, finalap3bl, finalap3, finalap3, finalap3, namcos2_state, init_finalap3, ROT0, "Namco", "Final Lap 3 (bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap ) +GAMEL( 1992, finalap3bl, finalap3, finalap3, finalap3, namcos2_state, init_finalap3bl,ROT0, "Namco", "Final Lap 3 (bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap ) GAME( 1992, luckywld, 0, luckywld, luckywld, namcos2_state, init_luckywld, ROT0, "Namco", "Lucky & Wild", MACHINE_SUPPORTS_SAVE ) GAME( 1992, luckywldj, luckywld, luckywld, luckywld, namcos2_state, init_luckywld, ROT0, "Namco", "Lucky & Wild (Japan)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/namcos2.h b/src/mame/includes/namcos2.h index 9181d69f1c6..e0579a37fe2 100644 --- a/src/mame/includes/namcos2.h +++ b/src/mame/includes/namcos2.h @@ -114,6 +114,7 @@ public: void init_valkyrie(); void init_fourtrax(); void init_finalap3(); + void init_finalap3bl(); void init_luckywld(); void init_assaultj(); void init_dsaberj(); @@ -241,7 +242,9 @@ enum uint16_t namcos2_68k_key_r(offs_t offset); void namcos2_68k_key_w(offs_t offset, uint16_t data); - uint16_t namcos2_finallap_prot_r(offs_t offset); + uint16_t namcos2_finallap_prot_r(offs_t offset); // finalap2, finalap3 + uint16_t finalap3bl_prot_r(); // finalap3bl + void GollyGhostUpdateLED_c4(int data); void GollyGhostUpdateLED_c6(int data); void GollyGhostUpdateLED_c8(int data); -- cgit v1.2.3