diff options
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 |
commit | d0047a3ebefb03feca0c2f32a231cf956a48a30e (patch) | |
tree | aed6f1c8188ed4f9307e2b22e9ce96361df4b0d5 | |
parent | 3f44d746de4e98a3f4b8d47d5676342a630e9477 (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.cpp | 149 | ||||
-rw-r--r-- | src/mame/includes/segas32.h | 58 | ||||
-rw-r--r-- | src/mame/machine/segas32.cpp | 33 |
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 /****************************************************************************** ****************************************************************************** |