diff options
author | David Haywood <28625134+DavidHaywood@users.noreply.github.com> | 2021-06-21 20:37:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-21 15:37:01 -0400 |
commit | 829dc47b26ea80851ba0467cc3c105c880b10377 (patch) | |
tree | 974313a23f2f7c2060421b4fe945845075249893 /src/mame/drivers/namcos2.cpp | |
parent | c5f283fcc67e6c8b12b53e2513627641c5994341 (diff) |
finalap3bl: allow to boot / run (custom bootleg protection) (#8200)
Diffstat (limited to 'src/mame/drivers/namcos2.cpp')
-rw-r--r-- | src/mame/drivers/namcos2.cpp | 20 |
1 files changed, 17 insertions, 3 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 ) |