summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2017-05-23 13:30:12 -0400
committer AJR <ajrhacker@users.noreply.github.com>2017-05-23 13:30:12 -0400
commitd0047a3ebefb03feca0c2f32a231cf956a48a30e (patch)
treeaed6f1c8188ed4f9307e2b22e9ce96361df4b0d5
parent3f44d746de4e98a3f4b8d47d5676342a630e9477 (diff)
arabfgt: Replace protection MCU simulation with emulation of actual program
(nw) Convert classes in segas32.cpp to device_add_mconfig
-rw-r--r--src/mame/drivers/segas32.cpp149
-rw-r--r--src/mame/includes/segas32.h58
-rw-r--r--src/mame/machine/segas32.cpp33
3 files changed, 116 insertions, 124 deletions
diff --git a/src/mame/drivers/segas32.cpp b/src/mame/drivers/segas32.cpp
index f6658966dcf..8e2f9ce8f4a 100644
--- a/src/mame/drivers/segas32.cpp
+++ b/src/mame/drivers/segas32.cpp
@@ -619,6 +619,7 @@ void segas32_trackball_state::device_start()
void segas32_v25_state::device_start()
{
common_start(0);
+ decrypt_protrom();
}
void segas32_upd7725_state::device_start()
@@ -1206,11 +1207,11 @@ ADDRESS_MAP_END
/*************************************
*
- * GA2 Protection CPU memory handlers
+ * V25 Protection CPU memory handlers
*
*************************************/
-static ADDRESS_MAP_START( ga2_v25_map, AS_PROGRAM, 8, segas32_state )
+static ADDRESS_MAP_START( v25_map, AS_PROGRAM, 8, segas32_state )
AM_RANGE(0x00000, 0x0ffff) AM_ROM AM_REGION("mcu", 0)
AM_RANGE(0x10000, 0x1ffff) AM_DEVREADWRITE("dpram", mb8421_device, left_r, left_w)
AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("mcu", 0)
@@ -2233,7 +2234,7 @@ GFXDECODE_END
*************************************/
-static MACHINE_CONFIG_START( system32 )
+MACHINE_CONFIG_MEMBER(segas32_state::device_add_mconfig)
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", V60, MASTER_CLOCK/2)
@@ -2300,11 +2301,6 @@ segas32_regular_state::segas32_regular_state(const machine_config &mconfig, cons
{
}
-machine_config_constructor segas32_regular_state::device_mconfig_additions() const
-{
- return MACHINE_CONFIG_NAME( system32 );
-}
-
@@ -2315,8 +2311,8 @@ static ADDRESS_MAP_START( system32_analog_map, AS_PROGRAM, 16, segas32_state )
AM_IMPORT_FROM(system32_map)
ADDRESS_MAP_END
-static MACHINE_CONFIG_START( system32_analog )
- MCFG_FRAGMENT_ADD( system32 )
+MACHINE_CONFIG_MEMBER(segas32_analog_state::device_add_mconfig)
+ segas32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(system32_analog_map)
@@ -2331,13 +2327,13 @@ MACHINE_CONFIG_END
DEFINE_DEVICE_TYPE(SEGA_S32_ANALOG_DEVICE, segas32_analog_state, "segas32_pcb_analog", "Sega System 32 analog PCB")
segas32_analog_state::segas32_analog_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : segas32_state(mconfig, SEGA_S32_ANALOG_DEVICE, tag, owner, clock)
+ : segas32_analog_state(mconfig, SEGA_S32_ANALOG_DEVICE, tag, owner, clock)
{
}
-machine_config_constructor segas32_analog_state::device_mconfig_additions() const
+segas32_analog_state::segas32_analog_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : segas32_state(mconfig, type, tag, owner, clock)
{
- return MACHINE_CONFIG_NAME( system32_analog );
}
@@ -2353,8 +2349,8 @@ static ADDRESS_MAP_START( system32_trackball_map, AS_PROGRAM, 16, segas32_trackb
AM_IMPORT_FROM(system32_map)
ADDRESS_MAP_END
-static MACHINE_CONFIG_START( system32_trackball )
- MCFG_FRAGMENT_ADD( system32 )
+MACHINE_CONFIG_MEMBER(segas32_trackball_state::device_add_mconfig)
+ segas32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(system32_trackball_map)
@@ -2379,11 +2375,6 @@ segas32_trackball_state::segas32_trackball_state(const machine_config &mconfig,
{
}
-machine_config_constructor segas32_trackball_state::device_mconfig_additions() const
-{
- return MACHINE_CONFIG_NAME( system32_trackball );
-}
-
@@ -2394,8 +2385,8 @@ static ADDRESS_MAP_START( system32_4player_map, AS_PROGRAM, 16, segas32_state )
AM_IMPORT_FROM(system32_map)
ADDRESS_MAP_END
-static MACHINE_CONFIG_START( system32_4player )
- MCFG_FRAGMENT_ADD( system32 )
+MACHINE_CONFIG_MEMBER(segas32_4player_state::device_add_mconfig)
+ segas32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(system32_4player_map)
@@ -2409,13 +2400,13 @@ MACHINE_CONFIG_END
DEFINE_DEVICE_TYPE(SEGA_S32_4PLAYER_DEVICE, segas32_4player_state, "segas32_pcb_4player", "Sega System 32 4-player/fighting PCB")
segas32_4player_state::segas32_4player_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : segas32_state(mconfig, SEGA_S32_4PLAYER_DEVICE, tag, owner, clock)
+ : segas32_4player_state(mconfig, SEGA_S32_4PLAYER_DEVICE, tag, owner, clock)
{
}
-machine_config_constructor segas32_4player_state::device_mconfig_additions() const
+segas32_4player_state::segas32_4player_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : segas32_state(mconfig, SEGA_S32_4PLAYER_DEVICE, tag, owner, clock)
{
- return MACHINE_CONFIG_NAME( system32_4player );
}
@@ -2428,8 +2419,8 @@ static ADDRESS_MAP_START( ga2_main_map, AS_PROGRAM, 16, segas32_state )
AM_IMPORT_FROM(system32_4player_map)
ADDRESS_MAP_END
-static MACHINE_CONFIG_START( system32_v25 )
- MCFG_FRAGMENT_ADD( system32_4player )
+MACHINE_CONFIG_MEMBER(segas32_v25_state::device_add_mconfig)
+ segas32_4player_state::device_add_mconfig(config);
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(ga2_main_map)
@@ -2438,28 +2429,22 @@ static MACHINE_CONFIG_START( system32_v25 )
/* add a V25 for protection */
MCFG_CPU_ADD("mcu", V25, 10000000)
- MCFG_CPU_PROGRAM_MAP(ga2_v25_map)
- MCFG_V25_CONFIG(ga2_v25_opcode_table)
+ MCFG_CPU_PROGRAM_MAP(v25_map)
MACHINE_CONFIG_END
DEFINE_DEVICE_TYPE(SEGA_S32_V25_DEVICE, segas32_v25_state, "segas32_pcb_v25", "Sega System 32 V25 PCB")
segas32_v25_state::segas32_v25_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : segas32_state(mconfig, SEGA_S32_V25_DEVICE, tag, owner, clock)
+ : segas32_4player_state(mconfig, SEGA_S32_V25_DEVICE, tag, owner, clock)
{
}
-machine_config_constructor segas32_v25_state::device_mconfig_additions() const
-{
- return MACHINE_CONFIG_NAME( system32_v25 );
-}
-
-static MACHINE_CONFIG_START( system32_upd7725 )
- MCFG_FRAGMENT_ADD( system32_analog )
+MACHINE_CONFIG_MEMBER(segas32_upd7725_state::device_add_mconfig)
+ segas32_analog_state::device_add_mconfig(config);
/* add a upd7725; this is on the 837-8341 daughterboard which plugs into the socket on the master pcb's rom board where an fd1149 could go */
MCFG_CPU_ADD("dsp", UPD7725, 8000000) // TODO: Find real clock speed for the upd7725; this is a canned oscillator on the 837-8341 pcb
@@ -2475,15 +2460,10 @@ MACHINE_CONFIG_END
DEFINE_DEVICE_TYPE(SEGA_S32_UPD7725_DEVICE, segas32_upd7725_state, "segas32_pcb_upd7725", "Sega System 32 uPD7725 PCB")
segas32_upd7725_state::segas32_upd7725_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : segas32_state(mconfig, SEGA_S32_UPD7725_DEVICE, tag, owner, clock)
+ : segas32_analog_state(mconfig, SEGA_S32_UPD7725_DEVICE, tag, owner, clock)
{
}
-machine_config_constructor segas32_upd7725_state::device_mconfig_additions() const
-{
- return MACHINE_CONFIG_NAME( system32_upd7725 );
-}
-
@@ -2506,8 +2486,8 @@ static ADDRESS_MAP_START( system32_cd_map, AS_PROGRAM, 16, segas32_state )
AM_IMPORT_FROM(system32_map)
ADDRESS_MAP_END
-static MACHINE_CONFIG_START( system32_cd )
- MCFG_FRAGMENT_ADD( system32 )
+MACHINE_CONFIG_MEMBER(segas32_cd_state::device_add_mconfig)
+ segas32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(system32_cd_map)
@@ -2527,15 +2507,9 @@ segas32_cd_state::segas32_cd_state(const machine_config &mconfig, const char *ta
{
}
-machine_config_constructor segas32_cd_state::device_mconfig_additions() const
-{
- return MACHINE_CONFIG_NAME( system32_cd );
-}
-
-static MACHINE_CONFIG_START( multi32 )
-
+MACHINE_CONFIG_MEMBER(sega_multi32_state::device_add_mconfig)
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", V70, MULTI32_CLOCK/2)
MCFG_CPU_PROGRAM_MAP(multi32_map)
@@ -2611,13 +2585,13 @@ MACHINE_CONFIG_END
DEFINE_DEVICE_TYPE(SEGA_MULTI32_DEVICE, sega_multi32_state, "segas32_pcb_multi", "Sega Multi 32")
sega_multi32_state::sega_multi32_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : segas32_state(mconfig, SEGA_MULTI32_DEVICE, tag, owner, clock)
+ : sega_multi32_state(mconfig, SEGA_MULTI32_DEVICE, tag, owner, clock)
{
}
-machine_config_constructor sega_multi32_state::device_mconfig_additions() const
+sega_multi32_state::sega_multi32_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : segas32_state(mconfig, type, tag, owner, clock)
{
- return MACHINE_CONFIG_NAME( multi32 );
}
@@ -2629,8 +2603,8 @@ static ADDRESS_MAP_START( multi32_analog_map, AS_PROGRAM, 32, sega_multi32_analo
AM_IMPORT_FROM(multi32_map)
ADDRESS_MAP_END
-static MACHINE_CONFIG_START( multi32_analog )
- MCFG_FRAGMENT_ADD(multi32)
+MACHINE_CONFIG_MEMBER(sega_multi32_analog_state::device_add_mconfig)
+ sega_multi32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(multi32_analog_map)
@@ -2660,16 +2634,11 @@ WRITE8_MEMBER(sega_multi32_analog_state::analog_bank_w)
DEFINE_DEVICE_TYPE(SEGA_MULTI32_ANALOG_DEVICE, sega_multi32_analog_state, "segas32_pcb_multi_analog", "Sega Multi 32 analog PCB")
sega_multi32_analog_state::sega_multi32_analog_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : segas32_state(mconfig, SEGA_MULTI32_ANALOG_DEVICE, tag, owner, clock)
+ : sega_multi32_state(mconfig, SEGA_MULTI32_ANALOG_DEVICE, tag, owner, clock)
, m_analog_ports(*this, "ANALOG%u", 1)
{
}
-machine_config_constructor sega_multi32_analog_state::device_mconfig_additions() const
-{
- return MACHINE_CONFIG_NAME( multi32_analog );
-}
-
static ADDRESS_MAP_START( multi32_6player_map, AS_PROGRAM, 32, segas32_state )
ADDRESS_MAP_UNMAP_HIGH
@@ -2678,8 +2647,8 @@ static ADDRESS_MAP_START( multi32_6player_map, AS_PROGRAM, 32, segas32_state )
AM_IMPORT_FROM(multi32_map)
ADDRESS_MAP_END
-static MACHINE_CONFIG_START( multi32_6player )
- MCFG_FRAGMENT_ADD(multi32)
+MACHINE_CONFIG_MEMBER(sega_multi32_6player_state::device_add_mconfig)
+ sega_multi32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(multi32_6player_map)
@@ -2693,15 +2662,10 @@ MACHINE_CONFIG_END
DEFINE_DEVICE_TYPE(SEGA_MULTI32_6PLAYER_DEVICE, sega_multi32_6player_state, "segas32_pcb_multi_6player", "Sega Multi 32 6-player PCB")
sega_multi32_6player_state::sega_multi32_6player_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : segas32_state(mconfig, SEGA_MULTI32_6PLAYER_DEVICE, tag, owner, clock)
+ : sega_multi32_state(mconfig, SEGA_MULTI32_6PLAYER_DEVICE, tag, owner, clock)
{
}
-machine_config_constructor sega_multi32_6player_state::device_mconfig_additions() const
-{
- return MACHINE_CONFIG_NAME( multi32_6player );
-}
-
class segas32_new_state : public driver_device
{
@@ -2782,8 +2746,16 @@ static MACHINE_CONFIG_START( sega_system32_dual_direct_upd7725 )
MCFG_DEVICE_ADD("slavepcb", SEGA_S32_ANALOG_DEVICE, 0)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( sega_system32_v25 )
+static MACHINE_CONFIG_START( sega_system32_ga2 )
+ MCFG_DEVICE_ADD("mainpcb", SEGA_S32_V25_DEVICE, 0)
+ MCFG_CPU_MODIFY("mainpcb:mcu")
+ MCFG_V25_CONFIG(segas32_v25_state::ga2_opcode_table)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( sega_system32_arf )
MCFG_DEVICE_ADD("mainpcb", SEGA_S32_V25_DEVICE, 0)
+ MCFG_CPU_MODIFY("mainpcb:mcu")
+ MCFG_V25_CONFIG(segas32_v25_state::arf_opcode_table)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( sega_multi32 )
@@ -3157,9 +3129,8 @@ ROM_START( arabfgt )
ROM_LOAD( "mpr-14594f.ic34", 0x300000, 0x100000, CRC(01777645) SHA1(7bcbe7687bd80b94bd3b2b3099cdd036bf7e0cd3) )
ROM_LOAD( "mpr-14593f.ic24", 0x400000, 0x100000, CRC(aa037047) SHA1(5cb1cfb235bbbf875d2b07ac4a9130ba13d47e57) )
- ROM_REGION( 0x100000, "cpu2", 0 ) /* Protection CPU */
+ ROM_REGION( 0x10000, "mainpcb:mcu", 0 ) /* Protection CPU */
ROM_LOAD( "epr-14468-01.u3", 0x00000, 0x10000, CRC(c3c591e4) SHA1(53e48066e85b61d0c456618d14334a509b354cb3) )
- ROM_RELOAD( 0xf0000, 0x10000)
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD16_BYTE( "mpr-14599f.ic14", 0x000000, 0x200000, CRC(94f1cf10) SHA1(34ec86487bcb6726c025149c319f00a854eb7a1d) )
@@ -3192,9 +3163,8 @@ ROM_START( arabfgtu )
ROM_LOAD( "mpr-14594f.ic34", 0x300000, 0x100000, CRC(01777645) SHA1(7bcbe7687bd80b94bd3b2b3099cdd036bf7e0cd3) )
ROM_LOAD( "mpr-14593f.ic24", 0x400000, 0x100000, CRC(aa037047) SHA1(5cb1cfb235bbbf875d2b07ac4a9130ba13d47e57) )
- ROM_REGION( 0x100000, "cpu2", 0 ) /* Protection CPU */
+ ROM_REGION( 0x10000, "mainpcb:mcu", 0 ) /* Protection CPU */
ROM_LOAD( "epr-14468-01.u3", 0x00000, 0x10000, CRC(c3c591e4) SHA1(53e48066e85b61d0c456618d14334a509b354cb3) )
- ROM_RELOAD( 0xf0000, 0x10000)
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD16_BYTE( "mpr-14599f.ic14", 0x000000, 0x200000, CRC(94f1cf10) SHA1(34ec86487bcb6726c025149c319f00a854eb7a1d) )
@@ -3227,9 +3197,8 @@ ROM_START( arabfgtj )
ROM_LOAD( "mpr-14594f.ic34", 0x300000, 0x100000, CRC(01777645) SHA1(7bcbe7687bd80b94bd3b2b3099cdd036bf7e0cd3) )
ROM_LOAD( "mpr-14593f.ic24", 0x400000, 0x100000, CRC(aa037047) SHA1(5cb1cfb235bbbf875d2b07ac4a9130ba13d47e57) )
- ROM_REGION( 0x100000, "cpu2", 0 ) /* Protection CPU */
+ ROM_REGION( 0x10000, "mainpcb:mcu", 0 ) /* Protection CPU */
ROM_LOAD( "epr-14468-01.u3", 0x00000, 0x10000, CRC(c3c591e4) SHA1(53e48066e85b61d0c456618d14334a509b354cb3) )
- ROM_RELOAD( 0xf0000, 0x10000)
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD16_BYTE( "mpr-14599f.ic14", 0x000000, 0x200000, CRC(94f1cf10) SHA1(34ec86487bcb6726c025149c319f00a854eb7a1d) )
@@ -3710,7 +3679,7 @@ ROM_START( ga2 )
ROM_LOAD( "mpr-14943.ic34", 0x300000, 0x100000, CRC(24d40333) SHA1(38faf8f3eac317a163e93bd2247fe98189b13d2d) )
ROM_LOAD( "mpr-14942.ic24", 0x400000, 0x100000, CRC(a89b0e90) SHA1(e14c62418eb7f9a2deb2a6dcf635bedc1c73c253) )
- ROM_REGION( 0x100000, "mainpcb:mcu", 0 ) /* Protection CPU */
+ ROM_REGION( 0x10000, "mainpcb:mcu", 0 ) /* Protection CPU */
ROM_LOAD( "epr-14468-02.u3", 0x00000, 0x10000, CRC(77634daa) SHA1(339169d164b9ed7dc3787b084d33effdc8e9efc1) ) /* located on separate sub board */
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
@@ -3750,7 +3719,7 @@ ROM_START( ga2u )
ROM_LOAD( "mpr-14943.ic34", 0x300000, 0x100000, CRC(24d40333) SHA1(38faf8f3eac317a163e93bd2247fe98189b13d2d) )
ROM_LOAD( "mpr-14942.ic24", 0x400000, 0x100000, CRC(a89b0e90) SHA1(e14c62418eb7f9a2deb2a6dcf635bedc1c73c253) )
- ROM_REGION( 0x100000, "mainpcb:mcu", 0 ) /* Protection CPU */
+ ROM_REGION( 0x10000, "mainpcb:mcu", 0 ) /* Protection CPU */
ROM_LOAD( "epr-14468-02.u3", 0x00000, 0x10000, CRC(77634daa) SHA1(339169d164b9ed7dc3787b084d33effdc8e9efc1) ) /* located on separate sub board */
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
@@ -3785,7 +3754,7 @@ ROM_START( ga2j )
ROM_LOAD( "mpr-14943.ic34", 0x300000, 0x100000, CRC(24d40333) SHA1(38faf8f3eac317a163e93bd2247fe98189b13d2d) )
ROM_LOAD( "mpr-14942.ic24", 0x400000, 0x100000, CRC(a89b0e90) SHA1(e14c62418eb7f9a2deb2a6dcf635bedc1c73c253) )
- ROM_REGION( 0x100000, "mainpcb:mcu", 0 ) /* Protection CPU */
+ ROM_REGION( 0x10000, "mainpcb:mcu", 0 ) /* Protection CPU */
ROM_LOAD( "epr-14468-02.u3", 0x00000, 0x10000, CRC(77634daa) SHA1(339169d164b9ed7dc3787b084d33effdc8e9efc1) ) /* located on separate sub board */
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
@@ -5414,10 +5383,6 @@ void segas32_state::init_arescue(int m_hasdsp)
void segas32_state::init_arabfgt(void)
{
segas32_common_init();
-
- /* install protection handlers */
- m_maincpu->space(AS_PROGRAM).install_read_handler(0xa00100, 0xa0011f, read16_delegate(FUNC(segas32_state::arf_wakeup_protection_r),this));
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa00000, 0xa00fff, read16_delegate(FUNC(segas32_state::arabfgt_protection_r),this), write16_delegate(FUNC(segas32_state::arabfgt_protection_w),this));
}
@@ -5476,8 +5441,6 @@ void segas32_state::init_f1lap(void)
void segas32_state::init_ga2(void)
{
segas32_common_init();
-
- decrypt_ga2_protrom();
}
@@ -5610,9 +5573,9 @@ GAME( 1992, arescuej, arescue, sega_system32_dual_direct_upd7725, arescue,
GAME( 1993, alien3, 0, sega_system32_analog, alien3, segas32_new_state, alien3, ROT0, "Sega", "Alien3: The Gun (World)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1993, alien3u, alien3, sega_system32_analog, alien3, segas32_new_state, alien3, ROT0, "Sega", "Alien3: The Gun (US)", MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1991, arabfgt, 0, sega_system32_4p, arabfgt, segas32_new_state, arabfgt, ROT0, "Sega", "Arabian Fight (World)", MACHINE_IMPERFECT_GRAPHICS ) /* Released in 03.1992 */
-GAME( 1991, arabfgtu, arabfgt, sega_system32_4p, arabfgtu, segas32_new_state, arabfgt, ROT0, "Sega", "Arabian Fight (US)", MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1991, arabfgtj, arabfgt, sega_system32_4p, arabfgt, segas32_new_state, arabfgt, ROT0, "Sega", "Arabian Fight (Japan)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1991, arabfgt, 0, sega_system32_arf, arabfgt, segas32_new_state, arabfgt, ROT0, "Sega", "Arabian Fight (World)", MACHINE_IMPERFECT_GRAPHICS ) /* Released in 03.1992 */
+GAME( 1991, arabfgtu, arabfgt, sega_system32_arf, arabfgtu, segas32_new_state, arabfgt, ROT0, "Sega", "Arabian Fight (US)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1991, arabfgtj, arabfgt, sega_system32_arf, arabfgt, segas32_new_state, arabfgt, ROT0, "Sega", "Arabian Fight (Japan)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1992, brival, 0, sega_system32_4p, brival, segas32_new_state, brival, ROT0, "Sega", "Burning Rival (World)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1992, brivalj, brival, sega_system32_4p, brival, segas32_new_state, brival, ROT0, "Sega", "Burning Rival (Japan)", MACHINE_IMPERFECT_GRAPHICS )
@@ -5629,9 +5592,9 @@ GAME( 1991, f1enj, f1en, sega_system32_dual_direct, f1en, segas3
GAME( 1993, f1lap, 0, sega_system32_analog, f1lap, segas32_new_state, f1lap, ROT0, "Sega", "F1 Super Lap (World)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1993, f1lapj, f1lap, sega_system32_analog, f1lap, segas32_new_state, f1lap, ROT0, "Sega", "F1 Super Lap (Japan)", MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1992, ga2, 0, sega_system32_v25, ga2, segas32_new_state, ga2, ROT0, "Sega", "Golden Axe: The Revenge of Death Adder (World)", MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1992, ga2u, ga2, sega_system32_v25, ga2u, segas32_new_state, ga2, ROT0, "Sega", "Golden Axe: The Revenge of Death Adder (US)", MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1992, ga2j, ga2, sega_system32_v25, ga2, segas32_new_state, ga2, ROT0, "Sega", "Golden Axe: The Revenge of Death Adder (Japan)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1992, ga2, 0, sega_system32_ga2, ga2, segas32_new_state, ga2, ROT0, "Sega", "Golden Axe: The Revenge of Death Adder (World)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1992, ga2u, ga2, sega_system32_ga2, ga2u, segas32_new_state, ga2, ROT0, "Sega", "Golden Axe: The Revenge of Death Adder (US)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1992, ga2j, ga2, sega_system32_ga2, ga2, segas32_new_state, ga2, ROT0, "Sega", "Golden Axe: The Revenge of Death Adder (Japan)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1992, holo, 0, sega_system32, holo, segas32_new_state, holo, ORIENTATION_FLIP_Y, "Sega", "Holosseum (US)", MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/includes/segas32.h b/src/mame/includes/segas32.h
index 7e13162ac00..a155c341cfe 100644
--- a/src/mame/includes/segas32.h
+++ b/src/mame/includes/segas32.h
@@ -97,8 +97,6 @@ public:
DECLARE_READ16_MEMBER(darkedge_protection_r);
DECLARE_WRITE16_MEMBER(dbzvrvs_protection_w);
DECLARE_READ16_MEMBER(dbzvrvs_protection_r);
- DECLARE_READ16_MEMBER(arabfgt_protection_r);
- DECLARE_WRITE16_MEMBER(arabfgt_protection_w);
DECLARE_READ16_MEMBER(arf_wakeup_protection_r);
DECLARE_WRITE16_MEMBER(jleague_protection_w);
DECLARE_READ16_MEMBER(arescue_dsp_r);
@@ -182,7 +180,6 @@ public:
void mix_all_layers(int which, int xoffs, bitmap_rgb32 &bitmap, const rectangle &cliprect, uint8_t enablemask);
void print_mixer_data(int which);
uint32_t multi32_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index);
- void decrypt_ga2_protrom();
void update_irq_state();
void signal_v60_irq(int which);
void int_control_w(address_space &space, int offset, uint8_t data);
@@ -244,76 +241,86 @@ public:
protected:
segas32_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+ virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
virtual void device_reset() override;
};
-class segas32_regular_state : public segas32_state
+class segas32_regular_state : public segas32_state
{
public:
segas32_regular_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
- virtual machine_config_constructor device_mconfig_additions() const override;
// virtual void device_start() override;
// virtual void device_reset() override;
};
-class segas32_analog_state : public segas32_state
+class segas32_analog_state : public segas32_state
{
public:
segas32_analog_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
- virtual machine_config_constructor device_mconfig_additions() const override;
+ segas32_analog_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual void device_add_mconfig(machine_config &config) override;
// virtual void device_start() override;
// virtual void device_reset() override;
};
-class segas32_trackball_state : public segas32_state
+class segas32_trackball_state : public segas32_state
{
public:
segas32_trackball_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
- virtual machine_config_constructor device_mconfig_additions() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
};
-class segas32_4player_state : public segas32_state
+class segas32_4player_state : public segas32_state
{
public:
segas32_4player_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
- virtual machine_config_constructor device_mconfig_additions() const override;
+ segas32_4player_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual void device_add_mconfig(machine_config &config) override;
// virtual void device_start() override;
// virtual void device_reset() override;
};
-class segas32_v25_state : public segas32_state
+class segas32_v25_state : public segas32_4player_state
{
public:
segas32_v25_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ static const uint8_t arf_opcode_table[256];
+ static const uint8_t ga2_opcode_table[256];
+
protected:
- virtual machine_config_constructor device_mconfig_additions() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
// virtual void device_reset() override;
+
+private:
+ void decrypt_protrom();
};
-class segas32_upd7725_state : public segas32_state
+class segas32_upd7725_state : public segas32_analog_state
{
public:
segas32_upd7725_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
- virtual machine_config_constructor device_mconfig_additions() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
// virtual void device_reset() override;
};
-class segas32_cd_state : public segas32_state
+class segas32_cd_state : public segas32_state
{
public:
segas32_cd_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
@@ -322,23 +329,25 @@ public:
DECLARE_WRITE8_MEMBER(lamps2_w);
protected:
- virtual machine_config_constructor device_mconfig_additions() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
// virtual void device_reset() override;
};
-class sega_multi32_state : public segas32_state
+class sega_multi32_state : public segas32_state
{
public:
sega_multi32_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
- virtual machine_config_constructor device_mconfig_additions() const override;
+ sega_multi32_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
// virtual void device_reset() override;
};
-class sega_multi32_analog_state : public segas32_state
+class sega_multi32_analog_state : public sega_multi32_state
{
public:
sega_multi32_analog_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
@@ -348,7 +357,7 @@ public:
DECLARE_WRITE8_MEMBER(analog_bank_w);
protected:
- virtual machine_config_constructor device_mconfig_additions() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
// virtual void device_reset() override;
@@ -357,20 +366,17 @@ private:
uint8_t m_analog_bank;
};
-class sega_multi32_6player_state : public segas32_state
+class sega_multi32_6player_state : public sega_multi32_state
{
public:
sega_multi32_6player_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
- virtual machine_config_constructor device_mconfig_additions() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
// virtual void device_reset() override;
};
-/*----------- defined in machine/segas32.c -----------*/
-extern const uint8_t ga2_v25_opcode_table[];
-
DECLARE_DEVICE_TYPE(SEGA_S32_PCB, segas32_state)
#endif // MAME_INCLUDES_SEGAS32_H
diff --git a/src/mame/machine/segas32.cpp b/src/mame/machine/segas32.cpp
index 614608be775..8c47975a1b4 100644
--- a/src/mame/machine/segas32.cpp
+++ b/src/mame/machine/segas32.cpp
@@ -14,11 +14,11 @@
#define xxxx 0x00
-const uint8_t ga2_v25_opcode_table[256] = {
+const uint8_t segas32_v25_state::ga2_opcode_table[256] = {
xxxx,xxxx,0xEA,xxxx,xxxx,0x8B,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,0xFA,
- xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,0x49,xxxx,xxxx,xxxx,
- xxxx,xxxx,xxxx,xxxx,xxxx,0xE8,xxxx,xxxx,0x75,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,0x3B,xxxx,0x49,xxxx,xxxx,xxxx,
+ xxxx,xxxx,xxxx,xxxx,xxxx,0xE8,xxxx,xxxx,0x75,xxxx,xxxx,xxxx,xxxx,0x3A,xxxx,xxxx,
xxxx,xxxx,xxxx,xxxx,0x8D,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,0xBF,xxxx,0x88,xxxx,
xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
@@ -35,7 +35,7 @@ const uint8_t ga2_v25_opcode_table[256] = {
#undef xxxx
-void segas32_state::decrypt_ga2_protrom()
+void segas32_v25_state::decrypt_protrom()
{
int i;
uint8_t *rom = memregion("mcu")->base();
@@ -270,8 +270,30 @@ READ16_MEMBER(segas32_state::dbzvrvs_protection_r)
******************************************************************************
******************************************************************************/
+#define xxxx 0x00
-// protection ram is 8-bits wide and only occupies every other address
+const uint8_t segas32_v25_state::arf_opcode_table[256] = {
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,0x83,xxxx,xxxx,xxxx,0xEA,xxxx,xxxx,0xBC,0x73,xxxx,
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
+ 0x3A,xxxx,xxxx,0xBE,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,0x80,xxxx,
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,0x26,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,0xE8,0x8D,xxxx,0x8B,xxxx,
+ xxxx,xxxx,xxxx,0xFA,xxxx,0x8A,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,0xBA,0x88,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,0x75,xxxx,0xBF,
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,0x03,0x3B,0x8E,0x74,xxxx,xxxx,0x81,xxxx,
+ xxxx,xxxx,xxxx,0xC3,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,0xB9,0xB2,xxxx,xxxx,xxxx,xxxx,0x49,xxxx,xxxx,
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,0xEB,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,0xB8
+};
+
+#undef xxxx
+
+#if 0 // old simulation
READ16_MEMBER(segas32_state::arabfgt_protection_r)
{
int PC = space.device().safe_pc();
@@ -302,6 +324,7 @@ READ16_MEMBER(segas32_state::arf_wakeup_protection_r)
"wake up! ARF! ";
return prot[offset];
}
+#endif
/******************************************************************************
******************************************************************************