summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/cabal.cpp
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2016-11-25 17:29:44 -0500
committer AJR <ajrhacker@users.noreply.github.com>2016-11-25 17:47:10 -0500
commit4c9814ab301c0b34f9a16fcd7bad945579d0e646 (patch)
tree391b6c9712b2096d232daf8d1a01a099b7fbbfca /src/mame/drivers/cabal.cpp
parent2aeab228e8d4dba67ee2fc26eaf9a8ac60004740 (diff)
Move SEI80BU encryption out of the SEIBU_SOUND device and make it a device of its own
Add MCFG_DEVICE_ROM to override region tag for device_rom_interface (nw)
Diffstat (limited to 'src/mame/drivers/cabal.cpp')
-rw-r--r--src/mame/drivers/cabal.cpp70
1 files changed, 43 insertions, 27 deletions
diff --git a/src/mame/drivers/cabal.cpp b/src/mame/drivers/cabal.cpp
index da52cb506d9..8181b360f0c 100644
--- a/src/mame/drivers/cabal.cpp
+++ b/src/mame/drivers/cabal.cpp
@@ -183,7 +183,7 @@ WRITE8_MEMBER(cabal_state::cabalbl_coin_w)
}
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, cabal_state )
- AM_RANGE(0x0000, 0x1fff) AM_ROM
+ AM_RANGE(0x0000, 0x1fff) AM_DEVREAD("sei80bu", sei80bu_device, data_r)
AM_RANGE(0x2000, 0x27ff) AM_RAM
AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
@@ -201,6 +201,11 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, cabal_state )
AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( sound_decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, cabal_state )
+ AM_RANGE(0x0000, 0x1fff) AM_DEVREAD("sei80bu", sei80bu_device, opcode_r)
+ AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("audiocpu", 0x8000)
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( cabalbl_sound_map, AS_PROGRAM, 8, cabal_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x2fff) AM_RAM
@@ -216,6 +221,30 @@ static ADDRESS_MAP_START( cabalbl_sound_map, AS_PROGRAM, 8, cabal_state )
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( cabalbl2_sound_map, AS_PROGRAM, 8, cabal_state )
+ AM_RANGE(0x0000, 0x1fff) AM_ROM
+ AM_RANGE(0x2000, 0x27ff) AM_RAM
+ AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
+ AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
+ AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
+ AM_RANGE(0x4005, 0x4006) AM_DEVWRITE("adpcm1", seibu_adpcm_device, adr_w)
+ AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, ym_r, ym_w)
+ AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
+ AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
+ AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
+ AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
+ AM_RANGE(0x401a, 0x401a) AM_DEVWRITE("adpcm1", seibu_adpcm_device, ctl_w)
+ AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
+ AM_RANGE(0x6005, 0x6006) AM_DEVWRITE("adpcm2", seibu_adpcm_device, adr_w)
+ AM_RANGE(0x601a, 0x601a) AM_DEVWRITE("adpcm2", seibu_adpcm_device, ctl_w)
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( cabalbl2_predecrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, cabal_state )
+ AM_RANGE(0x0000, 0x1fff) AM_ROM AM_REGION("audiocpu", 0x2000)
+ AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("audiocpu", 0x8000)
+ADDRESS_MAP_END
+
/* the bootleg has 2x z80 sample players */
WRITE8_MEMBER(cabal_state::cabalbl_1_adpcm_w)
@@ -469,7 +498,7 @@ static GFXDECODE_START( cabal )
GFXDECODE_END
-static MACHINE_CONFIG_START( cabal_base, cabal_state )
+static MACHINE_CONFIG_START( cabal, cabal_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz/2) /* verified on pcb */
@@ -478,6 +507,10 @@ static MACHINE_CONFIG_START( cabal_base, cabal_state )
MCFG_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(sound_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(sound_decrypted_opcodes_map)
+
+ MCFG_DEVICE_ADD("sei80bu", SEI80BU, 0)
+ MCFG_DEVICE_ROM("audiocpu")
MCFG_MACHINE_START_OVERRIDE(cabal_state,cabal)
@@ -504,29 +537,21 @@ static MACHINE_CONFIG_START( cabal_base, cabal_state )
MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz) /* verified on pcb */
MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("seibu_sound", seibu_sound_device, fm_irqhandler))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS,"mono", 0.80)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MCFG_SOUND_ADD("adpcm1", SEIBU_ADPCM, 8000) /* it should use the msm5205 */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS,"mono", 0.40)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
MCFG_SOUND_ADD("adpcm2", SEIBU_ADPCM, 8000) /* it should use the msm5205 */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS,"mono", 0.40)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( cabal, cabal_base )
- MCFG_DEVICE_MODIFY("seibu_sound")
- MCFG_SEIBU_SOUND_CPU_ENCRYPTED_LOW("audiocpu")
+static MACHINE_CONFIG_DERIVED( cabalbl2, cabal )
+ MCFG_DEVICE_REMOVE("sei80bu")
MCFG_DEVICE_MODIFY("audiocpu")
- MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
-MACHINE_CONFIG_END
-
-static MACHINE_CONFIG_DERIVED( cabalbl2, cabal_base )
- MCFG_DEVICE_MODIFY("seibu_sound")
- MCFG_SEIBU_SOUND_CPU_ENCRYPTED_CUSTOM("audiocpu")
-
- MCFG_DEVICE_MODIFY("audiocpu")
- MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
+ MCFG_CPU_PROGRAM_MAP(cabalbl2_sound_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(cabalbl2_predecrypted_opcodes_map)
MACHINE_CONFIG_END
@@ -891,20 +916,11 @@ DRIVER_INIT_MEMBER(cabal_state,cabal)
m_adpcm2->decrypt();
}
-DRIVER_INIT_MEMBER(cabal_state,cabalbl2)
-{
- uint8_t *decrypt = m_seibu_sound->get_custom_decrypt();
- memcpy(decrypt, memregion("audiocpu")->base()+0x2000, 0x2000);
- memcpy(decrypt+0x8000, memregion("audiocpu")->base()+0x8000, 0x8000);
- m_adpcm1->decrypt();
- m_adpcm2->decrypt();
-}
-
GAME( 1988, cabal, 0, cabal, cabalj, cabal_state, cabal, ROT0, "TAD Corporation", "Cabal (World, Joystick)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, cabala, cabal, cabal, cabalj, cabal_state, cabal, ROT0, "TAD Corporation (Alpha Trading license)", "Cabal (Korea?, Joystick)", MACHINE_SUPPORTS_SAVE ) // korea?
GAME( 1988, cabalbl, cabal, cabalbl, cabalbl,driver_device, 0, ROT0, "bootleg (Red Corporation)", "Cabal (bootleg of Joystick version, set 1, alternate sound hardware)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1988, cabalbl2,cabal, cabalbl2,cabalj, cabal_state, cabalbl2,ROT0, "bootleg", "Cabal (bootleg of Joystick version, set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1988, cabalbl2,cabal, cabalbl2,cabalj, cabal_state, cabal, ROT0, "bootleg", "Cabal (bootleg of Joystick version, set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, cabalus, cabal, cabal, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Fabtek license)", "Cabal (US set 1, Trackball)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, cabalus2,cabal, cabal, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Fabtek license)", "Cabal (US set 2, Trackball)", MACHINE_SUPPORTS_SAVE )