arabfgt: Replace protection MCU simulation with emulation of actual program

(nw) Convert classes in segas32.cpp to device_add_mconfig
This commit is contained in:
AJR 2017-05-23 13:30:12 -04:00
parent 3f44d746de
commit d0047a3ebe
3 changed files with 116 additions and 124 deletions

View File

@ -619,6 +619,7 @@ void segas32_trackball_state::device_start()
void segas32_v25_state::device_start() void segas32_v25_state::device_start()
{ {
common_start(0); common_start(0);
decrypt_protrom();
} }
void segas32_upd7725_state::device_start() 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(0x00000, 0x0ffff) AM_ROM AM_REGION("mcu", 0)
AM_RANGE(0x10000, 0x1ffff) AM_DEVREADWRITE("dpram", mb8421_device, left_r, left_w) AM_RANGE(0x10000, 0x1ffff) AM_DEVREADWRITE("dpram", mb8421_device, left_r, left_w)
AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("mcu", 0) 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 */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", V60, MASTER_CLOCK/2) 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) AM_IMPORT_FROM(system32_map)
ADDRESS_MAP_END ADDRESS_MAP_END
static MACHINE_CONFIG_START( system32_analog ) MACHINE_CONFIG_MEMBER(segas32_analog_state::device_add_mconfig)
MCFG_FRAGMENT_ADD( system32 ) segas32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(system32_analog_map) 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") 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_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) AM_IMPORT_FROM(system32_map)
ADDRESS_MAP_END ADDRESS_MAP_END
static MACHINE_CONFIG_START( system32_trackball ) MACHINE_CONFIG_MEMBER(segas32_trackball_state::device_add_mconfig)
MCFG_FRAGMENT_ADD( system32 ) segas32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(system32_trackball_map) 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) AM_IMPORT_FROM(system32_map)
ADDRESS_MAP_END ADDRESS_MAP_END
static MACHINE_CONFIG_START( system32_4player ) MACHINE_CONFIG_MEMBER(segas32_4player_state::device_add_mconfig)
MCFG_FRAGMENT_ADD( system32 ) segas32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(system32_4player_map) 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") 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_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) AM_IMPORT_FROM(system32_4player_map)
ADDRESS_MAP_END ADDRESS_MAP_END
static MACHINE_CONFIG_START( system32_v25 ) MACHINE_CONFIG_MEMBER(segas32_v25_state::device_add_mconfig)
MCFG_FRAGMENT_ADD( system32_4player ) segas32_4player_state::device_add_mconfig(config);
MCFG_CPU_MODIFY("maincpu") MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(ga2_main_map) MCFG_CPU_PROGRAM_MAP(ga2_main_map)
@ -2438,28 +2429,22 @@ static MACHINE_CONFIG_START( system32_v25 )
/* add a V25 for protection */ /* add a V25 for protection */
MCFG_CPU_ADD("mcu", V25, 10000000) MCFG_CPU_ADD("mcu", V25, 10000000)
MCFG_CPU_PROGRAM_MAP(ga2_v25_map) MCFG_CPU_PROGRAM_MAP(v25_map)
MCFG_V25_CONFIG(ga2_v25_opcode_table)
MACHINE_CONFIG_END MACHINE_CONFIG_END
DEFINE_DEVICE_TYPE(SEGA_S32_V25_DEVICE, segas32_v25_state, "segas32_pcb_v25", "Sega System 32 V25 PCB") 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_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 );
}
MACHINE_CONFIG_MEMBER(segas32_upd7725_state::device_add_mconfig)
static MACHINE_CONFIG_START( system32_upd7725 ) segas32_analog_state::device_add_mconfig(config);
MCFG_FRAGMENT_ADD( system32_analog )
/* 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 */ /* 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 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") 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_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) AM_IMPORT_FROM(system32_map)
ADDRESS_MAP_END ADDRESS_MAP_END
static MACHINE_CONFIG_START( system32_cd ) MACHINE_CONFIG_MEMBER(segas32_cd_state::device_add_mconfig)
MCFG_FRAGMENT_ADD( system32 ) segas32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(system32_cd_map) 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 );
}
MACHINE_CONFIG_MEMBER(sega_multi32_state::device_add_mconfig)
static MACHINE_CONFIG_START( multi32 )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", V70, MULTI32_CLOCK/2) MCFG_CPU_ADD("maincpu", V70, MULTI32_CLOCK/2)
MCFG_CPU_PROGRAM_MAP(multi32_map) 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") 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) 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) AM_IMPORT_FROM(multi32_map)
ADDRESS_MAP_END ADDRESS_MAP_END
static MACHINE_CONFIG_START( multi32_analog ) MACHINE_CONFIG_MEMBER(sega_multi32_analog_state::device_add_mconfig)
MCFG_FRAGMENT_ADD(multi32) sega_multi32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(multi32_analog_map) 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") 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) 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) , 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 ) static ADDRESS_MAP_START( multi32_6player_map, AS_PROGRAM, 32, segas32_state )
ADDRESS_MAP_UNMAP_HIGH 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) AM_IMPORT_FROM(multi32_map)
ADDRESS_MAP_END ADDRESS_MAP_END
static MACHINE_CONFIG_START( multi32_6player ) MACHINE_CONFIG_MEMBER(sega_multi32_6player_state::device_add_mconfig)
MCFG_FRAGMENT_ADD(multi32) sega_multi32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(multi32_6player_map) 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") 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) 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 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) MCFG_DEVICE_ADD("slavepcb", SEGA_S32_ANALOG_DEVICE, 0)
MACHINE_CONFIG_END 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_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 MACHINE_CONFIG_END
static MACHINE_CONFIG_START( sega_multi32 ) 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-14594f.ic34", 0x300000, 0x100000, CRC(01777645) SHA1(7bcbe7687bd80b94bd3b2b3099cdd036bf7e0cd3) )
ROM_LOAD( "mpr-14593f.ic24", 0x400000, 0x100000, CRC(aa037047) SHA1(5cb1cfb235bbbf875d2b07ac4a9130ba13d47e57) ) 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_LOAD( "epr-14468-01.u3", 0x00000, 0x10000, CRC(c3c591e4) SHA1(53e48066e85b61d0c456618d14334a509b354cb3) )
ROM_RELOAD( 0xf0000, 0x10000)
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */ ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD16_BYTE( "mpr-14599f.ic14", 0x000000, 0x200000, CRC(94f1cf10) SHA1(34ec86487bcb6726c025149c319f00a854eb7a1d) ) 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-14594f.ic34", 0x300000, 0x100000, CRC(01777645) SHA1(7bcbe7687bd80b94bd3b2b3099cdd036bf7e0cd3) )
ROM_LOAD( "mpr-14593f.ic24", 0x400000, 0x100000, CRC(aa037047) SHA1(5cb1cfb235bbbf875d2b07ac4a9130ba13d47e57) ) 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_LOAD( "epr-14468-01.u3", 0x00000, 0x10000, CRC(c3c591e4) SHA1(53e48066e85b61d0c456618d14334a509b354cb3) )
ROM_RELOAD( 0xf0000, 0x10000)
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */ ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD16_BYTE( "mpr-14599f.ic14", 0x000000, 0x200000, CRC(94f1cf10) SHA1(34ec86487bcb6726c025149c319f00a854eb7a1d) ) 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-14594f.ic34", 0x300000, 0x100000, CRC(01777645) SHA1(7bcbe7687bd80b94bd3b2b3099cdd036bf7e0cd3) )
ROM_LOAD( "mpr-14593f.ic24", 0x400000, 0x100000, CRC(aa037047) SHA1(5cb1cfb235bbbf875d2b07ac4a9130ba13d47e57) ) 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_LOAD( "epr-14468-01.u3", 0x00000, 0x10000, CRC(c3c591e4) SHA1(53e48066e85b61d0c456618d14334a509b354cb3) )
ROM_RELOAD( 0xf0000, 0x10000)
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */ ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD16_BYTE( "mpr-14599f.ic14", 0x000000, 0x200000, CRC(94f1cf10) SHA1(34ec86487bcb6726c025149c319f00a854eb7a1d) ) 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-14943.ic34", 0x300000, 0x100000, CRC(24d40333) SHA1(38faf8f3eac317a163e93bd2247fe98189b13d2d) )
ROM_LOAD( "mpr-14942.ic24", 0x400000, 0x100000, CRC(a89b0e90) SHA1(e14c62418eb7f9a2deb2a6dcf635bedc1c73c253) ) 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_LOAD( "epr-14468-02.u3", 0x00000, 0x10000, CRC(77634daa) SHA1(339169d164b9ed7dc3787b084d33effdc8e9efc1) ) /* located on separate sub board */
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */ 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-14943.ic34", 0x300000, 0x100000, CRC(24d40333) SHA1(38faf8f3eac317a163e93bd2247fe98189b13d2d) )
ROM_LOAD( "mpr-14942.ic24", 0x400000, 0x100000, CRC(a89b0e90) SHA1(e14c62418eb7f9a2deb2a6dcf635bedc1c73c253) ) 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_LOAD( "epr-14468-02.u3", 0x00000, 0x10000, CRC(77634daa) SHA1(339169d164b9ed7dc3787b084d33effdc8e9efc1) ) /* located on separate sub board */
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */ 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-14943.ic34", 0x300000, 0x100000, CRC(24d40333) SHA1(38faf8f3eac317a163e93bd2247fe98189b13d2d) )
ROM_LOAD( "mpr-14942.ic24", 0x400000, 0x100000, CRC(a89b0e90) SHA1(e14c62418eb7f9a2deb2a6dcf635bedc1c73c253) ) 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_LOAD( "epr-14468-02.u3", 0x00000, 0x10000, CRC(77634daa) SHA1(339169d164b9ed7dc3787b084d33effdc8e9efc1) ) /* located on separate sub board */
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */ 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) void segas32_state::init_arabfgt(void)
{ {
segas32_common_init(); 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) void segas32_state::init_ga2(void)
{ {
segas32_common_init(); 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, 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( 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, 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_4p, arabfgtu, segas32_new_state, arabfgt, ROT0, "Sega", "Arabian Fight (US)", MACHINE_IMPERFECT_GRAPHICS ) 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_4p, arabfgt, segas32_new_state, arabfgt, ROT0, "Sega", "Arabian Fight (Japan)", 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, 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 ) 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, 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( 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, 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_v25, ga2u, segas32_new_state, ga2, ROT0, "Sega", "Golden Axe: The Revenge of Death Adder (US)", 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_v25, ga2, segas32_new_state, ga2, ROT0, "Sega", "Golden Axe: The Revenge of Death Adder (Japan)", 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 ) GAME( 1992, holo, 0, sega_system32, holo, segas32_new_state, holo, ORIENTATION_FLIP_Y, "Sega", "Holosseum (US)", MACHINE_IMPERFECT_GRAPHICS )

View File

@ -97,8 +97,6 @@ public:
DECLARE_READ16_MEMBER(darkedge_protection_r); DECLARE_READ16_MEMBER(darkedge_protection_r);
DECLARE_WRITE16_MEMBER(dbzvrvs_protection_w); DECLARE_WRITE16_MEMBER(dbzvrvs_protection_w);
DECLARE_READ16_MEMBER(dbzvrvs_protection_r); 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_READ16_MEMBER(arf_wakeup_protection_r);
DECLARE_WRITE16_MEMBER(jleague_protection_w); DECLARE_WRITE16_MEMBER(jleague_protection_w);
DECLARE_READ16_MEMBER(arescue_dsp_r); 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 mix_all_layers(int which, int xoffs, bitmap_rgb32 &bitmap, const rectangle &cliprect, uint8_t enablemask);
void print_mixer_data(int which); void print_mixer_data(int which);
uint32_t multi32_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index); uint32_t multi32_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index);
void decrypt_ga2_protrom();
void update_irq_state(); void update_irq_state();
void signal_v60_irq(int which); void signal_v60_irq(int which);
void int_control_w(address_space &space, int offset, uint8_t data); void int_control_w(address_space &space, int offset, uint8_t data);
@ -244,76 +241,86 @@ public:
protected: protected:
segas32_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); 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_start() override;
virtual void device_reset() override; virtual void device_reset() override;
}; };
class segas32_regular_state : public segas32_state class segas32_regular_state : public segas32_state
{ {
public: public:
segas32_regular_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); segas32_regular_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected: protected:
virtual machine_config_constructor device_mconfig_additions() const override;
// virtual void device_start() override; // virtual void device_start() override;
// virtual void device_reset() override; // virtual void device_reset() override;
}; };
class segas32_analog_state : public segas32_state class segas32_analog_state : public segas32_state
{ {
public: public:
segas32_analog_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); segas32_analog_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected: 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_start() override;
// virtual void device_reset() override; // virtual void device_reset() override;
}; };
class segas32_trackball_state : public segas32_state class segas32_trackball_state : public segas32_state
{ {
public: public:
segas32_trackball_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); segas32_trackball_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected: 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_start() override;
}; };
class segas32_4player_state : public segas32_state class segas32_4player_state : public segas32_state
{ {
public: public:
segas32_4player_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); segas32_4player_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected: 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_start() override;
// virtual void device_reset() override; // virtual void device_reset() override;
}; };
class segas32_v25_state : public segas32_state class segas32_v25_state : public segas32_4player_state
{ {
public: public:
segas32_v25_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 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: 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_start() override;
// virtual void device_reset() 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: public:
segas32_upd7725_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); segas32_upd7725_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected: 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_start() override;
// virtual void device_reset() override; // virtual void device_reset() override;
}; };
class segas32_cd_state : public segas32_state class segas32_cd_state : public segas32_state
{ {
public: public:
segas32_cd_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 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); DECLARE_WRITE8_MEMBER(lamps2_w);
protected: 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_start() override;
// virtual void device_reset() override; // virtual void device_reset() override;
}; };
class sega_multi32_state : public segas32_state class sega_multi32_state : public segas32_state
{ {
public: public:
sega_multi32_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); sega_multi32_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected: 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_start() override;
// virtual void device_reset() override; // virtual void device_reset() override;
}; };
class sega_multi32_analog_state : public segas32_state class sega_multi32_analog_state : public sega_multi32_state
{ {
public: public:
sega_multi32_analog_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 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); DECLARE_WRITE8_MEMBER(analog_bank_w);
protected: 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_start() override;
// virtual void device_reset() override; // virtual void device_reset() override;
@ -357,20 +366,17 @@ private:
uint8_t m_analog_bank; uint8_t m_analog_bank;
}; };
class sega_multi32_6player_state : public segas32_state class sega_multi32_6player_state : public sega_multi32_state
{ {
public: public:
sega_multi32_6player_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); sega_multi32_6player_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected: 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_start() override;
// virtual void device_reset() 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) DECLARE_DEVICE_TYPE(SEGA_S32_PCB, segas32_state)
#endif // MAME_INCLUDES_SEGAS32_H #endif // MAME_INCLUDES_SEGAS32_H

View File

@ -14,11 +14,11 @@
#define xxxx 0x00 #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,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,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,xxxx,xxxx,xxxx,xxxx,xxxx,0x3B,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,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,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,
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 #undef xxxx
void segas32_state::decrypt_ga2_protrom() void segas32_v25_state::decrypt_protrom()
{ {
int i; int i;
uint8_t *rom = memregion("mcu")->base(); 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) READ16_MEMBER(segas32_state::arabfgt_protection_r)
{ {
int PC = space.device().safe_pc(); int PC = space.device().safe_pc();
@ -302,6 +324,7 @@ READ16_MEMBER(segas32_state::arf_wakeup_protection_r)
"wake up! ARF! "; "wake up! ARF! ";
return prot[offset]; return prot[offset];
} }
#endif
/****************************************************************************** /******************************************************************************
****************************************************************************** ******************************************************************************