From f3895a09fb299ac9b7bdc8cc0fd831b06e355793 Mon Sep 17 00:00:00 2001 From: AJR Date: Thu, 31 Aug 2017 00:09:31 -0400 Subject: cninjabl2: Fix sound banking --- src/mame/drivers/cninja.cpp | 40 +++++++++++++++++++++++++++++++--------- src/mame/includes/cninja.h | 5 ++++- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/mame/drivers/cninja.cpp b/src/mame/drivers/cninja.cpp index eabf178c61c..c2b83f147b2 100644 --- a/src/mame/drivers/cninja.cpp +++ b/src/mame/drivers/cninja.cpp @@ -407,8 +407,21 @@ static ADDRESS_MAP_START( stoneage_s_map, AS_PROGRAM, 8, cninja_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) + AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki1", okim6295_device, read, write) AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( cninjabl2_s_map, AS_PROGRAM, 8, cninja_state ) + AM_RANGE(0x0000, 0x7fff) AM_ROM + AM_RANGE(0x8000, 0x87ff) AM_RAM + AM_RANGE(0x9000, 0x9000) AM_WRITE(cninjabl2_oki_bank_w) AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki1", okim6295_device, read, write) + AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( cninjabl2_oki_map, 0, 8, cninja_state ) + AM_RANGE(0x00000, 0x2ffff) AM_ROM AM_REGION("oki1", 0) + AM_RANGE(0x30000, 0x3ffff) AM_ROMBANK("okibank") ADDRESS_MAP_END /*********************************************************** @@ -793,6 +806,11 @@ WRITE8_MEMBER(cninja_state::sound_bankswitch_w) m_oki2->set_rom_bank(data & 1); } +WRITE8_MEMBER(cninja_state::cninjabl2_oki_bank_w) +{ + m_okibank->set_entry(data & 7); +} + /**********************************************************************************/ DECO16IC_BANK_CB_MEMBER(cninja_state::cninja_bank_callback) @@ -1012,15 +1030,20 @@ static MACHINE_CONFIG_START( stoneage ) MCFG_OKIM6295_ADD("oki1", 32220000/32, PIN7_HIGH) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) - - MCFG_OKIM6295_ADD("oki2", 32220000/16, PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( cninjabl2, stoneage ) + MCFG_CPU_MODIFY("audiocpu") + MCFG_CPU_PROGRAM_MAP(cninjabl2_s_map) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_cninjabl2) + + MCFG_DEVICE_REMOVE("ymsnd") + + MCFG_OKIM6295_REPLACE("oki1", 32220000/32, PIN7_LOW) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + MCFG_DEVICE_ADDRESS_MAP(0, cninjabl2_oki_map) MACHINE_CONFIG_END static MACHINE_CONFIG_START( cninjabl ) @@ -1596,9 +1619,6 @@ ROM_START( stoneage ) ROM_REGION( 0x40000, "oki1", 0 ) /* Oki samples */ ROM_LOAD( "sa_1_069.bin", 0x00000, 0x40000, CRC(2188f3ca) SHA1(9c29b62ed261e63d701ff8d43020089c89a64ab2) ) - - /* No extra Oki samples in the bootleg */ - ROM_REGION( 0x80000, "oki2", ROMREGION_ERASEFF ) ROM_END ROM_START( cninjabl ) @@ -1662,9 +1682,9 @@ ROM_START( cninjabl2 ) ROM_LOAD16_BYTE( "mag-04.rom", 0x100000, 0x80000, CRC(144b94cc) SHA1(d982508608942a714b428a2b721bf24e1627cbb6) ) ROM_LOAD16_BYTE( "mag-06.rom", 0x100001, 0x80000, CRC(82d44749) SHA1(c471fa573e00c2f8ae44068439ba6d849a124c68) ) - ROM_REGION( 0x40000, "oki1", 0 ) /* Oki samples */ + ROM_REGION( 0x30000, "oki1", 0 ) /* Oki samples */ ROM_LOAD( "audio-samp.2", 0x00000, 0x20000, CRC(c6638568) SHA1(b5e38d807146b033d1a0b5fb013ac755cd4a2699) ) - ROM_LOAD( "audio-samp.1", 0x00000, 0x10000, CRC(7815e6ab) SHA1(3112b4e8a4008b519f73e6f2d1393ef1e620a0c5) ) + ROM_LOAD( "audio-samp.1", 0x20000, 0x10000, CRC(7815e6ab) SHA1(3112b4e8a4008b519f73e6f2d1393ef1e620a0c5) ) ROM_REGION( 0x80000, "oki2", 0 ) /* Extra Oki samples */ ROM_LOAD( "audio-samp.18", 0x00000, 0x80000, CRC(06f1bc18) SHA1(fe551d78466dc5b098263520f0ab00200d651593) ) /* banked */ @@ -2308,6 +2328,8 @@ DRIVER_INIT_MEMBER(cninja_state,cninjabl2) { m_maincpu->space(AS_PROGRAM).install_ram(0x180000, 0x18ffff); m_maincpu->space(AS_PROGRAM).install_read_handler(0x1b4000, 0x1b4001, read16_delegate(FUNC(cninja_state::cninjabl2_sprite_dma_r),this)); + + m_okibank->configure_entries(0, 8, memregion("oki2")->base(), 0x10000); } DRIVER_INIT_MEMBER(cninja_state,mutantf) @@ -2337,7 +2359,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, cninja_state, 0, ROT0, "bootleg", "Caveman Ninja (bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, cninjabl2,cninja, cninjabl2,cninja, cninja_state, cninjabl2,ROT0, "bootleg", "Tatakae Genshizin Joe & Mac (Japan, bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // tile layers need adjusting, sound is wrong +GAME( 1991, cninjabl2,cninja, cninjabl2,cninja, cninja_state, cninjabl2,ROT0, "bootleg", "Tatakae Genshizin Joe & Mac (Japan, bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // tile layers need adjusting GAME( 1991, robocop2, 0, robocop2, robocop2, cninja_state, 0, ROT0, "Data East Corporation", "Robocop 2 (Euro/Asia v0.10)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, robocop2u,robocop2, robocop2, robocop2, cninja_state, 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 affa7c3b395..53654a06cb9 100644 --- a/src/mame/includes/cninja.h +++ b/src/mame/includes/cninja.h @@ -43,7 +43,8 @@ public: m_pf2_rowscroll(*this, "pf2_rowscroll"), m_pf3_rowscroll(*this, "pf3_rowscroll"), m_pf4_rowscroll(*this, "pf4_rowscroll"), - m_ram(*this, "ram") + m_ram(*this, "ram"), + m_okibank(*this, "okibank") { } /* devices */ @@ -72,6 +73,7 @@ public: required_shared_ptr m_pf3_rowscroll; required_shared_ptr m_pf4_rowscroll; optional_shared_ptr m_ram; + optional_memory_bank m_okibank; /* misc */ int m_scanline; @@ -84,6 +86,7 @@ public: DECLARE_WRITE16_MEMBER(cninja_pf12_control_w); DECLARE_WRITE16_MEMBER(cninja_pf34_control_w); DECLARE_WRITE8_MEMBER(sound_bankswitch_w); + DECLARE_WRITE8_MEMBER(cninjabl2_oki_bank_w); DECLARE_DRIVER_INIT(stoneage); DECLARE_DRIVER_INIT(mutantf); DECLARE_DRIVER_INIT(cninja); -- cgit v1.2.3