diff options
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 |
commit | 4c9814ab301c0b34f9a16fcd7bad945579d0e646 (patch) | |
tree | 391b6c9712b2096d232daf8d1a01a099b7fbbfca /src/mame/drivers/cabal.cpp | |
parent | 2aeab228e8d4dba67ee2fc26eaf9a8ac60004740 (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.cpp | 70 |
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 ) |