summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--scripts/target/mame/arcade.lua4
-rw-r--r--src/mame/drivers/namcos2.cpp445
-rw-r--r--src/mame/drivers/namcos21.cpp111
-rw-r--r--src/mame/includes/namcos2.h26
-rw-r--r--src/mame/includes/namcos21.h1
-rw-r--r--src/mame/machine/namco65.cpp208
-rw-r--r--src/mame/machine/namco65.h95
-rw-r--r--src/mame/machine/namco68.cpp118
-rw-r--r--src/mame/machine/namco68.h104
-rw-r--r--src/mame/machine/namcos2.cpp132
10 files changed, 779 insertions, 465 deletions
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index 80d554c7129..c01766fe4f7 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -2832,6 +2832,10 @@ files {
MAME_DIR .. "src/mame/machine/namco53.h",
MAME_DIR .. "src/mame/machine/namco62.cpp",
MAME_DIR .. "src/mame/machine/namco62.h",
+ MAME_DIR .. "src/mame/machine/namco65.cpp",
+ MAME_DIR .. "src/mame/machine/namco65.h",
+ MAME_DIR .. "src/mame/machine/namco68.cpp",
+ MAME_DIR .. "src/mame/machine/namco68.h",
MAME_DIR .. "src/mame/machine/namcomcu.cpp",
MAME_DIR .. "src/mame/machine/namcomcu.h",
MAME_DIR .. "src/mame/machine/namcoio_gearbox.cpp",
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;
-}