diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/drivers/namcos2.cpp | 445 | ||||
-rw-r--r-- | src/mame/drivers/namcos21.cpp | 111 | ||||
-rw-r--r-- | src/mame/includes/namcos2.h | 26 | ||||
-rw-r--r-- | src/mame/includes/namcos21.h | 1 | ||||
-rw-r--r-- | src/mame/machine/namco65.cpp | 208 | ||||
-rw-r--r-- | src/mame/machine/namco65.h | 95 | ||||
-rw-r--r-- | src/mame/machine/namco68.cpp | 118 | ||||
-rw-r--r-- | src/mame/machine/namco68.h | 104 | ||||
-rw-r--r-- | src/mame/machine/namcos2.cpp | 132 |
9 files changed, 775 insertions, 465 deletions
diff --git a/src/mame/drivers/namcos2.cpp b/src/mame/drivers/namcos2.cpp index 15542204f90..79f101200bf 100644 --- a/src/mame/drivers/namcos2.cpp +++ b/src/mame/drivers/namcos2.cpp @@ -575,12 +575,6 @@ WRITE8_MEMBER(namcos2_state::dpram_byte_w) m_dpram[offset] = data; } -READ8_MEMBER(namcos2_state::ack_mcu_vbl_r) -{ - m_c68->set_input_line(m37450_device::M3745X_INT1_LINE, CLEAR_LINE); - return 0; -} - /*************************************************************/ /* SHARED 68000 CPU Memory declarations */ /*************************************************************/ @@ -774,61 +768,6 @@ void namcos2_state::sound_default_am(address_map &map) map(0xd000, 0xffff).rom(); } - -/*************************************************************/ -/* 68705 IO CPU Memory declarations */ -/*************************************************************/ - -void namcos2_state::mcu_default_am(address_map &map) -{ - /* input ports and dips are mapped here */ - map(0x0000, 0x003f).ram(); /* Fill in register to stop logging */ - map(0x0000, 0x0000).nopr(); /* Keep logging quiet */ - map(0x0001, 0x0001).portr("MCUB"); - map(0x0002, 0x0002).portr("MCUC"); - map(0x0003, 0x0003).rw(FUNC(namcos2_state::namcos2_mcu_port_d_r), FUNC(namcos2_state::namcos2_mcu_port_d_w)); - map(0x0007, 0x0007).portr("MCUH"); - map(0x0010, 0x0010).rw(FUNC(namcos2_state::namcos2_mcu_analog_ctrl_r), FUNC(namcos2_state::namcos2_mcu_analog_ctrl_w)); - map(0x0011, 0x0011).rw(FUNC(namcos2_state::namcos2_mcu_analog_port_r), FUNC(namcos2_state::namcos2_mcu_analog_port_w)); - map(0x0040, 0x01bf).ram(); - map(0x01c0, 0x1fff).rom(); - map(0x2000, 0x2000).portr("DSW"); - map(0x3000, 0x3000).portr("MCUDI0"); - map(0x3001, 0x3001).portr("MCUDI1"); - map(0x3002, 0x3002).portr("MCUDI2"); - map(0x3003, 0x3003).portr("MCUDI3"); - map(0x5000, 0x57ff).rw(FUNC(namcos2_state::dpram_byte_r), FUNC(namcos2_state::dpram_byte_w)).share("dpram"); - map(0x6000, 0x6fff).nopr(); /* watchdog */ - map(0x8000, 0xffff).rom(); -} - - -/*************************************************************/ -/* 37450 (C68) IO CPU Memory declarations */ -/*************************************************************/ -READ8_MEMBER(namcos2_state::c68_p5_r) -{ - return (m_player_mux) ? ioport("MCUB2")->read() : ioport("MCUB")->read(); -} - -WRITE8_MEMBER(namcos2_state::c68_p3_w) -{ - m_player_mux = (data & 0x80) ? 1 : 0; -} - -void namcos2_state::c68_default_am(address_map &map) -{ - /* input ports and dips are mapped here */ - map(0x2000, 0x2000).portr("DSW"); - map(0x3000, 0x3000).portr("MCUDI0"); - map(0x3001, 0x3001).portr("MCUDI1"); - map(0x3002, 0x3002).portr("MCUDI2"); - map(0x3003, 0x3003).portr("MCUDI3"); - map(0x5000, 0x57ff).rw(FUNC(namcos2_state::dpram_byte_r), FUNC(namcos2_state::dpram_byte_w)).share("dpram"); - map(0x6000, 0x6fff).r(FUNC(namcos2_state::ack_mcu_vbl_r)); // VBL ack - map(0x8000, 0xffff).rom().region("c68", 0); -} - /*************************************************************/ /* */ /* NAMCO SYSTEM 2 PORT MACROS */ @@ -1724,6 +1663,53 @@ void namcos2_state::configure_c148_standard(machine_config &config) m_slave_intc->link_c148_device(m_master_intc); } +void namcos2_state::configure_c65_standard(machine_config &config) +{ + NAMCOC65(config, m_c65, C65_CPU_CLOCK); + m_c65->in_pb_callback().set_ioport("MCUB"); + m_c65->in_pc_callback().set_ioport("MCUC"); + m_c65->in_ph_callback().set_ioport("MCUH"); + m_c65->in_pdsw_callback().set_ioport("DSW"); + m_c65->di0_in_cb().set_ioport("MCUDI0"); + m_c65->di1_in_cb().set_ioport("MCUDI1"); + m_c65->di2_in_cb().set_ioport("MCUDI2"); + m_c65->di3_in_cb().set_ioport("MCUDI3"); + m_c65->an0_in_cb().set_ioport("AN0"); + m_c65->an1_in_cb().set_ioport("AN1"); + m_c65->an2_in_cb().set_ioport("AN2"); + m_c65->an3_in_cb().set_ioport("AN3"); + m_c65->an4_in_cb().set_ioport("AN4"); + m_c65->an5_in_cb().set_ioport("AN5"); + m_c65->an6_in_cb().set_ioport("AN6"); + m_c65->an7_in_cb().set_ioport("AN7"); + m_c65->dp_in_callback().set(FUNC(namcos2_state::dpram_byte_r)); + m_c65->dp_out_callback().set(FUNC(namcos2_state::dpram_byte_w)); +} + +void namcos2_state::configure_c68_standard(machine_config &config) +{ + NAMCOC68(config, m_c68new, C68_CPU_CLOCK); + m_c68new->in_pb_callback().set_ioport("MCUB"); + m_c68new->in_pb2_callback().set_ioport("MCUB2"); + m_c68new->in_pc_callback().set_ioport("MCUC"); + m_c68new->in_ph_callback().set_ioport("MCUH"); + m_c68new->in_pdsw_callback().set_ioport("DSW"); + m_c68new->di0_in_cb().set_ioport("MCUDI0"); + m_c68new->di1_in_cb().set_ioport("MCUDI1"); + m_c68new->di2_in_cb().set_ioport("MCUDI2"); + m_c68new->di3_in_cb().set_ioport("MCUDI3"); + m_c68new->an0_in_cb().set_ioport("AN0"); + m_c68new->an1_in_cb().set_ioport("AN1"); + m_c68new->an2_in_cb().set_ioport("AN2"); + m_c68new->an3_in_cb().set_ioport("AN3"); + m_c68new->an4_in_cb().set_ioport("AN4"); + m_c68new->an5_in_cb().set_ioport("AN5"); + m_c68new->an6_in_cb().set_ioport("AN6"); + m_c68new->an7_in_cb().set_ioport("AN7"); + m_c68new->dp_in_callback().set(FUNC(namcos2_state::dpram_byte_r)); + m_c68new->dp_out_callback().set(FUNC(namcos2_state::dpram_byte_w)); +} + // TODO: temp TIMER_DEVICE_CALLBACK_MEMBER(namcos2_state::screen_scanline) { @@ -1734,6 +1720,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(namcos2_state::screen_scanline) { m_master_intc->vblank_irq_trigger(); m_slave_intc->vblank_irq_trigger(); + + if (m_c65) + m_c65->ext_interrupt(HOLD_LINE); + + if (m_c68new) + m_c68new->ext_interrupt(ASSERT_LINE); } if(scanline == cur_posirq) @@ -1758,9 +1750,7 @@ MACHINE_CONFIG_START(namcos2_state::base) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos2_shared_state, irq0_line_hold, 2*60) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos2_shared_state, irq1_line_hold, 120) - MCFG_DEVICE_ADD("mcu", HD63705, C65_CPU_CLOCK) /* 2.048MHz (49.152MHz OSC/24) - I/O handling */ - MCFG_DEVICE_PROGRAM_MAP(mcu_default_am) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", namcos2_shared_state, irq0_line_hold) + configure_c65_standard(config); MCFG_QUANTUM_TIME(attotime::from_hz(12000)) /* CPU slices per frame */ @@ -1836,9 +1826,7 @@ MACHINE_CONFIG_START(namcos2_state::gollygho) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos2_shared_state, irq0_line_hold, 2*60) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos2_shared_state, irq1_line_hold, 120) - MCFG_DEVICE_ADD("mcu", HD63705, C65_CPU_CLOCK) /* 2.048MHz (49.152MHz OSC/24) - I/O handling */ - MCFG_DEVICE_PROGRAM_MAP(mcu_default_am) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", namcos2_shared_state, irq0_line_hold) + configure_c65_standard(config); MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* CPU slices per frame */ @@ -1873,6 +1861,8 @@ MACHINE_CONFIG_START(namcos2_state::gollygho) MCFG_SOUND_ROUTE(1, "rspeaker", 0.80) MACHINE_CONFIG_END + + MACHINE_CONFIG_START(namcos2_state::finallap) MCFG_DEVICE_ADD("maincpu", M68000, M68K_CPU_CLOCK) /* 12.288MHz (49.152MHz OSC/4) */ MCFG_DEVICE_PROGRAM_MAP(master_finallap_am) @@ -1886,9 +1876,7 @@ MACHINE_CONFIG_START(namcos2_state::finallap) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos2_shared_state, irq0_line_hold, 2*60) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos2_shared_state, irq1_line_hold, 120) - MCFG_DEVICE_ADD("mcu", HD63705, C65_CPU_CLOCK) /* 2.048MHz (49.152MHz OSC/24) - I/O handling */ - MCFG_DEVICE_PROGRAM_MAP(mcu_default_am) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", namcos2_shared_state, irq0_line_hold) + configure_c65_standard(config); MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* CPU slices per frame */ @@ -1948,9 +1936,7 @@ MACHINE_CONFIG_START(namcos2_state::sgunner) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos2_shared_state, irq0_line_hold, 2*60) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos2_shared_state, irq1_line_hold, 120) - MCFG_DEVICE_ADD("mcu", HD63705, C65_CPU_CLOCK) /* 2.048MHz (49.152MHz OSC/24) - I/O handling */ - MCFG_DEVICE_PROGRAM_MAP(mcu_default_am) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", namcos2_shared_state, irq0_line_hold) + configure_c65_standard(config); MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* CPU slices per frame */ @@ -2000,14 +1986,7 @@ MACHINE_CONFIG_START(namcos2_state::sgunner2) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos2_shared_state, irq0_line_hold, 2*60) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos2_shared_state, irq1_line_hold, 120) - MCFG_DEVICE_ADD("c68", M37450, C68_CPU_CLOCK) /* C68 @ 8.192MHz (49.152MHz OSC/6) - I/O handling */ - MCFG_M3745X_ADC14_CALLBACKS(IOPORT("AN0"), IOPORT("AN1"), IOPORT("AN2"), IOPORT("AN3")) - MCFG_M3745X_ADC58_CALLBACKS(IOPORT("AN4"), IOPORT("AN5"), IOPORT("AN6"), IOPORT("AN7")) - MCFG_M3745X_PORT3_CALLBACKS(IOPORT("MCUH"), WRITE8(*this, namcos2_state, c68_p3_w)) // coins/test/service - MCFG_M3745X_PORT5_CALLBACKS(READ8(*this, namcos2_state, c68_p5_r), NOOP) // muxed player 1/2 - MCFG_M3745X_PORT6_CALLBACKS(IOPORT("MCUC"), NOOP) // unused in sgunner2 - MCFG_DEVICE_PROGRAM_MAP(c68_default_am) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", namcos2_shared_state, irq0_line_assert) // 37450 maps INT1 to irq0 as it's the first external interrupt on that chip + configure_c68_standard(config); MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* CPU slices per frame */ @@ -2057,9 +2036,7 @@ MACHINE_CONFIG_START(namcos2_state::luckywld) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos2_shared_state, irq0_line_hold, 2*60) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos2_shared_state, irq1_line_hold, 120) - MCFG_DEVICE_ADD("mcu", HD63705, C65_CPU_CLOCK) /* 2.048MHz (49.152MHz OSC/24) - I/O handling */ - MCFG_DEVICE_PROGRAM_MAP(mcu_default_am) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", namcos2_shared_state, irq0_line_hold) + configure_c65_standard(config); MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* CPU slices per frame */ @@ -2112,9 +2089,7 @@ MACHINE_CONFIG_START(namcos2_state::metlhawk) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos2_shared_state, irq0_line_hold, 2*60) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos2_shared_state, irq1_line_hold, 120) - MCFG_DEVICE_ADD("mcu", HD63705, C65_CPU_CLOCK) /* 2.048MHz (49.152MHz OSC/24) - I/O handling */ - MCFG_DEVICE_PROGRAM_MAP(mcu_default_am) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", namcos2_shared_state, irq0_line_hold) + configure_c65_standard(config); MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* CPU slices per frame */ @@ -2209,9 +2184,8 @@ ROM_START( assault ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65b.bin", 0x008000, 0x008000, CRC(e9f2922a) SHA1(5767d2f85e1eb3de19192e73b02221f28b1fbb83) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65b.bin", 0x000000, 0x008000, CRC(e9f2922a) SHA1(5767d2f85e1eb3de19192e73b02221f28b1fbb83) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ NAMCOS2_GFXROM_LOAD_128K( "atobj0.bin", 0x000000, CRC(22240076) SHA1(916fc0e6b338a6dda84399df910c3c9463e6b915) ) @@ -2263,9 +2237,8 @@ ROM_START( assaultj ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65b.bin", 0x008000, 0x008000, CRC(e9f2922a) SHA1(5767d2f85e1eb3de19192e73b02221f28b1fbb83) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65b.bin", 0x000000, 0x008000, CRC(e9f2922a) SHA1(5767d2f85e1eb3de19192e73b02221f28b1fbb83) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ NAMCOS2_GFXROM_LOAD_128K( "atobj0.bin", 0x000000, CRC(22240076) SHA1(916fc0e6b338a6dda84399df910c3c9463e6b915) ) @@ -2317,9 +2290,8 @@ ROM_START( assaultp ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65b.bin", 0x008000, 0x008000, CRC(e9f2922a) SHA1(5767d2f85e1eb3de19192e73b02221f28b1fbb83) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65b.bin", 0x000000, 0x008000, CRC(e9f2922a) SHA1(5767d2f85e1eb3de19192e73b02221f28b1fbb83) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ NAMCOS2_GFXROM_LOAD_128K( "atobj0.bin", 0x000000, CRC(22240076) SHA1(916fc0e6b338a6dda84399df910c3c9463e6b915) ) @@ -2371,9 +2343,8 @@ ROM_START( burnforc ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "bu_obj-0.bin", 0x000000, 0x80000, CRC(24c919a1) SHA1(ddf5bfbf1bbe2a10d6708b618b77f1d6d7862372) ) @@ -2423,9 +2394,8 @@ ROM_START( burnforco ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "bu_obj-0.bin", 0x000000, 0x80000, CRC(24c919a1) SHA1(ddf5bfbf1bbe2a10d6708b618b77f1d6d7862372) ) @@ -2476,9 +2446,8 @@ ROM_START( cosmogng ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "co1obj0.bin", 0x000000, 0x80000, CRC(5df8ce0c) SHA1(afb9fb6e048af5aed8976192b847c0674c5e5ce1) ) @@ -2522,9 +2491,8 @@ ROM_START( cosmogngj ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "co1obj0.bin", 0x000000, 0x80000, CRC(5df8ce0c) SHA1(afb9fb6e048af5aed8976192b847c0674c5e5ce1) ) @@ -2568,9 +2536,8 @@ ROM_START( dirtfoxj ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "df1_obj0.bin", 0x000000, 0x80000, CRC(b6bd1a68) SHA1(38677b54cd257411db499ba03b9176422797bf64) ) @@ -2621,9 +2588,8 @@ ROM_START( dsaber ) ROM_RELOAD( 0x010000, 0x020000 ) ROM_LOAD( "do1 snd1.snd1", 0x030000, 0x020000, CRC(c4ca6f3f) SHA1(829a053451be07b296fb4d97818d59eb1e68c807) ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "do obj-0a.obj0", 0x000000, 0x80000, CRC(f08c6648) SHA1(ac5221ba159f2390060cbbb7d9cd8148c7bb4a02) ) @@ -2672,9 +2638,8 @@ ROM_START( dsabera ) ROM_RELOAD( 0x010000, 0x020000 ) ROM_LOAD( "do1 snd1.snd1", 0x030000, 0x020000, CRC(c4ca6f3f) SHA1(829a053451be07b296fb4d97818d59eb1e68c807) ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "do obj-0a.obj0", 0x000000, 0x80000, CRC(f08c6648) SHA1(ac5221ba159f2390060cbbb7d9cd8148c7bb4a02) ) @@ -2722,9 +2687,8 @@ ROM_START( dsaberj ) ROM_RELOAD( 0x010000, 0x020000 ) ROM_LOAD( "do1 snd1.snd1", 0x030000, 0x020000, CRC(c4ca6f3f) SHA1(829a053451be07b296fb4d97818d59eb1e68c807) ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "do obj-0a.obj0", 0x000000, 0x80000, CRC(f08c6648) SHA1(ac5221ba159f2390060cbbb7d9cd8148c7bb4a02) ) @@ -2771,9 +2735,8 @@ ROM_START( finallap ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* no external MCU ROM? previously loaded type C, but the game predates it */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_FILL( 0, 0x200000, 0xff ) @@ -2826,9 +2789,8 @@ ROM_START( finallapd ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* no external MCU ROM? previously loaded type C, but the game predates it */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_FILL( 0, 0x200000, 0xff ) @@ -2881,9 +2843,8 @@ ROM_START( finallapc ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* no external MCU ROM? previously loaded type C, but the game predates it */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_FILL( 0, 0x200000, 0xff ) @@ -2936,9 +2897,8 @@ ROM_START( finallapjc ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* no external MCU ROM? previously loaded type C, but the game predates it */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_FILL( 0, 0x200000, 0xff ) @@ -2991,9 +2951,8 @@ ROM_START( finallapjb ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* no external MCU ROM? previously loaded type C, but the game predates it */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_FILL( 0, 0x200000, 0xff ) @@ -3045,9 +3004,8 @@ ROM_START( finalap2 ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) /* not sure */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "fl2obj0", 0x000000, 0x80000, CRC(3657dd7a) SHA1(8f286ec0642b09ff42bf0dbd784ae257d4ab278a) ) @@ -3102,9 +3060,8 @@ ROM_START( finalap2j ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) /* not sure */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "fl2obj0", 0x000000, 0x80000, CRC(3657dd7a) SHA1(8f286ec0642b09ff42bf0dbd784ae257d4ab278a) ) @@ -3160,9 +3117,8 @@ ROM_START( finalap3 ) // this set displays MOTION (Ver. 3) in the test mode menu ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* should be c68 */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "flt_obj-0.4c", 0x000000, 0x80000, CRC(eab19ec6) SHA1(2859e88b94aa873f3b6ba22790f2211f3e172dd1) ) @@ -3221,9 +3177,8 @@ ROM_START( finalap3a ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* should be c68 */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "flt_obj-0.4c", 0x000000, 0x80000, CRC(eab19ec6) SHA1(2859e88b94aa873f3b6ba22790f2211f3e172dd1) ) @@ -3285,9 +3240,8 @@ ROM_START( finalap3j ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* should be c68 */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "flt_obj-0.4c", 0x000000, 0x80000, CRC(eab19ec6) SHA1(2859e88b94aa873f3b6ba22790f2211f3e172dd1) ) @@ -3345,11 +3299,8 @@ ROM_START( finalap3jc ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* M37450S2FP I/O MCU */ - /* The M37450 is unemulated so we're using the C65/6805 program instead. - This particular M37450 variant has no internal ROM. */ - ROM_LOAD( "c68.3d", 0x000000, 0x002000, BAD_DUMP CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c68.3f", 0x008000, 0x008000, CRC(ca64550a) SHA1(38d1ad1b1287cadef0c999aff9357927315f8e6b) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* should be c68 */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "flt_obj-0.4c", 0x000000, 0x80000, CRC(eab19ec6) SHA1(2859e88b94aa873f3b6ba22790f2211f3e172dd1) ) @@ -3406,9 +3357,8 @@ ROM_START( finalap3bl ) // bootleg set ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* should be c68 */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "fltobj0", 0x000000, 0x80000, CRC(eab19ec6) SHA1(2859e88b94aa873f3b6ba22790f2211f3e172dd1) ) @@ -3466,9 +3416,8 @@ ROM_START( finehour ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "fh1_ob0.bin", 0x000000, 0x80000, CRC(b1fd86f1) SHA1(5504ca1a83c329a19d5632b9ac40cfa7e8ced304) ) @@ -3680,9 +3629,8 @@ ROM_START( fourtrax ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "fx_obj-0.4c", 0x000000, 0x040000, CRC(1aa60ffa) SHA1(1fa625a52c763b8db718af14e9f3cc3e076ff83b) ) @@ -3745,9 +3693,8 @@ ROM_START( fourtraxa ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "fx_obj-0.4c", 0x000000, 0x040000, CRC(1aa60ffa) SHA1(1fa625a52c763b8db718af14e9f3cc3e076ff83b) ) @@ -3812,9 +3759,8 @@ ROM_START( marvland ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ NAMCOS2_GFXROM_LOAD_256K( "mv1-obj0.bin", 0x000000, CRC(73a29361) SHA1(fc8ac9a063c1f18ae619ddca3062491774c86040) ) @@ -3863,9 +3809,8 @@ ROM_START( marvlandj ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ NAMCOS2_GFXROM_LOAD_256K( "mv1-obj0.bin", 0x000000, CRC(73a29361) SHA1(fc8ac9a063c1f18ae619ddca3062491774c86040) ) @@ -3912,9 +3857,8 @@ ROM_START( metlhawk ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */ ROM_LOAD32_BYTE( "mhobj-4.5c", 0x000000, 0x40000, CRC(e3590e1a) SHA1(9afffa54a63e676f5d78a01c76ca50cd795dd6e9) ) @@ -3983,9 +3927,8 @@ ROM_START( metlhawkj ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */ ROM_LOAD32_BYTE( "mhobj-4.5c", 0x000000, 0x40000, CRC(e3590e1a) SHA1(9afffa54a63e676f5d78a01c76ca50cd795dd6e9) ) @@ -4054,9 +3997,8 @@ ROM_START( mirninja ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65b.bin", 0x008000, 0x008000, CRC(e9f2922a) SHA1(5767d2f85e1eb3de19192e73b02221f28b1fbb83) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65b.bin", 0x000000, 0x008000, CRC(e9f2922a) SHA1(5767d2f85e1eb3de19192e73b02221f28b1fbb83) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ NAMCOS2_GFXROM_LOAD_128K( "mn_obj0.bin", 0x000000, CRC(6bd1e290) SHA1(11e5f7adef0d7a519246c6d88f9371e49a6b49e9) ) @@ -4109,9 +4051,8 @@ ROM_START( ordyne ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2_c65b.3f", 0x008000, 0x008000, CRC(e9f2922a) SHA1(5767d2f85e1eb3de19192e73b02221f28b1fbb83) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2_c65b.3f", 0x000000, 0x008000, CRC(e9f2922a) SHA1(5767d2f85e1eb3de19192e73b02221f28b1fbb83) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ NAMCOS2_GFXROM_LOAD_128K( "or_obj-0.obj0", 0x000000, CRC(67b2b9e4) SHA1(4e589c28ed23224e40d3c68055ada0136cbf94cb) ) @@ -4168,9 +4109,8 @@ ROM_START( ordyneje ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2_c65b.3f", 0x008000, 0x008000, CRC(e9f2922a) SHA1(5767d2f85e1eb3de19192e73b02221f28b1fbb83) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2_c65b.3f", 0x000000, 0x008000, CRC(e9f2922a) SHA1(5767d2f85e1eb3de19192e73b02221f28b1fbb83) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ NAMCOS2_GFXROM_LOAD_128K( "or_obj-0.obj0", 0x000000, CRC(67b2b9e4) SHA1(4e589c28ed23224e40d3c68055ada0136cbf94cb) ) @@ -4227,9 +4167,8 @@ ROM_START( ordynej ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2_c65b.3f", 0x008000, 0x008000, CRC(e9f2922a) SHA1(5767d2f85e1eb3de19192e73b02221f28b1fbb83) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2_c65b.3f", 0x000000, 0x008000, CRC(e9f2922a) SHA1(5767d2f85e1eb3de19192e73b02221f28b1fbb83) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ NAMCOS2_GFXROM_LOAD_128K( "or_obj-0.obj0", 0x000000, CRC(67b2b9e4) SHA1(4e589c28ed23224e40d3c68055ada0136cbf94cb) ) @@ -4286,9 +4225,8 @@ ROM_START( phelios ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2_c65c.3f", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2_c65c.3f", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ NAMCOS2_GFXROM_LOAD_256K( "ps_obj-0.obj0", 0x000000, CRC(f323db2b) SHA1(fa3c42c618da06af161ad3f8aa1283e9c4bd63c0) ) @@ -4344,9 +4282,8 @@ ROM_START( pheliosj ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2_c65c.3f", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2_c65c.3f", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ NAMCOS2_GFXROM_LOAD_256K( "ps_obj-0.obj0", 0x000000, CRC(f323db2b) SHA1(fa3c42c618da06af161ad3f8aa1283e9c4bd63c0) ) @@ -4403,9 +4340,8 @@ ROM_START( rthun2 ) ROM_RELOAD( 0x010000, 0x020000 ) ROM_LOAD( "rst1_snd1.bin", 0x030000, 0x020000, CRC(00445a4f) SHA1(2e136e3c38e4a1b69f80a19e07555f3269b7beb1) ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "rst1_obj0.bin", 0x000000, 0x80000, CRC(e5cb82c1) SHA1(2dc1922ecfd9e52af8c4a1edac1df343be64b499) ) @@ -4449,9 +4385,8 @@ ROM_START( rthun2j ) ROM_RELOAD( 0x010000, 0x020000 ) ROM_LOAD( "rst1_snd1.bin", 0x030000, 0x020000, CRC(00445a4f) SHA1(2e136e3c38e4a1b69f80a19e07555f3269b7beb1) ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "rst1_obj0.bin", 0x000000, 0x80000, CRC(e5cb82c1) SHA1(2dc1922ecfd9e52af8c4a1edac1df343be64b499) ) @@ -4502,9 +4437,8 @@ ROM_START( sgunner ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "c68.3d", 0x000000, 0x002000, BAD_DUMP CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c68.3f", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c68.3f", 0x000000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) /* not sure */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "sn_obj0.8c", 0x000000, 0x80000, CRC(bbae38f7) SHA1(7a40ade13307791f5c5d300882f9a38e18c411d6) ) @@ -4553,9 +4487,8 @@ ROM_START( sgunnerj ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "c68.3d", 0x000000, 0x002000, BAD_DUMP CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c68.3f", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c68.3f", 0x000000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) /* not sure */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "sn_obj0.8c", 0x000000, 0x80000, CRC(bbae38f7) SHA1(7a40ade13307791f5c5d300882f9a38e18c411d6) ) @@ -4604,8 +4537,8 @@ ROM_START( sgunner2 ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x8000, "c68", 0 ) /* C68 (M37450) I/O MCU program */ - ROM_LOAD( "sys2_c68.3f", 0x000000, 0x008000, CRC(ca64550a) SHA1(38d1ad1b1287cadef0c999aff9357927315f8e6b) ) + ROM_REGION( 0x8000, "c68mcu:external", ROMREGION_ERASE00 ) /* C68 (M37450) I/O MCU program */ + /* external ROM not populated, unclear how it would map */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "sns_obj0.bin", 0x000000, 0x80000, CRC(c762445c) SHA1(108170c9a5c82c23c1ac09f91195137ca05989f4) ) @@ -4658,12 +4591,8 @@ ROM_START( sgunner2j ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) - - ROM_REGION( 0x8000, "c68", 0 ) /* C68 (M37450) I/O MCU program */ - ROM_LOAD( "sys2_c68.3f", 0x000000, 0x008000, CRC(ca64550a) SHA1(38d1ad1b1287cadef0c999aff9357927315f8e6b) ) + ROM_REGION( 0x8000, "c68mcu:external", ROMREGION_ERASE00 ) /* C68 (M37450) I/O MCU program */ + /* external ROM not populated, unclear how it would map */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "sns_obj0.bin", 0x000000, 0x80000, CRC(c762445c) SHA1(108170c9a5c82c23c1ac09f91195137ca05989f4) ) @@ -4716,9 +4645,8 @@ ROM_START( sws ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "c68.3d", 0x000000, 0x002000, BAD_DUMP CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c68.3f", 0x008000, 0x008000, CRC(ca64550a) SHA1(38d1ad1b1287cadef0c999aff9357927315f8e6b) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* should be c68 */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "ss1_obj0.5b", 0x000000, 0x80000, CRC(9bd6add1) SHA1(34595987670d7f64ba18a840e98667b96ae5e4bf) ) @@ -4760,9 +4688,8 @@ ROM_START( sws92 ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "c68.3d", 0x000000, 0x002000, BAD_DUMP CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c68.3f", 0x008000, 0x008000, CRC(ca64550a) SHA1(38d1ad1b1287cadef0c999aff9357927315f8e6b) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* should be c68 */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "sss_obj0.bin", 0x000000, 0x80000, CRC(375e8f1f) SHA1(b737bcceb498a66593d06ef102958bea90032106) ) @@ -4806,9 +4733,8 @@ ROM_START( sws92g ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "c68.3d", 0x000000, 0x002000, BAD_DUMP CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c68.3f", 0x008000, 0x008000, CRC(ca64550a) SHA1(38d1ad1b1287cadef0c999aff9357927315f8e6b) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* should be c68 */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "sss_obj0.bin", 0x000000, 0x80000, CRC(375e8f1f) SHA1(b737bcceb498a66593d06ef102958bea90032106) ) @@ -4854,9 +4780,8 @@ ROM_START( sws93 ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "sst_obj0.bin", 0x000000, 0x80000, CRC(4089dfd7) SHA1(d37fb08d03a4d3f87b10a8e73bbb1817543396ff) ) @@ -4900,9 +4825,8 @@ ROM_START( suzuka8h ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) /* not sure */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "eh1-obj0.bin", 0x000000, 0x80000, CRC(864b6816) SHA1(72d831b631afb2848578bd49cd7d3e12a78644b4) ) @@ -4952,9 +4876,8 @@ ROM_START( suzuka8hj ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) /* not sure */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "eh1-obj0.bin", 0x000000, 0x80000, CRC(864b6816) SHA1(72d831b631afb2848578bd49cd7d3e12a78644b4) ) @@ -5004,10 +4927,8 @@ ROM_START( suzuk8h2 ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "c68.3d", 0x000000, 0x002000, BAD_DUMP CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c68.3f", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) - /*There is no C65 on the board. There is C68 instead */ + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c68.3f", 0x000000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) /* should be c68 */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "ehs1-obj0.3p", 0x000000, 0x80000, CRC(a0acf307) SHA1(6d79d2dd00da4f8f0462245f42a9d88b6ad632b1) ) @@ -5064,10 +4985,8 @@ ROM_START( suzuk8h2j ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "c68.3d", 0x000000, 0x002000, BAD_DUMP CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c68.3f", 0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) - /*There is no C65 on the board. There is C68 instead */ + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c68.3f", 0x000000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) /* should be c68 */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "ehs1-obj0.3p", 0x000000, 0x80000, CRC(a0acf307) SHA1(6d79d2dd00da4f8f0462245f42a9d88b6ad632b1) ) @@ -5124,9 +5043,8 @@ ROM_START( valkyrie ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ NAMCOS2_GFXROM_LOAD_256K( "wdobj0.bin", 0x000000, CRC(e8089451) SHA1(f4d05df0015de01ec570f5f89ea11592204e4fe2) ) @@ -5183,9 +5101,8 @@ ROM_START( kyukaidk ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "ky1_o0.bin", 0x000000, 0x80000, CRC(ebec5132) SHA1(8d2dec3f1cd27c203899bb715a9983fff7ab820d) ) @@ -5233,9 +5150,8 @@ ROM_START( kyukaidko ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "ky1_o0.bin", 0x000000, 0x80000, CRC(ebec5132) SHA1(8d2dec3f1cd27c203899bb715a9983fff7ab820d) ) @@ -5283,9 +5199,8 @@ ROM_START( gollygho ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x0000, 0x2000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "gl1edr0c.ic7", 0x8000, 0x8000, CRC(db60886f) SHA1(a1183c058c0470a4ef8b0f69a3637b1640c5b5a4) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "gl1edr0c.ic7", 0x0000, 0x8000, CRC(db60886f) SHA1(a1183c058c0470a4ef8b0f69a3637b1640c5b5a4) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "gl1obj0.5b", 0x000000, 0x40000, CRC(6809d267) SHA1(8a0f636067974e51659bd05a3c17819c630d70e3) ) @@ -5332,9 +5247,8 @@ ROM_START( bubbletr ) /* All labels were hand written and included the rom size, ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x0000, 0x2000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "bt1edr0a.ic7", 0x8000, 0x8000, CRC(155b02fc) SHA1(191683c19f756ac150b8e037f46a6daca1a082fa) ) /* dated 4/24 */ + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "bt1edr0a.ic7", 0x0000, 0x8000, CRC(155b02fc) SHA1(191683c19f756ac150b8e037f46a6daca1a082fa) ) /* dated 4/24 */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "bt1-obj0.5b", 0x000000, 0x80000, CRC(16b5dc04) SHA1(57cc4b7907442f922102fbd61e470c149f0379ac) ) /* dated 4/24 */ @@ -5381,9 +5295,8 @@ ROM_START( bubbletrj ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x0000, 0x2000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "bt1edr0a.ic7", 0x8000, 0x8000, CRC(155b02fc) SHA1(191683c19f756ac150b8e037f46a6daca1a082fa) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "bt1edr0a.ic7", 0x0000, 0x8000, CRC(155b02fc) SHA1(191683c19f756ac150b8e037f46a6daca1a082fa) ) ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "bt1-obj0.5b", 0x000000, 0x80000, CRC(16b5dc04) SHA1(57cc4b7907442f922102fbd61e470c149f0379ac) ) @@ -5538,9 +5451,8 @@ ROM_START( luckywld ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "c68.3d", 0x000000, 0x002000, BAD_DUMP CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - /* MCU code only, C68PRG socket is unpopulated on real Lucky & Wild PCB */ + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* should be c68 */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "lw1obj0.3p", 0x000000, 0x80000, CRC(21485830) SHA1(e55a1f6df90c17b9c49e2b08c423b9be86996659) ) @@ -5604,9 +5516,8 @@ ROM_START( luckywldj ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "c68.3d", 0x000000, 0x002000, BAD_DUMP CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - /* MCU code only, C68PRG socket is unpopulated on real Lucky & Wild PCB */ + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + /* should be c68 */ ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */ ROM_LOAD( "lw1obj0.3p", 0x000000, 0x80000, CRC(21485830) SHA1(e55a1f6df90c17b9c49e2b08c423b9be86996659) ) diff --git a/src/mame/drivers/namcos21.cpp b/src/mame/drivers/namcos21.cpp index 6a2dd35d16b..d7a135d46bc 100644 --- a/src/mame/drivers/namcos21.cpp +++ b/src/mame/drivers/namcos21.cpp @@ -1552,26 +1552,27 @@ void namcos21_state::sound_map(address_map &map) /* I/O HD63705 MCU Memory declarations */ /*************************************************************/ -void namcos21_state::mcu_map(address_map &map) -{ - map(0x0000, 0x003f).ram(); - map(0x0000, 0x0000).nopr(); - map(0x0001, 0x0001).portr("PORTB"); /* p1,p2 start */ - map(0x0002, 0x0002).portr("PORTC"); /* coins */ - map(0x0003, 0x0003).rw(FUNC(namcos21_state::namcos2_mcu_port_d_r), FUNC(namcos21_state::namcos2_mcu_port_d_w)); - map(0x0007, 0x0007).portr("PORTH"); /* fire buttons */ - map(0x0010, 0x0010).rw(FUNC(namcos21_state::namcos2_mcu_analog_ctrl_r), FUNC(namcos21_state::namcos2_mcu_analog_ctrl_w)); - map(0x0011, 0x0011).rw(FUNC(namcos21_state::namcos2_mcu_analog_port_r), FUNC(namcos21_state::namcos2_mcu_analog_port_w)); - map(0x0040, 0x01bf).ram(); - map(0x01c0, 0x1fff).rom(); - map(0x2000, 0x2000).portr("DSW"); - map(0x3000, 0x3000).portr("DIAL0"); - map(0x3001, 0x3001).portr("DIAL1"); - map(0x3002, 0x3002).portr("DIAL2"); - map(0x3003, 0x3003).portr("DIAL3"); - map(0x5000, 0x57ff).rw(FUNC(namcos21_state::namcos2_dualportram_byte_r), FUNC(namcos21_state::namcos2_dualportram_byte_w)).share("mpdualportram"); - map(0x6000, 0x6fff).nopr(); /* watchdog */ - map(0x8000, 0xffff).rom(); +void namcos21_state::configure_c65_namcos21(machine_config &config) +{ + NAMCOC65(config, m_c65, 2048000); + m_c65->in_pb_callback().set_ioport("PORTB"); + m_c65->in_pc_callback().set_ioport("PORTC"); + m_c65->in_ph_callback().set_ioport("PORTH"); + m_c65->in_pdsw_callback().set_ioport("DSW"); + m_c65->di0_in_cb().set_ioport("DIAL0"); + m_c65->di1_in_cb().set_ioport("DIAL1"); + m_c65->di2_in_cb().set_ioport("DIAL2"); + m_c65->di3_in_cb().set_ioport("DIAL3"); + m_c65->an0_in_cb().set_ioport("AN0"); + m_c65->an1_in_cb().set_ioport("AN1"); + m_c65->an2_in_cb().set_ioport("AN2"); + m_c65->an3_in_cb().set_ioport("AN3"); + m_c65->an4_in_cb().set_ioport("AN4"); + m_c65->an5_in_cb().set_ioport("AN5"); + m_c65->an6_in_cb().set_ioport("AN6"); + m_c65->an7_in_cb().set_ioport("AN7"); + m_c65->dp_in_callback().set(FUNC(namcos21_state::namcos2_dualportram_byte_r)); + m_c65->dp_out_callback().set(FUNC(namcos21_state::namcos2_dualportram_byte_w)); } @@ -1891,6 +1892,9 @@ TIMER_DEVICE_CALLBACK_MEMBER(namcos21_state::screen_scanline) m_slave_intc->vblank_irq_trigger(); if(m_gpu_intc) m_gpu_intc->vblank_irq_trigger(); + + if (m_c65) + m_c65->ext_interrupt(HOLD_LINE); } if(m_gpu_intc != nullptr) @@ -1924,9 +1928,7 @@ MACHINE_CONFIG_START(namcos21_state::namcos21) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos21_state, irq0_line_hold, 2*60) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos21_state, irq1_line_hold, 120) - MCFG_DEVICE_ADD("mcu", HD63705,2048000) /* IO */ - MCFG_DEVICE_PROGRAM_MAP(mcu_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", namcos21_state, irq0_line_hold) + configure_c65_namcos21(config); MCFG_DEVICE_ADD("dspmaster", TMS32025,24000000) /* 24 MHz? overclocked */ MCFG_DEVICE_PROGRAM_MAP(master_dsp_program) @@ -1991,9 +1993,7 @@ MACHINE_CONFIG_START(namcos21_state::driveyes) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos21_state, irq0_line_hold, 2*60) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos21_state, irq1_line_hold, 120) - MCFG_DEVICE_ADD("mcu", HD63705,2048000) /* IO */ - MCFG_DEVICE_PROGRAM_MAP(mcu_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", namcos21_state, irq0_line_hold) + configure_c65_namcos21(config); MCFG_DEVICE_ADD("dsp", TMS32025,24000000*2) /* 24 MHz? overclocked */ MCFG_DEVICE_PROGRAM_MAP(winrun_dsp_program) @@ -2052,9 +2052,7 @@ MACHINE_CONFIG_START(namcos21_state::winrun) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos21_state, irq0_line_hold, 2*60) MCFG_DEVICE_PERIODIC_INT_DRIVER(namcos21_state, irq1_line_hold, 120) - MCFG_DEVICE_ADD("mcu", HD63705,2048000) /* IO */ - MCFG_DEVICE_PROGRAM_MAP(mcu_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", namcos21_state, irq0_line_hold) + configure_c65_namcos21(config); MCFG_DEVICE_ADD("dsp", TMS32025,24000000) /* 24 MHz? overclocked */ MCFG_DEVICE_PROGRAM_MAP(winrun_dsp_program) @@ -2116,9 +2114,8 @@ ROM_START( aircomb ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x20000, "dspmaster", 0 ) /* Master DSP */ ROM_LOAD( "c67.bin", 0, 0x2000, CRC(6bd8988e) SHA1(c9ec18d5f88d53976b94444eedc64d5568155958) ) @@ -2177,9 +2174,8 @@ ROM_START( aircombj ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x20000, "dspmaster", 0 ) /* Master DSP */ ROM_LOAD( "c67.bin", 0, 0x2000, CRC(6bd8988e) SHA1(c9ec18d5f88d53976b94444eedc64d5568155958) ) @@ -2238,9 +2234,8 @@ ROM_START( cybsled ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x20000, "dspmaster", 0 ) /* Master DSP */ ROM_LOAD( "c67.bin", 0, 0x2000, CRC(6bd8988e) SHA1(c9ec18d5f88d53976b94444eedc64d5568155958) ) @@ -2297,9 +2292,8 @@ ROM_START( cybsledj ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x20000, "dspmaster", 0 ) /* Master DSP */ ROM_LOAD( "c67.bin", 0, 0x2000, CRC(6bd8988e) SHA1(c9ec18d5f88d53976b94444eedc64d5568155958) ) @@ -2365,9 +2359,8 @@ We load the "r" set, then load set2's sound CPU code over it to keep the "r" rom ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x10000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x20000, "dsp", ROMREGION_ERASEFF ) /* C67 - DSP */ @@ -2414,9 +2407,8 @@ ROM_START( starblad ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x20000, "dspmaster", 0 ) /* Master DSP */ ROM_LOAD( "c67.bin", 0, 0x2000, CRC(6bd8988e) SHA1(c9ec18d5f88d53976b94444eedc64d5568155958) ) @@ -2467,9 +2459,8 @@ ROM_START( starbladj ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x20000, "dspmaster", 0 ) /* Master DSP */ ROM_LOAD( "c67.bin", 0, 0x2000, CRC(6bd8988e) SHA1(c9ec18d5f88d53976b94444eedc64d5568155958) ) @@ -2520,9 +2511,8 @@ ROM_START( solvalou ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x20000, "dspmaster", 0 ) /* Master DSP */ ROM_LOAD( "c67.bin", 0, 0x2000, CRC(6bd8988e) SHA1(c9ec18d5f88d53976b94444eedc64d5568155958) ) @@ -2571,9 +2561,8 @@ ROM_START( winrun ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x10000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x20000, "dsp", ROMREGION_ERASEFF ) /* DSP */ @@ -2637,9 +2626,8 @@ ROM_START( winrungp ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x10000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x20000, "dsp", ROMREGION_ERASEFF ) /* DSP */ @@ -2686,9 +2674,8 @@ ROM_START( winrun91 ) ROM_CONTINUE( 0x010000, 0x01c000 ) ROM_RELOAD( 0x010000, 0x020000 ) - ROM_REGION( 0x10000, "mcu", 0 ) /* I/O MCU */ - ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) - ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) + ROM_REGION( 0x8000, "c65mcu:external", ROMREGION_ERASE00 ) /* I/O MCU */ + ROM_LOAD( "sys2c65c.bin", 0x000000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) ROM_REGION( 0x20000, "dsp", ROMREGION_ERASEFF ) /* DSP */ diff --git a/src/mame/includes/namcos2.h b/src/mame/includes/namcos2.h index d52979f9543..15746f731ed 100644 --- a/src/mame/includes/namcos2.h +++ b/src/mame/includes/namcos2.h @@ -18,6 +18,8 @@ #include "sound/c140.h" #include "video/c45.h" #include "video/namco_c116.h" +#include "machine/namco65.h" +#include "machine/namco68.h" #include "cpu/m6502/m3745x.h" #include "emupal.h" @@ -112,7 +114,6 @@ public: , m_dspslave(*this, "dspslave") , m_gametype(0) , m_c140(*this, "c140") - , m_c68(*this, "c68") , m_c116(*this, "c116") , m_master_intc(*this, "master_intc") , m_slave_intc(*this, "slave_intc") @@ -127,6 +128,8 @@ public: , m_audiocpu(*this, "audiocpu") , m_slave(*this, "slave") , m_mcu(*this, "mcu") + , m_c65(*this, "c65mcu") + , m_c68new(*this, "c68mcu") , m_gfxdecode(*this, "gfxdecode") , m_screen(*this, "screen") , m_palette(*this, "palette") @@ -139,7 +142,6 @@ public: protected: optional_device<c140_device> m_c140; - optional_device<m37450_device> m_c68; optional_device<namco_c116_device> m_c116; optional_device<namco_c148_device> m_master_intc; optional_device<namco_c148_device> m_slave_intc; @@ -149,9 +151,6 @@ protected: // game type helpers bool is_system21(); - int m_mcu_analog_ctrl; - int m_mcu_analog_data; - int m_mcu_analog_complete; std::unique_ptr<uint8_t[]> m_eeprom; DECLARE_WRITE8_MEMBER(sound_reset_w); @@ -266,18 +265,15 @@ protected: DECLARE_WRITE8_MEMBER( namcos2_68k_eeprom_w ); DECLARE_READ8_MEMBER( namcos2_68k_eeprom_r ); - DECLARE_WRITE8_MEMBER( namcos2_mcu_port_d_w ); - DECLARE_READ8_MEMBER( namcos2_mcu_port_d_r ); - DECLARE_WRITE8_MEMBER( namcos2_mcu_analog_ctrl_w ); - DECLARE_READ8_MEMBER( namcos2_mcu_analog_ctrl_r ); - DECLARE_WRITE8_MEMBER( namcos2_mcu_analog_port_w ); - DECLARE_READ8_MEMBER( namcos2_mcu_analog_port_r ); DECLARE_WRITE8_MEMBER( namcos2_sound_bankselect_w ); required_device<cpu_device> m_maincpu; optional_device<cpu_device> m_audiocpu; optional_device<cpu_device> m_slave; optional_device<cpu_device> m_mcu; + optional_device<namcoc65_device> m_c65; + optional_device<namcoc68_device> m_c68new; + optional_device<gfxdecode_device> m_gfxdecode; optional_device<screen_device> m_screen; required_device<palette_device> m_palette; @@ -297,6 +293,8 @@ public: void configure_c116_standard(machine_config &config); void configure_c148_standard(machine_config &config); + void configure_c65_standard(machine_config &config); + void configure_c68_standard(machine_config &config); void metlhawk(machine_config &config); void gollygho(machine_config &config); void assaultp(machine_config &config); @@ -345,13 +343,10 @@ public: void init_rthun2(); private: - DECLARE_READ8_MEMBER(c68_p5_r); - DECLARE_WRITE8_MEMBER(c68_p3_w); DECLARE_READ16_MEMBER(dpram_word_r); DECLARE_WRITE16_MEMBER(dpram_word_w); DECLARE_READ8_MEMBER(dpram_byte_r); DECLARE_WRITE8_MEMBER(dpram_byte_w); - DECLARE_READ8_MEMBER(ack_mcu_vbl_r); virtual void video_start() override; void video_start_finallap(); @@ -407,7 +402,6 @@ private: void RozCB_luckywld(uint16_t code, int *tile, int *mask, int which); void RozCB_metlhawk(uint16_t code, int *tile, int *mask, int which); - void c68_default_am(address_map &map); void common_default_am(address_map &map); void common_finallap_am(address_map &map); void common_luckywld_am(address_map &map); @@ -418,7 +412,7 @@ private: void master_luckywld_am(address_map &map); void master_metlhawk_am(address_map &map); void master_sgunner_am(address_map &map); - void mcu_default_am(address_map &map); + void namcos2_68k_default_cpu_board_am(address_map &map); void slave_default_am(address_map &map); void slave_finallap_am(address_map &map); diff --git a/src/mame/includes/namcos21.h b/src/mame/includes/namcos21.h index 9efa80343b1..965241af099 100644 --- a/src/mame/includes/namcos21.h +++ b/src/mame/includes/namcos21.h @@ -204,6 +204,7 @@ private: void render_slave_output(uint16_t data); void winrun_flush_poly(); void init(int game_type); + void configure_c65_namcos21(machine_config &config); void common_map(address_map &map); void driveyes_common_map(address_map &map); void driveyes_master_map(address_map &map); diff --git a/src/mame/machine/namco65.cpp b/src/mame/machine/namco65.cpp new file mode 100644 index 00000000000..1af71a5d19f --- /dev/null +++ b/src/mame/machine/namco65.cpp @@ -0,0 +1,208 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood, K.Wilkins + +/* +TODO: +output support, Golly Ghost is currently hacking this based on DPRAM in the namcos2.cpp driver side! +some of this can likely be moved into the actual MCU core too + +*/ + +#include "emu.h" +#include "machine/namco65.h" + +DEFINE_DEVICE_TYPE(NAMCOC65, namcoc65_device, "namcoc65", "Namco C65 I/O") + +namcoc65_device::namcoc65_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, NAMCOC65, tag, owner, clock), + m_mcu(*this, "mcu"), + m_in_pb_cb(*this), + m_in_pc_cb(*this), + m_in_ph_cb(*this), + m_in_pdsw_cb(*this), + m_port_analog_in_cb{{*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}}, + m_port_dial_in_cb{{*this}, {*this}, {*this}, {*this}}, + m_dp_in(*this), + m_dp_out(*this) +{ +} + +ROM_START( namcoc65 ) + ROM_REGION( 0x2000, "mcu", 0 ) + ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) +ROM_END + + +WRITE8_MEMBER( namcoc65_device::namcos2_mcu_port_d_w ) +{ + /* Undefined operation on write */ +} + +READ8_MEMBER(namcoc65_device::namcos2_mcu_port_d_r) +{ + /* Provides a digital version of the analog ports */ + int threshold = 0x7f; + int data = 0; + + /* Read/convert the bits one at a time */ + if (m_port_analog_in_cb[0]() > threshold) data |= 0x01; + if (m_port_analog_in_cb[1]() > threshold) data |= 0x02; + if (m_port_analog_in_cb[2]() > threshold) data |= 0x04; + if (m_port_analog_in_cb[3]() > threshold) data |= 0x08; + if (m_port_analog_in_cb[4]() > threshold) data |= 0x10; + if (m_port_analog_in_cb[5]() > threshold) data |= 0x20; + if (m_port_analog_in_cb[6]() > threshold) data |= 0x40; + if (m_port_analog_in_cb[7]() > threshold) data |= 0x80; + + /* Return the result */ + return data; +} + + +READ8_MEMBER(namcoc65_device::namcos2_mcu_analog_ctrl_r) +{ + int data = 0; + + /* ADEF flag is only cleared AFTER a read from control THEN a read from DATA */ + if (m_mcu_analog_complete == 2) m_mcu_analog_complete = 1; + if (m_mcu_analog_complete) data |= 0x80; + + /* Mask on the lower 6 register bits, Irq EN/Channel/Clock */ + data |= m_mcu_analog_ctrl & 0x3f; + /* Return the value */ + return data; +} + +WRITE8_MEMBER( namcoc65_device::namcos2_mcu_analog_port_w ) +{ +} + +READ8_MEMBER(namcoc65_device::namcos2_mcu_analog_port_r) +{ + if (m_mcu_analog_complete == 1) m_mcu_analog_complete = 0; + return m_mcu_analog_data; +} + + +WRITE8_MEMBER(namcoc65_device::namcos2_mcu_analog_ctrl_w) +{ + m_mcu_analog_ctrl = data & 0xff; + + /* Check if this is a start of conversion */ + /* Input ports 2 through 9 are the analog channels */ + + if (data & 0x40) + { + /* Set the conversion complete flag */ + m_mcu_analog_complete = 2; + /* We convert instantly, good eh! (not really) */ + switch ((data >> 2) & 0x07) + { + case 0: + m_mcu_analog_data = m_port_analog_in_cb[0](); + break; + case 1: + m_mcu_analog_data = m_port_analog_in_cb[1](); + break; + case 2: + m_mcu_analog_data = m_port_analog_in_cb[2](); + break; + case 3: + m_mcu_analog_data = m_port_analog_in_cb[3](); + break; + case 4: + m_mcu_analog_data = m_port_analog_in_cb[4](); + break; + case 5: + m_mcu_analog_data = m_port_analog_in_cb[5](); + break; + case 6: + m_mcu_analog_data = m_port_analog_in_cb[6](); + break; + case 7: + m_mcu_analog_data = m_port_analog_in_cb[7](); + break; + default: + //output().set_value("anunk",data); + break; + } + + /* If the interrupt enable bit is set trigger an A/D IRQ */ + if (data & 0x20) + { + m_mcu->pulse_input_line(HD63705_INT_ADCONV, m_mcu->minimum_quantum_time()); + } + } +} + +READ8_MEMBER(namcoc65_device::dpram_byte_r) +{ + return m_dp_in(offset); +} + +WRITE8_MEMBER(namcoc65_device::dpram_byte_w) +{ + m_dp_out(offset,data); +} + +void namcoc65_device::mcu_map(address_map &map) +{ + map(0x0000, 0x003f).ram(); /* Fill in register to stop logging */ + map(0x0000, 0x0000).nopr(); /* Keep logging quiet */ + map(0x0001, 0x0001).r(FUNC(namcoc65_device::mcub_r)); /* Usually P1/P2 direction inputs (UDL) + start buttons */ + map(0x0002, 0x0002).r(FUNC(namcoc65_device::mcuc_r)); /* Usually coins + start */ + map(0x0003, 0x0003).rw(FUNC(namcoc65_device::namcos2_mcu_port_d_r), FUNC(namcoc65_device::namcos2_mcu_port_d_w)); + map(0x0007, 0x0007).r(FUNC(namcoc65_device::mcuh_r)); /* Usually P1/P2 direction input (R) + Buttons 1,2,3 */ + map(0x0010, 0x0010).rw(FUNC(namcoc65_device::namcos2_mcu_analog_ctrl_r), FUNC(namcoc65_device::namcos2_mcu_analog_ctrl_w)); + map(0x0011, 0x0011).rw(FUNC(namcoc65_device::namcos2_mcu_analog_port_r), FUNC(namcoc65_device::namcos2_mcu_analog_port_w)); + map(0x0040, 0x01bf).ram(); + map(0x01c0, 0x1fff).rom(); /* internal ROM */ + map(0x2000, 0x2000).r(FUNC(namcoc65_device::mcudsw_r)); /* Dipswitch, including service mode */ + map(0x3000, 0x3000).r(FUNC(namcoc65_device::mcudi0_r)); + map(0x3001, 0x3001).r(FUNC(namcoc65_device::mcudi1_r)); + map(0x3002, 0x3002).r(FUNC(namcoc65_device::mcudi2_r)); + map(0x3003, 0x3003).r(FUNC(namcoc65_device::mcudi3_r)); + map(0x5000, 0x57ff).rw(FUNC(namcoc65_device::dpram_byte_r), FUNC(namcoc65_device::dpram_byte_w)); + map(0x6000, 0x6fff).nopr(); /* watchdog */ + map(0x8000, 0xffff).rom().region("external", 0);; /* external ROM socket */ +} + + +void namcoc65_device::device_add_mconfig(machine_config &config) +{ + HD63705(config, m_mcu, DERIVED_CLOCK(1, 1)); + m_mcu->set_addrmap(AS_PROGRAM, &mcu_map); +} + +void namcoc65_device::device_resolve_objects() +{ + m_in_pb_cb.resolve_safe(0xff); + m_in_pc_cb.resolve_safe(0xff); + m_in_ph_cb.resolve_safe(0xff); + m_in_pdsw_cb.resolve_safe(0xff); + + for (auto &cb : m_port_analog_in_cb) + cb.resolve_safe(0xff); + + for (auto &cb : m_port_dial_in_cb) + cb.resolve_safe(0xff); + + m_dp_in.resolve_safe(0xff); + m_dp_out.resolve_safe(); +} + +void namcoc65_device::device_start() +{ +} + +void namcoc65_device::device_reset() +{ + m_mcu_analog_ctrl = 0; + m_mcu_analog_data = 0xaa; + m_mcu_analog_complete = 0; +} + +const tiny_rom_entry *namcoc65_device::device_rom_region() const +{ + return ROM_NAME(namcoc65); +} diff --git a/src/mame/machine/namco65.h b/src/mame/machine/namco65.h new file mode 100644 index 00000000000..017387f8c58 --- /dev/null +++ b/src/mame/machine/namco65.h @@ -0,0 +1,95 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood +#ifndef MAME_MACHINE_NAMCO65_H +#define MAME_MACHINE_NAMCO65_H + +#pragma once + +#include "machine/bankdev.h" +#include "cpu/m6805/m6805.h" + +DECLARE_DEVICE_TYPE(NAMCOC65, namcoc65_device) + + +class namcoc65_device : public device_t +{ +public: + // construction/destruction + namcoc65_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + auto in_pb_callback() { return m_in_pb_cb.bind(); } + auto in_pc_callback() { return m_in_pc_cb.bind(); } + auto in_ph_callback() { return m_in_ph_cb.bind(); } + auto in_pdsw_callback() { return m_in_pdsw_cb.bind(); } + + auto an0_in_cb() { return m_port_analog_in_cb[0].bind(); } + auto an1_in_cb() { return m_port_analog_in_cb[1].bind(); } + auto an2_in_cb() { return m_port_analog_in_cb[2].bind(); } + auto an3_in_cb() { return m_port_analog_in_cb[3].bind(); } + auto an4_in_cb() { return m_port_analog_in_cb[4].bind(); } + auto an5_in_cb() { return m_port_analog_in_cb[5].bind(); } + auto an6_in_cb() { return m_port_analog_in_cb[6].bind(); } + auto an7_in_cb() { return m_port_analog_in_cb[7].bind(); } + + auto di0_in_cb() { return m_port_dial_in_cb[0].bind(); } + auto di1_in_cb() { return m_port_dial_in_cb[1].bind(); } + auto di2_in_cb() { return m_port_dial_in_cb[2].bind(); } + auto di3_in_cb() { return m_port_dial_in_cb[3].bind(); } + + auto dp_in_callback() { return m_dp_in.bind(); } + auto dp_out_callback() { return m_dp_out.bind(); } + + void ext_interrupt(int state) { m_mcu->set_input_line(0, state); } + void ext_reset(int state) { m_mcu->set_input_line(INPUT_LINE_RESET, state); } + +protected: + void mcu_map(address_map &map); + + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_resolve_objects() override; + virtual void device_start() override; + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_reset() override; + +private: + required_device<hd63705_device> m_mcu; + + devcb_read8 m_in_pb_cb; + devcb_read8 m_in_pc_cb; + devcb_read8 m_in_ph_cb; + devcb_read8 m_in_pdsw_cb; + + devcb_read8 m_port_analog_in_cb[8]; + devcb_read8 m_port_dial_in_cb[4]; + + devcb_read8 m_dp_in; + devcb_write8 m_dp_out; + + DECLARE_READ8_MEMBER(namcos2_mcu_port_d_r); + DECLARE_WRITE8_MEMBER(namcos2_mcu_port_d_w); + + DECLARE_READ8_MEMBER(namcos2_mcu_analog_port_r ); + DECLARE_WRITE8_MEMBER(namcos2_mcu_analog_port_w); + + DECLARE_READ8_MEMBER(namcos2_mcu_analog_ctrl_r); + DECLARE_WRITE8_MEMBER(namcos2_mcu_analog_ctrl_w); + + DECLARE_READ8_MEMBER(dpram_byte_r); + DECLARE_WRITE8_MEMBER(dpram_byte_w); + + DECLARE_READ8_MEMBER(mcub_r) { return m_in_pb_cb(); } + DECLARE_READ8_MEMBER(mcuc_r) { return m_in_pc_cb(); } + DECLARE_READ8_MEMBER(mcuh_r) { return m_in_ph_cb(); } + DECLARE_READ8_MEMBER(mcudsw_r) { return m_in_pdsw_cb(); } + + DECLARE_READ8_MEMBER(mcudi0_r) { return m_port_dial_in_cb[0](); } + DECLARE_READ8_MEMBER(mcudi1_r) { return m_port_dial_in_cb[1](); } + DECLARE_READ8_MEMBER(mcudi2_r) { return m_port_dial_in_cb[2](); } + DECLARE_READ8_MEMBER(mcudi3_r) { return m_port_dial_in_cb[3](); } + + int m_mcu_analog_ctrl; + int m_mcu_analog_data; + int m_mcu_analog_complete; +}; + +#endif // MAME_MACHINE_NAMCO65_H diff --git a/src/mame/machine/namco68.cpp b/src/mame/machine/namco68.cpp new file mode 100644 index 00000000000..571002f87e6 --- /dev/null +++ b/src/mame/machine/namco68.cpp @@ -0,0 +1,118 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood, K.Wilkins + +/* +TODO: +output support, Golly Ghost is currently hacking this based on DPRAM in the namcos2.cpp driver side! +some of this can likely be moved into the actual MCU core too + +*/ + +#include "emu.h" +#include "machine/namco68.h" + +DEFINE_DEVICE_TYPE(NAMCOC68, namcoc68_device, "namcoc68", "Namco C68 I/O") + +namcoc68_device::namcoc68_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, NAMCOC68, tag, owner, clock), + m_mcu(*this, "mcu"), + m_in_pb_cb(*this), + m_in_pb2_cb(*this), + m_in_pc_cb(*this), + m_in_ph_cb(*this), + m_in_pdsw_cb(*this), + m_port_analog_in_cb{{*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}}, + m_port_dial_in_cb{{*this}, {*this}, {*this}, {*this}}, + m_dp_in(*this), + m_dp_out(*this) +{ +} + +ROM_START( namcoc68 ) + ROM_REGION( 0x8000, "mcu", 0 ) + ROM_LOAD( "c68.3d", 0x000000, 0x008000, CRC(ca64550a) SHA1(38d1ad1b1287cadef0c999aff9357927315f8e6b) ) +ROM_END + + + +READ8_MEMBER(namcoc68_device::c68_p5_r) +{ + return (m_player_mux) ? m_in_pb2_cb() : m_in_pb_cb(); +} + +WRITE8_MEMBER(namcoc68_device::c68_p3_w) +{ + m_player_mux = (data & 0x80) ? 1 : 0; +} + +READ8_MEMBER(namcoc68_device::ack_mcu_vbl_r) +{ + m_mcu->set_input_line(m37450_device::M3745X_INT1_LINE, CLEAR_LINE); + return 0; +} + +READ8_MEMBER(namcoc68_device::dpram_byte_r) +{ + return m_dp_in(offset); +} + +WRITE8_MEMBER(namcoc68_device::dpram_byte_w) +{ + m_dp_out(offset,data); +} + +void namcoc68_device::c68_default_am(address_map &map) +{ + /* input ports and dips are mapped here */ + map(0x2000, 0x2000).r(FUNC(namcoc68_device::mcudsw_r)); + map(0x3000, 0x3000).r(FUNC(namcoc68_device::mcudi0_r)); + map(0x3001, 0x3001).r(FUNC(namcoc68_device::mcudi1_r)); + map(0x3002, 0x3002).r(FUNC(namcoc68_device::mcudi2_r)); + map(0x3003, 0x3003).r(FUNC(namcoc68_device::mcudi3_r)); + map(0x5000, 0x57ff).rw(FUNC(namcoc68_device::dpram_byte_r), FUNC(namcoc68_device::dpram_byte_w)); + map(0x6000, 0x6fff).r(FUNC(namcoc68_device::ack_mcu_vbl_r)); // VBL ack + map(0x8000, 0xffff).rom().region("mcu", 0); +} + +void namcoc68_device::device_add_mconfig(machine_config &config) +{ + m3745x_device* device = &M37450(config, m_mcu, DERIVED_CLOCK(1, 1)); // ugly, needs modernizing + MCFG_M3745X_ADC14_CALLBACKS(READ8(*this, namcoc68_device, mcuan0_r), READ8(*this, namcoc68_device, mcuan1_r), READ8(*this, namcoc68_device, mcuan2_r), READ8(*this, namcoc68_device, mcuan3_r)) + MCFG_M3745X_ADC58_CALLBACKS(READ8(*this, namcoc68_device, mcuan4_r), READ8(*this, namcoc68_device, mcuan5_r), READ8(*this, namcoc68_device, mcuan6_r), READ8(*this, namcoc68_device, mcuan7_r)) + MCFG_M3745X_PORT3_CALLBACKS(READ8(*this, namcoc68_device, mcuh_r), WRITE8(*this, namcoc68_device, c68_p3_w)) // coins/test/service + MCFG_M3745X_PORT5_CALLBACKS(READ8(*this, namcoc68_device, c68_p5_r), NOOP) // muxed player 1/2 + MCFG_M3745X_PORT6_CALLBACKS(READ8(*this, namcoc68_device, mcuc_r), NOOP) // unused in sgunner2 + MCFG_DEVICE_PROGRAM_MAP(c68_default_am) +} + +void namcoc68_device::device_resolve_objects() +{ + m_in_pb_cb.resolve_safe(0xff); + m_in_pb2_cb.resolve_safe(0xff); + m_in_pc_cb.resolve_safe(0xff); + m_in_ph_cb.resolve_safe(0xff); + m_in_pdsw_cb.resolve_safe(0xff); + + for (auto &cb : m_port_analog_in_cb) + cb.resolve_safe(0xff); + + for (auto &cb : m_port_dial_in_cb) + cb.resolve_safe(0xff); + + m_dp_in.resolve_safe(0xff); + m_dp_out.resolve_safe(); +} + +void namcoc68_device::device_start() +{ +} + +void namcoc68_device::device_reset() +{ + m_player_mux = 0; +} + +const tiny_rom_entry *namcoc68_device::device_rom_region() const +{ + return ROM_NAME(namcoc68); +} diff --git a/src/mame/machine/namco68.h b/src/mame/machine/namco68.h new file mode 100644 index 00000000000..98136cc9ffb --- /dev/null +++ b/src/mame/machine/namco68.h @@ -0,0 +1,104 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood +#ifndef MAME_MACHINE_NAMCO68_H +#define MAME_MACHINE_NAMCO68_H + +#pragma once + +#include "machine/bankdev.h" +#include "cpu/m6502/m3745x.h" + +DECLARE_DEVICE_TYPE(NAMCOC68, namcoc68_device) + + +class namcoc68_device : public device_t +{ +public: + // construction/destruction + namcoc68_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + auto in_pb_callback() { return m_in_pb_cb.bind(); } + auto in_pb2_callback() { return m_in_pb2_cb.bind(); } + + auto in_pc_callback() { return m_in_pc_cb.bind(); } + auto in_ph_callback() { return m_in_ph_cb.bind(); } + auto in_pdsw_callback() { return m_in_pdsw_cb.bind(); } + + auto an0_in_cb() { return m_port_analog_in_cb[0].bind(); } + auto an1_in_cb() { return m_port_analog_in_cb[1].bind(); } + auto an2_in_cb() { return m_port_analog_in_cb[2].bind(); } + auto an3_in_cb() { return m_port_analog_in_cb[3].bind(); } + auto an4_in_cb() { return m_port_analog_in_cb[4].bind(); } + auto an5_in_cb() { return m_port_analog_in_cb[5].bind(); } + auto an6_in_cb() { return m_port_analog_in_cb[6].bind(); } + auto an7_in_cb() { return m_port_analog_in_cb[7].bind(); } + + auto di0_in_cb() { return m_port_dial_in_cb[0].bind(); } + auto di1_in_cb() { return m_port_dial_in_cb[1].bind(); } + auto di2_in_cb() { return m_port_dial_in_cb[2].bind(); } + auto di3_in_cb() { return m_port_dial_in_cb[3].bind(); } + + auto dp_in_callback() { return m_dp_in.bind(); } + auto dp_out_callback() { return m_dp_out.bind(); } + + void ext_interrupt(int state) { m_mcu->set_input_line(0, state); } // 37450 maps INT1 to irq0 as it's the first external interrupt on that chip + void ext_reset(int state) { m_mcu->set_input_line(INPUT_LINE_RESET, state); } + +protected: + void c68_default_am(address_map &map); + + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_resolve_objects() override; + virtual void device_start() override; + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_reset() override; + +private: + required_device<m37450_device> m_mcu; + + devcb_read8 m_in_pb_cb; + devcb_read8 m_in_pb2_cb; + + devcb_read8 m_in_pc_cb; + devcb_read8 m_in_ph_cb; + devcb_read8 m_in_pdsw_cb; + + devcb_read8 m_port_analog_in_cb[8]; + devcb_read8 m_port_dial_in_cb[4]; + + devcb_read8 m_dp_in; + devcb_write8 m_dp_out; + + DECLARE_READ8_MEMBER(c68_p5_r); + DECLARE_WRITE8_MEMBER(c68_p3_w); + DECLARE_READ8_MEMBER(ack_mcu_vbl_r); + + DECLARE_READ8_MEMBER(dpram_byte_r); + DECLARE_WRITE8_MEMBER(dpram_byte_w); + + DECLARE_READ8_MEMBER(mcub_r) { return m_in_pb_cb(); } + DECLARE_READ8_MEMBER(mcub2_r) { return m_in_pb2_cb(); } + + + DECLARE_READ8_MEMBER(mcuc_r) { return m_in_pc_cb(); } + DECLARE_READ8_MEMBER(mcuh_r) { return m_in_ph_cb(); } + DECLARE_READ8_MEMBER(mcudsw_r) { return m_in_pdsw_cb(); } + + DECLARE_READ8_MEMBER(mcudi0_r) { return m_port_dial_in_cb[0](); } + DECLARE_READ8_MEMBER(mcudi1_r) { return m_port_dial_in_cb[1](); } + DECLARE_READ8_MEMBER(mcudi2_r) { return m_port_dial_in_cb[2](); } + DECLARE_READ8_MEMBER(mcudi3_r) { return m_port_dial_in_cb[3](); } + + DECLARE_READ8_MEMBER(mcuan0_r) { return m_port_analog_in_cb[0](); } + DECLARE_READ8_MEMBER(mcuan1_r) { return m_port_analog_in_cb[1](); } + DECLARE_READ8_MEMBER(mcuan2_r) { return m_port_analog_in_cb[2](); } + DECLARE_READ8_MEMBER(mcuan3_r) { return m_port_analog_in_cb[3](); } + DECLARE_READ8_MEMBER(mcuan4_r) { return m_port_analog_in_cb[4](); } + DECLARE_READ8_MEMBER(mcuan5_r) { return m_port_analog_in_cb[5](); } + DECLARE_READ8_MEMBER(mcuan6_r) { return m_port_analog_in_cb[6](); } + DECLARE_READ8_MEMBER(mcuan7_r) { return m_port_analog_in_cb[7](); } + + uint8_t m_player_mux; +}; + +#endif // MAME_MACHINE_NAMCO68_H diff --git a/src/mame/machine/namcos2.cpp b/src/mame/machine/namcos2.cpp index 4dfc4b91407..e743a344eb4 100644 --- a/src/mame/machine/namcos2.cpp +++ b/src/mame/machine/namcos2.cpp @@ -107,14 +107,23 @@ WRITE8_MEMBER(namcos2_shared_state::system_reset_w) void namcos2_shared_state::reset_all_subcpus(int state) { m_slave->set_input_line(INPUT_LINE_RESET, state); - if (m_c68) + if (m_c68new) { - m_c68->set_input_line(INPUT_LINE_RESET, state); + m_c68new->ext_reset(state); } - else + else if (m_mcu) { m_mcu->set_input_line(INPUT_LINE_RESET, state); } + else if (m_c65) + { + m_c65->ext_reset(state); + } + else + { + logerror("no MCU to reset?\n"); + } + switch( m_gametype ) { case NAMCOS21_SOLVALOU: @@ -144,10 +153,6 @@ MACHINE_RESET_MEMBER(namcos2_shared_state, namcos2) // address_space &space = m_maincpu->space(AS_PROGRAM); address_space &audio_space = m_audiocpu->space(AS_PROGRAM); - m_mcu_analog_ctrl = 0; - m_mcu_analog_data = 0xaa; - m_mcu_analog_complete = 0; - /* Initialise the bank select in the sound CPU */ namcos2_sound_bankselect_w(audio_space, 0, 0); /* Page in bank 0 */ @@ -438,116 +443,3 @@ WRITE8_MEMBER( namcos2_shared_state::namcos2_sound_bankselect_w ) int bank = ( data >> 4 ) % max; /* 991104.CAB */ membank(BANKED_SOUND_ROM)->set_base(&RAM[ 0x10000 + ( 0x4000 * bank ) ] ); } - -/**************************************************************/ -/* */ -/* 68705 IO CPU Support functions */ -/* */ -/**************************************************************/ - -WRITE8_MEMBER( namcos2_shared_state::namcos2_mcu_analog_ctrl_w ) -{ - m_mcu_analog_ctrl = data & 0xff; - - /* Check if this is a start of conversion */ - /* Input ports 2 through 9 are the analog channels */ - - if(data & 0x40) - { - /* Set the conversion complete flag */ - m_mcu_analog_complete = 2; - /* We convert instantly, good eh! */ - switch((data>>2) & 0x07) - { - case 0: - m_mcu_analog_data=ioport("AN0")->read(); - break; - case 1: - m_mcu_analog_data=ioport("AN1")->read(); - break; - case 2: - m_mcu_analog_data=ioport("AN2")->read(); - break; - case 3: - m_mcu_analog_data=ioport("AN3")->read(); - break; - case 4: - m_mcu_analog_data=ioport("AN4")->read(); - break; - case 5: - m_mcu_analog_data=ioport("AN5")->read(); - break; - case 6: - m_mcu_analog_data=ioport("AN6")->read(); - break; - case 7: - m_mcu_analog_data=ioport("AN7")->read(); - break; - default: - output().set_value("anunk",data); - } -#if 0 - /* Perform the offset handling on the input port */ - /* this converts it to a twos complement number */ - if( m_gametype == NAMCOS2_DIRT_FOX || - m_gametype == NAMCOS2_DIRT_FOX_JP ) - { - m_mcu_analog_data ^= 0x80; - } -#endif - /* If the interrupt enable bit is set trigger an A/D IRQ */ - if(data & 0x20) - { - m_mcu->pulse_input_line(HD63705_INT_ADCONV, m_mcu->minimum_quantum_time()); - } - } -} - -READ8_MEMBER( namcos2_shared_state::namcos2_mcu_analog_ctrl_r ) -{ - int data=0; - - /* ADEF flag is only cleared AFTER a read from control THEN a read from DATA */ - if(m_mcu_analog_complete==2) m_mcu_analog_complete=1; - if(m_mcu_analog_complete) data|=0x80; - - /* Mask on the lower 6 register bits, Irq EN/Channel/Clock */ - data|=m_mcu_analog_ctrl&0x3f; - /* Return the value */ - return data; -} - -WRITE8_MEMBER( namcos2_shared_state::namcos2_mcu_analog_port_w ) -{ -} - -READ8_MEMBER( namcos2_shared_state::namcos2_mcu_analog_port_r ) -{ - if(m_mcu_analog_complete==1) m_mcu_analog_complete=0; - return m_mcu_analog_data; -} - -WRITE8_MEMBER( namcos2_shared_state::namcos2_mcu_port_d_w ) -{ - /* Undefined operation on write */ -} - -READ8_MEMBER( namcos2_shared_state::namcos2_mcu_port_d_r ) -{ - /* Provides a digital version of the analog ports */ - int threshold = 0x7f; - int data = 0; - - /* Read/convert the bits one at a time */ - if(ioport("AN0")->read() > threshold) data |= 0x01; - if(ioport("AN1")->read() > threshold) data |= 0x02; - if(ioport("AN2")->read() > threshold) data |= 0x04; - if(ioport("AN3")->read() > threshold) data |= 0x08; - if(ioport("AN4")->read() > threshold) data |= 0x10; - if(ioport("AN5")->read() > threshold) data |= 0x20; - if(ioport("AN6")->read() > threshold) data |= 0x40; - if(ioport("AN7")->read() > threshold) data |= 0x80; - - /* Return the result */ - return data; -} |