From 9ddde458fa2d489be1668943b0b610efdd7cd519 Mon Sep 17 00:00:00 2001 From: "R. Belmont" Date: Sun, 1 May 2011 21:36:21 +0000 Subject: [PATCH] Fix second adpcm player in games using SEIBU_ADPCM [R. Belmont] --- src/mame/audio/seibu.c | 15 ++++++++++++++- src/mame/audio/seibu.h | 11 +++++++++++ src/mame/drivers/cabal.c | 38 ++++++++++++++++++++++++++------------ src/mame/drivers/deadang.c | 24 ++++++++++++++++-------- 4 files changed, 67 insertions(+), 21 deletions(-) diff --git a/src/mame/audio/seibu.c b/src/mame/audio/seibu.c index d25c9d83678..7fd1641c523 100644 --- a/src/mame/audio/seibu.c +++ b/src/mame/audio/seibu.c @@ -129,6 +129,16 @@ void seibu_sound_decrypt(running_machine &machine,const char *cpu,int length) Handlers for early Seibu/Tad games with dual channel ADPCM */ +const seibu_adpcm_interface seibu_adpcm1_intf = +{ + "adpcm1" +}; + +const seibu_adpcm_interface seibu_adpcm2_intf = +{ + "adpcm2" +}; + typedef struct _seibu_adpcm_state seibu_adpcm_state; struct _seibu_adpcm_state { @@ -173,10 +183,13 @@ static DEVICE_START( seibu_adpcm ) { running_machine &machine = device->machine(); seibu_adpcm_state *state = (seibu_adpcm_state *)downcast(device)->token(); + const seibu_adpcm_interface *intf; + + intf = (const seibu_adpcm_interface *)device->static_config(); state->m_playing = 0; state->m_stream = device->machine().sound().stream_alloc(*device, 0, 1, device->clock(), state, seibu_adpcm_callback); - state->m_base = machine.region("adpcm")->base(); + state->m_base = machine.region(intf->rom_region)->base(); // because legacy device tokens are just allocated as a blob, the constructor for adpcm_state // is not called, so use placement new to force it to set up; when this is converted to a diff --git a/src/mame/audio/seibu.h b/src/mame/audio/seibu.h index 0ac388fa6e1..17bd864c1ae 100644 --- a/src/mame/audio/seibu.h +++ b/src/mame/audio/seibu.h @@ -69,6 +69,15 @@ extern const ym3812_interface seibu_ym3812_interface; extern const ym2151_interface seibu_ym2151_interface; extern const ym2203_interface seibu_ym2203_interface; +typedef struct _seibu_adpcm_interface seibu_adpcm_interface; +struct _seibu_adpcm_interface +{ + const char *rom_region; +}; + +extern const seibu_adpcm_interface seibu_adpcm1_intf; +extern const seibu_adpcm_interface seibu_adpcm2_intf; + /**************************************************************************/ #define SEIBU_COIN_INPUTS \ @@ -174,9 +183,11 @@ extern const ym2203_interface seibu_ym2203_interface; #define SEIBU_SOUND_SYSTEM_ADPCM_INTERFACE \ MCFG_SOUND_ADD("adpcm1", SEIBU_ADPCM, 8000) \ + MCFG_SOUND_CONFIG(seibu_adpcm1_intf) \ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) \ \ MCFG_SOUND_ADD("adpcm2", SEIBU_ADPCM, 8000) \ + MCFG_SOUND_CONFIG(seibu_adpcm2_intf) \ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) \ diff --git a/src/mame/drivers/cabal.c b/src/mame/drivers/cabal.c index 1f91e9b7c93..92053f00dd7 100644 --- a/src/mame/drivers/cabal.c +++ b/src/mame/drivers/cabal.c @@ -518,9 +518,11 @@ static MACHINE_CONFIG_START( cabal, cabal_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS,"mono", 0.80) MCFG_SOUND_ADD("adpcm1", SEIBU_ADPCM, 8000) /* it should use the msm5205 */ + MCFG_SOUND_CONFIG(seibu_adpcm1_intf) MCFG_SOUND_ROUTE(ALL_OUTPUTS,"mono", 0.40) MCFG_SOUND_ADD("adpcm2", SEIBU_ADPCM, 8000) /* it should use the msm5205 */ + MCFG_SOUND_CONFIG(seibu_adpcm2_intf) MCFG_SOUND_ROUTE(ALL_OUTPUTS,"mono", 0.40) MACHINE_CONFIG_END @@ -617,9 +619,11 @@ ROM_START( cabal ) ROM_LOAD16_BYTE( "sp_rom7.bin", 0x60000, 0x10000, CRC(55c44764) SHA1(7fad1f2084664b5b4d1384c8081371b0c79c4f5e) ) ROM_LOAD16_BYTE( "sp_rom8.bin", 0x60001, 0x10000, CRC(702735c9) SHA1(e4ac799dc85ff5b7c8e578611605989c78f9e8b3) ) - ROM_REGION( 0x20000, "adpcm", 0 ) /* Samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* Samples */ ROM_LOAD( "2-1s", 0x00000, 0x10000, CRC(850406b4) SHA1(23ac1650c6d6f35607a5264b3aa89868401a645a) ) - ROM_LOAD( "1-1u", 0x10000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* Samples */ + ROM_LOAD( "1-1u", 0x00000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) ) ROM_END ROM_START( cabala ) @@ -644,9 +648,11 @@ ROM_START( cabala ) ROM_REGION( 0x80000, "gfx3", 0 ) ROM_LOAD( "tad-1.5e", 0x00000, 0x80000, CRC(8324a7fe) SHA1(aed4470df35ec18e65e35bddc9c217a5019fdcbf) ) /* sprites */ - ROM_REGION( 0x20000, "adpcm", 0 ) /* Samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* Samples */ ROM_LOAD( "epr-a-2.1s", 0x00000, 0x10000, CRC(850406b4) SHA1(23ac1650c6d6f35607a5264b3aa89868401a645a) ) - ROM_LOAD( "epr-a-1.1u", 0x10000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* Samples */ + ROM_LOAD( "epr-a-1.1u", 0x00000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) ) ROM_END ROM_START( cabalus ) @@ -669,9 +675,11 @@ ROM_START( cabalus ) ROM_REGION( 0x80000, "gfx3", 0 ) ROM_LOAD( "tad-1.5e", 0x00000, 0x80000, CRC(8324a7fe) SHA1(aed4470df35ec18e65e35bddc9c217a5019fdcbf) ) /* sprites */ - ROM_REGION( 0x20000, "adpcm", 0 ) /* Samples? */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* Samples? */ ROM_LOAD( "2-1s", 0x00000, 0x10000, CRC(850406b4) SHA1(23ac1650c6d6f35607a5264b3aa89868401a645a) ) - ROM_LOAD( "1-1u", 0x10000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* Samples */ + ROM_LOAD( "1-1u", 0x00000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) ) ROM_REGION( 0x0200, "proms", 0 ) /* unknown */ ROM_LOAD( "prom05.8e", 0x0000, 0x0100, CRC(a94b18c2) SHA1(e7db4c1efc9e313e36eef3f53ae5b2e573a38920) ) @@ -698,9 +706,11 @@ ROM_START( cabalus2 ) ROM_REGION( 0x80000, "gfx3", 0 ) ROM_LOAD( "tad-1.5e", 0x00000, 0x80000, CRC(8324a7fe) SHA1(aed4470df35ec18e65e35bddc9c217a5019fdcbf) ) /* sprites */ - ROM_REGION( 0x20000, "adpcm", 0 ) /* Samples? */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* Samples */ ROM_LOAD( "2-1s", 0x00000, 0x10000, CRC(850406b4) SHA1(23ac1650c6d6f35607a5264b3aa89868401a645a) ) - ROM_LOAD( "1-1u", 0x10000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* Samples */ + ROM_LOAD( "1-1u", 0x00000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) ) ROM_REGION( 0x0200, "proms", 0 ) /* unknown */ ROM_LOAD( "prom05.8e", 0x0000, 0x0100, CRC(a94b18c2) SHA1(e7db4c1efc9e313e36eef3f53ae5b2e573a38920) ) @@ -828,9 +838,11 @@ ROM_START( cabalbl2 ) ROM_LOAD16_BYTE( "c21.bin", 0x60000, 0x10000, CRC(55c44764) SHA1(7fad1f2084664b5b4d1384c8081371b0c79c4f5e) ) ROM_LOAD16_BYTE( "c25.bin", 0x60001, 0x10000, CRC(702735c9) SHA1(e4ac799dc85ff5b7c8e578611605989c78f9e8b3) ) - ROM_REGION( 0x20000, "adpcm", 0 ) /* Samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* Samples */ ROM_LOAD( "c2.bin", 0x00000, 0x10000, CRC(850406b4) SHA1(23ac1650c6d6f35607a5264b3aa89868401a645a) ) - ROM_LOAD( "c1.bin", 0x10000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* Samples */ + ROM_LOAD( "c1.bin", 0x00000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) ) ROM_END @@ -854,13 +866,15 @@ static void seibu_sound_bootleg(running_machine &machine,const char *cpu,int len static DRIVER_INIT( cabal ) { seibu_sound_decrypt(machine,"audiocpu",0x2000); - seibu_adpcm_decrypt(machine,"adpcm"); + seibu_adpcm_decrypt(machine,"adpcm1"); + seibu_adpcm_decrypt(machine,"adpcm2"); } static DRIVER_INIT( cabalbl2 ) { seibu_sound_bootleg(machine,"audiocpu",0x2000); - seibu_adpcm_decrypt(machine,"adpcm"); + seibu_adpcm_decrypt(machine,"adpcm1"); + seibu_adpcm_decrypt(machine,"adpcm2"); } diff --git a/src/mame/drivers/deadang.c b/src/mame/drivers/deadang.c index c85e721e622..53abb6fac4c 100644 --- a/src/mame/drivers/deadang.c +++ b/src/mame/drivers/deadang.c @@ -308,9 +308,11 @@ ROM_START( deadang ) ROM_LOAD16_BYTE( "12.6j", 0x00000, 0x8000, CRC(2674d23f) SHA1(0533d80a23d917e20a703aeb833dcaccfa3a1967) ) ROM_LOAD16_BYTE( "11.6k", 0x00001, 0x8000, CRC(3dd4d81d) SHA1(94f0a13a8d3812f6879819ca186abf3a8665f7cb) ) - ROM_REGION( 0x20000, "adpcm", 0 ) + ROM_REGION( 0x10000, "adpcm1", 0 ) ROM_LOAD( "15.b11", 0x000000, 0x10000, CRC(fabd74f2) SHA1(ac70e952a8b38287613b384cdc7ca00a7f155a13) ) - ROM_LOAD( "16.11a", 0x010000, 0x10000, CRC(a8d46fc9) SHA1(3ba51bdec4057413396a152b35015f9d95253e3f) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) + ROM_LOAD( "16.11a", 0x000000, 0x10000, CRC(a8d46fc9) SHA1(3ba51bdec4057413396a152b35015f9d95253e3f) ) ROM_END ROM_START( leadang ) @@ -353,9 +355,11 @@ ROM_START( leadang ) ROM_LOAD16_BYTE( "12.6j", 0x00000, 0x8000, CRC(2674d23f) SHA1(0533d80a23d917e20a703aeb833dcaccfa3a1967) ) ROM_LOAD16_BYTE( "11.6k", 0x00001, 0x8000, CRC(3dd4d81d) SHA1(94f0a13a8d3812f6879819ca186abf3a8665f7cb) ) - ROM_REGION( 0x20000, "adpcm", 0 ) + ROM_REGION( 0x10000, "adpcm1", 0 ) ROM_LOAD( "15.b11", 0x000000, 0x10000, CRC(fabd74f2) SHA1(ac70e952a8b38287613b384cdc7ca00a7f155a13) ) - ROM_LOAD( "16.11a", 0x010000, 0x10000, CRC(a8d46fc9) SHA1(3ba51bdec4057413396a152b35015f9d95253e3f) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) + ROM_LOAD( "16.11a", 0x000000, 0x10000, CRC(a8d46fc9) SHA1(3ba51bdec4057413396a152b35015f9d95253e3f) ) ROM_END ROM_START( ghunter ) @@ -398,9 +402,11 @@ ROM_START( ghunter ) ROM_LOAD16_BYTE( "12.6j", 0x00000, 0x8000, CRC(2674d23f) SHA1(0533d80a23d917e20a703aeb833dcaccfa3a1967) ) ROM_LOAD16_BYTE( "11.6k", 0x00001, 0x8000, CRC(3dd4d81d) SHA1(94f0a13a8d3812f6879819ca186abf3a8665f7cb) ) - ROM_REGION( 0x20000, "adpcm", 0 ) + ROM_REGION( 0x10000, "adpcm1", 0 ) ROM_LOAD( "15.b11", 0x000000, 0x10000, CRC(fabd74f2) SHA1(ac70e952a8b38287613b384cdc7ca00a7f155a13) ) - ROM_LOAD( "16.11a", 0x010000, 0x10000, CRC(a8d46fc9) SHA1(3ba51bdec4057413396a152b35015f9d95253e3f) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) + ROM_LOAD( "16.11a", 0x000000, 0x10000, CRC(a8d46fc9) SHA1(3ba51bdec4057413396a152b35015f9d95253e3f) ) ROM_END /* Driver Initialization */ @@ -408,13 +414,15 @@ ROM_END static DRIVER_INIT( deadang ) { seibu_sound_decrypt(machine, "audiocpu", 0x2000); - seibu_adpcm_decrypt(machine, "adpcm"); + seibu_adpcm_decrypt(machine, "adpcm1"); + seibu_adpcm_decrypt(machine, "adpcm2"); } static DRIVER_INIT( ghunter ) { seibu_sound_decrypt(machine, "audiocpu", 0x2000); - seibu_adpcm_decrypt(machine, "adpcm"); + seibu_adpcm_decrypt(machine, "adpcm1"); + seibu_adpcm_decrypt(machine, "adpcm2"); machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x80000, 0x80001, FUNC(ghunter_trackball_low_r)); machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xb0000, 0xb0001, FUNC(ghunter_trackball_high_r));