From 07ef5054f5db6ba393fe30c3b071906cec47d831 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Wed, 5 Oct 2016 18:39:22 +0200 Subject: [PATCH] cninja.cpp: some work on cninjabl2. It now shows the tilemap layers and plays SFX. Still missing sprites, some tilemaps have wrong offsets and misses oki banking. Also not really convinced the PCB had all the sound chips (nw) --- src/mame/drivers/cninja.cpp | 12 +++++++++++- src/mame/includes/cninja.h | 2 ++ src/mame/video/cninja.cpp | 11 +++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/cninja.cpp b/src/mame/drivers/cninja.cpp index 1de47c9d6ee..4b1c96893df 100644 --- a/src/mame/drivers/cninja.cpp +++ b/src/mame/drivers/cninja.cpp @@ -1009,6 +1009,11 @@ static MACHINE_CONFIG_START( stoneage, cninja_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( cninjabl2, stoneage ) + + MCFG_SCREEN_MODIFY("screen") + MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_cninjabl2) +MACHINE_CONFIG_END static MACHINE_CONFIG_START( cninjabl, cninja_state ) @@ -2291,6 +2296,11 @@ DRIVER_INIT_MEMBER(cninja_state,stoneage) m_maincpu->space(AS_PROGRAM).install_write_handler(0x1bc0a8, 0x1bc0a9, write16_delegate(FUNC(cninja_state::stoneage_sound_w),this)); } +DRIVER_INIT_MEMBER(cninja_state,cninjabl2) +{ + m_maincpu->space(AS_PROGRAM).install_ram(0x180000, 0x18ffff); +} + DRIVER_INIT_MEMBER(cninja_state,mutantf) { const UINT8 *src = memregion("gfx2")->base(); @@ -2318,7 +2328,7 @@ GAME( 1991, cninjau, cninja, cninja, cninjau, cninja_state, cninja, ROT0 GAME( 1991, joemac, cninja, cninja, cninja, cninja_state, cninja, ROT0, "Data East Corporation", "Tatakae Genshizin Joe & Mac (Japan ver 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, stoneage, cninja, stoneage, cninja, cninja_state, stoneage, ROT0, "bootleg", "Stoneage (bootleg of Caveman Ninja)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, cninjabl, cninja, cninjabl, cninja, driver_device, 0, ROT0, "bootleg", "Caveman Ninja (bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, cninjabl2,cninja, cninjabl, cninja, driver_device, 0, ROT0, "bootleg", "Caveman Ninja (bootleg, alt)", MACHINE_NOT_WORKING ) +GAME( 1991, cninjabl2,cninja, cninjabl2,cninja, cninja_state, cninjabl2,ROT0, "bootleg", "Caveman Ninja (bootleg, alt)", MACHINE_NOT_WORKING ) // sprites are missing, tile layers need verifying, sound is wrong GAME( 1991, robocop2, 0, robocop2, robocop2, driver_device, 0, ROT0, "Data East Corporation", "Robocop 2 (Euro/Asia v0.10)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, robocop2u,robocop2,robocop2, robocop2, driver_device, 0, ROT0, "Data East Corporation", "Robocop 2 (US v0.10)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/cninja.h b/src/mame/includes/cninja.h index 6a1d974890c..7722413d8a1 100644 --- a/src/mame/includes/cninja.h +++ b/src/mame/includes/cninja.h @@ -86,12 +86,14 @@ public: DECLARE_DRIVER_INIT(stoneage); DECLARE_DRIVER_INIT(mutantf); DECLARE_DRIVER_INIT(cninja); + DECLARE_DRIVER_INIT(cninjabl2); virtual void machine_start() override; virtual void machine_reset() override; DECLARE_VIDEO_START(stoneage); DECLARE_VIDEO_START(mutantf); UINT32 screen_update_cninja(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_cninjabl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + UINT32 screen_update_cninjabl2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_edrandy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_robocop2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_mutantf(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); diff --git a/src/mame/video/cninja.cpp b/src/mame/video/cninja.cpp index d04e9b55a02..1ec374c2515 100644 --- a/src/mame/video/cninja.cpp +++ b/src/mame/video/cninja.cpp @@ -142,6 +142,17 @@ UINT32 cninja_state::screen_update_cninja(screen_device &screen, bitmap_ind16 &b return 0; } +UINT32 cninja_state::screen_update_cninjabl2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + /* force layers to be enabled */ + m_deco_tilegen1->set_enable(0, 1 ); + m_deco_tilegen1->set_enable(1, 1 ); + + screen_update_cninja(screen, bitmap, cliprect); + + return 0; +} + UINT32 cninja_state::screen_update_cninjabl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { address_space &space = machine().driver_data()->generic_space();