summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2017-07-24 11:34:09 -0400
committer Vas Crabb <cuavas@users.noreply.github.com>2017-07-25 11:21:43 +1000
commitbb6aaac7680adb3c5d452eff74e493302eaaf0f3 (patch)
tree2eaef4f61e9693dde0737a304750424fe79f3ca8
parenta269386b25207ea15c7d69c8d99e67650582de7c (diff)
mappy.cpp: Clean up I/O handlers (nw)
-rw-r--r--src/mame/drivers/mappy.cpp368
-rw-r--r--src/mame/includes/mappy.h54
2 files changed, 42 insertions, 380 deletions
diff --git a/src/mame/drivers/mappy.cpp b/src/mame/drivers/mappy.cpp
index 084f95fb3cc..7f69dfeab4e 100644
--- a/src/mame/drivers/mappy.cpp
+++ b/src/mame/drivers/mappy.cpp
@@ -609,222 +609,39 @@ WRITE_LINE_MEMBER(mappy_state::mappy_flip_w)
}
-/* different games need different interrupt generators & timers because they use different Namco I/O devices */
-
void mappy_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
switch (id)
{
- case TIMER_SUPERPAC_IO_RUN:
- superpac_io_run(ptr, param);
- break;
- case TIMER_PACNPAL_IO_RUN:
- pacnpal_io_run(ptr, param);
- break;
- case TIMER_GROBDA_IO_RUN:
- grobda_io_run(ptr, param);
- break;
- case TIMER_PHOZON_IO_RUN:
- phozon_io_run(ptr, param);
- break;
- case TIMER_MAPPY_IO_RUN:
- mappy_io_run(ptr, param);
- break;
- case TIMER_DIGDUG2_IO_RUN:
- digdug2_io_run(ptr, param);
- break;
- case TIMER_MOTOS_IO_RUN:
- motos_io_run(ptr, param);
+ case TIMER_IO_RUN:
+ m_namcoio[param]->customio_run();
break;
default:
assert_always(false, "Unknown id in mappy_state::device_timer");
}
}
-TIMER_CALLBACK_MEMBER(mappy_state::superpac_io_run)
-{
- switch (param)
- {
- case 0:
- m_namco56xx_1->customio_run();
- break;
- case 1:
- m_namco56xx_2->customio_run();
- break;
- }
-}
-
-INTERRUPT_GEN_MEMBER(mappy_state::superpac_main_vblank_irq)
-{
- if (m_main_irq_mask)
- m_maincpu->set_input_line(0, ASSERT_LINE);
-
- if (!m_namco56xx_1->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_SUPERPAC_IO_RUN);
-
- if (!m_namco56xx_2->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_SUPERPAC_IO_RUN, 1);
-}
-
-TIMER_CALLBACK_MEMBER(mappy_state::pacnpal_io_run)
-{
- switch (param)
- {
- case 0:
- m_namco56xx_1->customio_run();
- break;
- case 1:
- m_namco59xx->customio_run();
- break;
- }
-}
-
-INTERRUPT_GEN_MEMBER(mappy_state::pacnpal_main_vblank_irq)
-{
- if (m_main_irq_mask)
- m_maincpu->set_input_line(0, ASSERT_LINE);
-
- if (!m_namco56xx_1->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_PACNPAL_IO_RUN);
-
- if (!m_namco59xx->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_PACNPAL_IO_RUN, 1);
-}
-
-TIMER_CALLBACK_MEMBER(mappy_state::grobda_io_run)
-{
- switch (param)
- {
- case 0:
- m_namco58xx_1->customio_run();
- break;
- case 1:
- m_namco56xx_1->customio_run();
- break;
- }
-}
-
-INTERRUPT_GEN_MEMBER(mappy_state::grobda_main_vblank_irq)
-{
- if (m_main_irq_mask)
- m_maincpu->set_input_line(0, ASSERT_LINE);
-
- if (!m_namco58xx_1->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_GROBDA_IO_RUN);
-
- if (!m_namco56xx_1->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_GROBDA_IO_RUN, 1);
-}
-
-TIMER_CALLBACK_MEMBER(mappy_state::phozon_io_run)
-{
- switch (param)
- {
- case 0:
- m_namco58xx_1->customio_run();
- break;
- case 1:
- m_namco56xx_1->customio_run();
- break;
- }
-}
-
-INTERRUPT_GEN_MEMBER(mappy_state::phozon_main_vblank_irq)
+INTERRUPT_GEN_MEMBER(mappy_state::main_vblank_irq)
{
if (m_main_irq_mask)
m_maincpu->set_input_line(0, ASSERT_LINE);
- if (!m_namco58xx_1->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_PHOZON_IO_RUN);
+ if (!m_namcoio[0]->read_reset_line()) // give the cpu a tiny bit of time to write the command before processing it
+ timer_set(attotime::from_usec(50), TIMER_IO_RUN, 0);
- if (!m_namco56xx_1->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_PHOZON_IO_RUN, 1);
-}
-
-TIMER_CALLBACK_MEMBER(mappy_state::mappy_io_run)
-{
- switch (param)
- {
- case 0:
- m_namco58xx_1->customio_run();
- break;
- case 1:
- m_namco58xx_2->customio_run();
- break;
- }
-}
-
-INTERRUPT_GEN_MEMBER(mappy_state::mappy_main_vblank_irq)
-{
- if(m_main_irq_mask)
- m_maincpu->set_input_line(0, ASSERT_LINE);
-
- if (!m_namco58xx_1->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_MAPPY_IO_RUN);
-
- if (!m_namco58xx_2->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_MAPPY_IO_RUN, 1);
-}
-
-TIMER_CALLBACK_MEMBER(mappy_state::digdug2_io_run)
-{
- switch (param)
- {
- case 0:
- m_namco58xx_1->customio_run();
- break;
- case 1:
- m_namco56xx_1->customio_run();
- break;
- }
-}
-
-INTERRUPT_GEN_MEMBER(mappy_state::digdug2_main_vblank_irq)
-{
- if(m_main_irq_mask)
- m_maincpu->set_input_line(0, ASSERT_LINE);
-
- if (!m_namco58xx_1->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_DIGDUG2_IO_RUN);
-
- if (!m_namco56xx_1->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_DIGDUG2_IO_RUN, 1);
-}
-
-TIMER_CALLBACK_MEMBER(mappy_state::motos_io_run)
-{
- switch (param)
- {
- case 0:
- m_namco56xx_1->customio_run();
- break;
- case 1:
- m_namco56xx_2->customio_run();
- break;
- }
-}
-
-INTERRUPT_GEN_MEMBER(mappy_state::motos_main_vblank_irq)
-{
- if(m_main_irq_mask)
- m_maincpu->set_input_line(0, ASSERT_LINE);
-
- if (!m_namco56xx_1->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_MOTOS_IO_RUN);
-
- if (!m_namco56xx_2->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_MOTOS_IO_RUN, 1);
+ if (!m_namcoio[1]->read_reset_line()) // give the cpu a tiny bit of time to write the command before processing it
+ timer_set(attotime::from_usec(50), TIMER_IO_RUN, 1);
}
INTERRUPT_GEN_MEMBER(mappy_state::sub_vblank_irq)
{
- if(m_sub_irq_mask)
+ if (m_sub_irq_mask)
m_subcpu->set_input_line(0, ASSERT_LINE);
}
INTERRUPT_GEN_MEMBER(mappy_state::sub2_vblank_irq)
{
- if(m_sub2_irq_mask)
+ if (m_sub2_irq_mask)
m_subcpu2->set_input_line(0, ASSERT_LINE);
}
@@ -1487,32 +1304,8 @@ WRITE8_MEMBER(mappy_state::out_lamps)
machine().bookkeeping().coin_counter_w(0, ~data & 8);
}
-MACHINE_START_MEMBER(mappy_state,mappy)
+void mappy_state::machine_start()
{
- switch (m_type)
- {
- case GAME_SUPERPAC:
- case GAME_MOTOS:
- m_namco56xx_1 = machine().device<namco56xx_device>("namcoio_1");
- m_namco56xx_2 = machine().device<namco56xx_device>("namcoio_2");
- break;
- case GAME_MAPPY:
- m_namco58xx_1 = machine().device<namco58xx_device>("namcoio_1");
- m_namco58xx_2 = machine().device<namco58xx_device>("namcoio_2");
- break;
- case GAME_GROBDA:
- case GAME_PHOZON:
- case GAME_DRUAGA:
- case GAME_DIGDUG2:
- m_namco58xx_1 = machine().device<namco58xx_device>("namcoio_1");
- m_namco56xx_1 = machine().device<namco56xx_device>("namcoio_2");
- break;
- case GAME_PACNPAL:
- m_namco56xx_1 = machine().device<namco56xx_device>("namcoio_1");
- m_namco59xx = machine().device<namco59xx_device>("namcoio_2");
- break;
- }
-
save_item(NAME(m_main_irq_mask));
save_item(NAME(m_sub_irq_mask));
save_item(NAME(m_sub2_irq_mask));
@@ -1524,7 +1317,7 @@ static MACHINE_CONFIG_START( superpac_common )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809, PIXEL_CLOCK/4) /* 1.536 MHz */
MCFG_CPU_PROGRAM_MAP(superpac_cpu1_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, superpac_main_vblank_irq) // also update the custom I/O chips
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, main_vblank_irq) // also update the custom I/O chips
MCFG_CPU_ADD("sub", M6809, PIXEL_CLOCK/4) /* 1.536 MHz */
MCFG_CPU_PROGRAM_MAP(superpac_cpu2_map)
@@ -1534,6 +1327,8 @@ static MACHINE_CONFIG_START( superpac_common )
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mappy_state, int_on_2_w))
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mappy_state, int_on_w))
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("namco", namco_15xx_device, mappy_sound_enable))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namcoio_device, set_reset_line)) MCFG_DEVCB_INVERT
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namcoio_device, set_reset_line)) MCFG_DEVCB_INVERT
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
MCFG_WATCHDOG_ADD("watchdog")
@@ -1541,7 +1336,9 @@ static MACHINE_CONFIG_START( superpac_common )
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
- MCFG_MACHINE_START_OVERRIDE(mappy_state,mappy)
+ MCFG_DEVICE_ADD("dipmux", LS157, 0)
+ MCFG_74157_A_IN_CB(IOPORT("DSW2"))
+ MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
/* video hardware */
MCFG_GFXDECODE_ADD("gfxdecode", "palette", superpac)
@@ -1581,23 +1378,12 @@ static MACHINE_CONFIG_START( superpac )
MCFG_NAMCO56XX_IN_2_CB(IOPORT("DSW1")) MCFG_DEVCB_RSHIFT(4)
MCFG_NAMCO56XX_IN_3_CB(IOPORT("DSW0"))
MCFG_NAMCO56XX_OUT_0_CB(DEVWRITELINE("dipmux", ls157_device, select_w)) MCFG_DEVCB_BIT(0)
-
- MCFG_DEVICE_ADD("dipmux", LS157, 0)
- MCFG_74157_A_IN_CB(IOPORT("DSW2"))
- MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
-
- MCFG_DEVICE_MODIFY("mainlatch")
- MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
- MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( pacnpal )
MCFG_FRAGMENT_ADD(superpac_common)
- MCFG_CPU_MODIFY("maincpu")
- MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, pacnpal_main_vblank_irq) // also update the custom I/O chips
-
MCFG_DEVICE_ADD("namcoio_1", NAMCO_56XX, 0)
MCFG_NAMCO56XX_IN_0_CB(IOPORT("COINS"))
MCFG_NAMCO56XX_IN_1_CB(IOPORT("P1"))
@@ -1611,14 +1397,6 @@ static MACHINE_CONFIG_START( pacnpal )
MCFG_NAMCO59XX_IN_2_CB(IOPORT("DSW1")) MCFG_DEVCB_RSHIFT(4)
MCFG_NAMCO59XX_IN_3_CB(IOPORT("DSW0"))
MCFG_NAMCO59XX_OUT_0_CB(DEVWRITELINE("dipmux", ls157_device, select_w)) MCFG_DEVCB_BIT(0)
-
- MCFG_DEVICE_ADD("dipmux", LS157, 0)
- MCFG_74157_A_IN_CB(IOPORT("DSW2"))
- MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
-
- MCFG_DEVICE_MODIFY("mainlatch")
- MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
- MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco59xx_device, set_reset_line)) MCFG_DEVCB_INVERT
MACHINE_CONFIG_END
@@ -1626,9 +1404,6 @@ static MACHINE_CONFIG_START( grobda )
MCFG_FRAGMENT_ADD(superpac_common)
- MCFG_CPU_MODIFY("maincpu")
- MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, grobda_main_vblank_irq) // also update the custom I/O chips
-
MCFG_DEVICE_ADD("namcoio_1", NAMCO_58XX, 0)
MCFG_NAMCO58XX_IN_0_CB(IOPORT("COINS"))
MCFG_NAMCO58XX_IN_1_CB(IOPORT("P1"))
@@ -1642,14 +1417,6 @@ static MACHINE_CONFIG_START( grobda )
MCFG_NAMCO56XX_IN_3_CB(IOPORT("DSW0"))
MCFG_NAMCO56XX_OUT_0_CB(DEVWRITELINE("dipmux", ls157_device, select_w)) MCFG_DEVCB_BIT(0)
- MCFG_DEVICE_ADD("dipmux", LS157, 0)
- MCFG_74157_A_IN_CB(IOPORT("DSW2"))
- MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
-
- MCFG_DEVICE_MODIFY("mainlatch")
- MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT
- MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
-
/* sound hardware */
MCFG_SOUND_ADD("dac", DAC_4BIT_BINARY_WEIGHTED, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.275) // alternate route to 15XX-related DAC?
MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
@@ -1662,7 +1429,7 @@ static MACHINE_CONFIG_START( phozon )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809, PIXEL_CLOCK/4) /* MAIN CPU */
MCFG_CPU_PROGRAM_MAP(phozon_cpu1_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, phozon_main_vblank_irq) // also update the custom I/O chips
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, main_vblank_irq) // also update the custom I/O chips
MCFG_CPU_ADD("sub", M6809, PIXEL_CLOCK/4) /* SOUND CPU */
MCFG_CPU_PROGRAM_MAP(phozon_cpu2_map)
@@ -1686,8 +1453,6 @@ static MACHINE_CONFIG_START( phozon )
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
- MCFG_MACHINE_START_OVERRIDE(mappy_state,mappy)
-
MCFG_DEVICE_ADD("namcoio_1", NAMCO_58XX, 0)
MCFG_NAMCO58XX_IN_0_CB(IOPORT("COINS"))
MCFG_NAMCO58XX_IN_1_CB(IOPORT("P1"))
@@ -1732,7 +1497,7 @@ static MACHINE_CONFIG_START( mappy_common )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809, PIXEL_CLOCK/4) /* 1.536 MHz */
MCFG_CPU_PROGRAM_MAP(mappy_cpu1_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, mappy_main_vblank_irq) // also update the custom I/O chips
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, main_vblank_irq) // also update the custom I/O chips
MCFG_CPU_ADD("sub", M6809, PIXEL_CLOCK/4) /* 1.536 MHz */
MCFG_CPU_PROGRAM_MAP(mappy_cpu2_map)
@@ -1743,13 +1508,18 @@ static MACHINE_CONFIG_START( mappy_common )
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mappy_state, int_on_w))
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mappy_state, mappy_flip_w))
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("namco", namco_15xx_device, mappy_sound_enable))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namcoio_device, set_reset_line)) MCFG_DEVCB_INVERT
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namcoio_device, set_reset_line)) MCFG_DEVCB_INVERT
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
MCFG_WATCHDOG_ADD("watchdog")
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
- MCFG_MACHINE_START_OVERRIDE(mappy_state,mappy)
+
+ MCFG_DEVICE_ADD("dipmux", LS157, 0)
+ MCFG_74157_A_IN_CB(IOPORT("DSW2"))
+ MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
/* video hardware */
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mappy)
@@ -1788,23 +1558,12 @@ static MACHINE_CONFIG_START( mappy )
MCFG_NAMCO58XX_IN_2_CB(IOPORT("DSW1")) MCFG_DEVCB_RSHIFT(4)
MCFG_NAMCO58XX_IN_3_CB(IOPORT("DSW0"))
MCFG_NAMCO58XX_OUT_0_CB(DEVWRITELINE("dipmux", ls157_device, select_w)) MCFG_DEVCB_BIT(0)
-
- MCFG_DEVICE_ADD("dipmux", LS157, 0)
- MCFG_74157_A_IN_CB(IOPORT("DSW2"))
- MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
-
- MCFG_DEVICE_MODIFY("mainlatch")
- MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT
- MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( digdug2 )
MCFG_FRAGMENT_ADD(mappy_common)
- MCFG_CPU_MODIFY("maincpu")
- MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, digdug2_main_vblank_irq) // also update the custom I/O chips
-
MCFG_WATCHDOG_MODIFY("watchdog")
MCFG_WATCHDOG_VBLANK_INIT("screen", 0)
@@ -1820,14 +1579,6 @@ static MACHINE_CONFIG_START( digdug2 )
MCFG_NAMCO56XX_IN_2_CB(IOPORT("DSW1")) MCFG_DEVCB_RSHIFT(4)
MCFG_NAMCO56XX_IN_3_CB(IOPORT("DSW0"))
MCFG_NAMCO56XX_OUT_0_CB(DEVWRITELINE("dipmux", ls157_device, select_w)) MCFG_DEVCB_BIT(0)
-
- MCFG_DEVICE_ADD("dipmux", LS157, 0)
- MCFG_74157_A_IN_CB(IOPORT("DSW2"))
- MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
-
- MCFG_DEVICE_MODIFY("mainlatch")
- MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT
- MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( todruaga, digdug2 )
@@ -1842,9 +1593,6 @@ static MACHINE_CONFIG_START( motos )
MCFG_FRAGMENT_ADD(mappy_common)
- MCFG_CPU_MODIFY("maincpu")
- MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, motos_main_vblank_irq) // also update the custom I/O chips
-
MCFG_DEVICE_ADD("namcoio_1", NAMCO_56XX, 0)
MCFG_NAMCO56XX_IN_0_CB(IOPORT("COINS"))
MCFG_NAMCO56XX_IN_1_CB(IOPORT("P1"))
@@ -1858,14 +1606,6 @@ static MACHINE_CONFIG_START( motos )
MCFG_NAMCO56XX_IN_2_CB(IOPORT("DSW1")) MCFG_DEVCB_RSHIFT(4)
MCFG_NAMCO56XX_IN_3_CB(IOPORT("DSW0"))
MCFG_NAMCO56XX_OUT_0_CB(DEVWRITELINE("dipmux", ls157_device, select_w)) MCFG_DEVCB_BIT(0)
-
- MCFG_DEVICE_ADD("dipmux", LS157, 0)
- MCFG_74157_A_IN_CB(IOPORT("DSW2"))
- MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
-
- MCFG_DEVICE_MODIFY("mainlatch")
- MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
- MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
MACHINE_CONFIG_END
@@ -2326,20 +2066,8 @@ ROM_END
-DRIVER_INIT_MEMBER(mappy_state,superpac)
-{
- m_type = GAME_SUPERPAC;
-}
-
-DRIVER_INIT_MEMBER(mappy_state,pacnpal)
-{
- m_type = GAME_PACNPAL;
-}
-
DRIVER_INIT_MEMBER(mappy_state,grobda)
{
- m_type = GAME_GROBDA;
-
/* The speech in Grobda might not be a standard Namco sound feature, but rather a hack.
The hardware automatically cycles the bottom 6 address lines of sound RAM, so they
probably added a latch loaded when the bottom 4 lines are 0010 (which corresponds
@@ -2351,56 +2079,34 @@ DRIVER_INIT_MEMBER(mappy_state,grobda)
m_subcpu->space(AS_PROGRAM).install_write_handler(0x0002, 0x0002, write8_delegate(FUNC(dac_byte_interface::write), (dac_byte_interface *)m_dac));
}
-DRIVER_INIT_MEMBER(mappy_state,phozon)
-{
- m_type = GAME_PHOZON;
-}
-
-DRIVER_INIT_MEMBER(mappy_state,mappy)
-{
- m_type = GAME_MAPPY;
-}
-
-DRIVER_INIT_MEMBER(mappy_state,druaga)
-{
- m_type = GAME_DRUAGA;
-}
-
DRIVER_INIT_MEMBER(mappy_state,digdug2)
{
- m_type = GAME_DIGDUG2;
-
/* appears to not use the watchdog */
m_maincpu->space(AS_PROGRAM).nop_write(0x8000, 0x8000);
}
-DRIVER_INIT_MEMBER(mappy_state,motos)
-{
- m_type = GAME_MOTOS;
-}
-
/* 2x6809, static tilemap, 2bpp sprites (Super Pacman type) */
-GAME( 1982, superpac, 0, superpac, superpac, mappy_state, superpac, ROT90, "Namco", "Super Pac-Man", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, superpacm,superpac, superpac, superpac, mappy_state, superpac, ROT90, "Namco (Bally Midway license)", "Super Pac-Man (Midway)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, pacnpal, 0, pacnpal, pacnpal, mappy_state, pacnpal, ROT90, "Namco", "Pac & Pal", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, pacnpal2, pacnpal, pacnpal, pacnpal, mappy_state, pacnpal, ROT90, "Namco", "Pac & Pal (older)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, pacnchmp, pacnpal, pacnpal, pacnpal, mappy_state, pacnpal, ROT90, "Namco", "Pac-Man & Chomp Chomp", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, superpac, 0, superpac, superpac, mappy_state, 0, ROT90, "Namco", "Super Pac-Man", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, superpacm,superpac, superpac, superpac, mappy_state, 0, ROT90, "Namco (Bally Midway license)", "Super Pac-Man (Midway)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, pacnpal, 0, pacnpal, pacnpal, mappy_state, 0, ROT90, "Namco", "Pac & Pal", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, pacnpal2, pacnpal, pacnpal, pacnpal, mappy_state, 0, ROT90, "Namco", "Pac & Pal (older)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, pacnchmp, pacnpal, pacnpal, pacnpal, mappy_state, 0, ROT90, "Namco", "Pac-Man & Chomp Chomp", MACHINE_SUPPORTS_SAVE )
GAME( 1984, grobda, 0, grobda, grobda, mappy_state, grobda, ROT90, "Namco", "Grobda (New Ver.)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, grobda2, grobda, grobda, grobda, mappy_state, grobda, ROT90, "Namco", "Grobda (Old Ver. set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, grobda3, grobda, grobda, grobda, mappy_state, grobda, ROT90, "Namco", "Grobda (Old Ver. set 2)", MACHINE_SUPPORTS_SAVE )
/* 3x6809, static tilemap, 2bpp sprites (Gaplus type) */
-GAME( 1983, phozon, 0, phozon, phozon, mappy_state, phozon, ROT90, "Namco", "Phozon (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, phozons, phozon, phozon, phozon, mappy_state, phozon, ROT90, "Namco (Sidam license)", "Phozon (Sidam)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, phozon, 0, phozon, phozon, mappy_state, 0, ROT90, "Namco", "Phozon (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, phozons, phozon, phozon, phozon, mappy_state, 0, ROT90, "Namco (Sidam license)", "Phozon (Sidam)", MACHINE_SUPPORTS_SAVE )
/* 2x6809, scroling tilemap, 4bpp sprites (Super Pacman type) */
-GAME( 1983, mappy, 0, mappy, mappy, mappy_state, mappy, ROT90, "Namco", "Mappy (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, mappyj, mappy, mappy, mappy, mappy_state, mappy, ROT90, "Namco", "Mappy (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1984, todruaga, 0, todruaga, todruaga, mappy_state, druaga, ROT90, "Namco", "The Tower of Druaga (New Ver.)", MACHINE_SUPPORTS_SAVE )
-GAME( 1984, todruagao,todruaga, todruaga, todruaga, mappy_state, druaga, ROT90, "Namco", "The Tower of Druaga (Old Ver.)", MACHINE_SUPPORTS_SAVE )
-GAME( 1984, todruagas,todruaga, todruaga, todruaga, mappy_state, druaga, ROT90, "bootleg? (Sidam)", "The Tower of Druaga (Sidam)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, mappy, 0, mappy, mappy, mappy_state, 0, ROT90, "Namco", "Mappy (US)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, mappyj, mappy, mappy, mappy, mappy_state, 0, ROT90, "Namco", "Mappy (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, todruaga, 0, todruaga, todruaga, mappy_state, 0, ROT90, "Namco", "The Tower of Druaga (New Ver.)", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, todruagao,todruaga, todruaga, todruaga, mappy_state, 0, ROT90, "Namco", "The Tower of Druaga (Old Ver.)", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, todruagas,todruaga, todruaga, todruaga, mappy_state, 0, ROT90, "bootleg? (Sidam)", "The Tower of Druaga (Sidam)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, digdug2, 0, digdug2, digdug2, mappy_state, digdug2, ROT90, "Namco", "Dig Dug II (New Ver.)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, digdug2o, digdug2, digdug2, digdug2, mappy_state, digdug2, ROT90, "Namco", "Dig Dug II (Old Ver.)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, motos, 0, motos, motos, mappy_state, motos, ROT90, "Namco", "Motos", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, motos, 0, motos, motos, mappy_state, 0, ROT90, "Namco", "Motos", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/includes/mappy.h b/src/mame/includes/mappy.h
index ae60c4792cf..1c5193f4a64 100644
--- a/src/mame/includes/mappy.h
+++ b/src/mame/includes/mappy.h
@@ -10,25 +10,7 @@ class mappy_state : public driver_device
public:
enum
{
- TIMER_SUPERPAC_IO_RUN,
- TIMER_PACNPAL_IO_RUN,
- TIMER_GROBDA_IO_RUN,
- TIMER_PHOZON_IO_RUN,
- TIMER_MAPPY_IO_RUN,
- TIMER_DIGDUG2_IO_RUN,
- TIMER_MOTOS_IO_RUN
- };
-
- enum
- {
- GAME_SUPERPAC = 0,
- GAME_PACNPAL,
- GAME_GROBDA,
- GAME_PHOZON,
- GAME_MAPPY,
- GAME_DRUAGA,
- GAME_DIGDUG2,
- GAME_MOTOS
+ TIMER_IO_RUN
};
mappy_state(const machine_config &mconfig, device_type type, const char *tag)
@@ -38,6 +20,7 @@ public:
m_maincpu(*this, "maincpu"),
m_subcpu(*this, "sub"),
m_subcpu2(*this, "sub2"),
+ m_namcoio(*this, "namcoio_%u", 1),
m_namco_15xx(*this, "namco"),
m_dac(*this, "dac"),
m_gfxdecode(*this, "gfxdecode"),
@@ -50,21 +33,13 @@ public:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_subcpu;
optional_device<cpu_device> m_subcpu2;
+ required_device_array<namcoio_device, 2> m_namcoio;
required_device<namco_15xx_device> m_namco_15xx;
optional_device<dac_byte_interface> m_dac;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
- namco56xx_device *m_namco56xx_1;
- namco56xx_device *m_namco56xx_2;
- namco58xx_device *m_namco58xx_1;
- namco58xx_device *m_namco58xx_2;
- namco59xx_device *m_namco59xx;
-
- // per-game variable to distinguish between the various IO chip config
- int m_type;
-
tilemap_t *m_bg_tilemap;
bitmap_ind16 m_sprite_bitmap;
@@ -89,7 +64,7 @@ public:
TILE_GET_INFO_MEMBER(superpac_get_tile_info);
TILE_GET_INFO_MEMBER(phozon_get_tile_info);
TILE_GET_INFO_MEMBER(mappy_get_tile_info);
- DECLARE_MACHINE_START(mappy);
+ virtual void machine_start() override;
DECLARE_VIDEO_START(superpac);
DECLARE_PALETTE_INIT(superpac);
DECLARE_VIDEO_START(phozon);
@@ -99,30 +74,11 @@ public:
uint32_t screen_update_superpac(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_phozon(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_mappy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- INTERRUPT_GEN_MEMBER(superpac_main_vblank_irq);
- INTERRUPT_GEN_MEMBER(pacnpal_main_vblank_irq);
- INTERRUPT_GEN_MEMBER(grobda_main_vblank_irq);
- INTERRUPT_GEN_MEMBER(phozon_main_vblank_irq);
- INTERRUPT_GEN_MEMBER(mappy_main_vblank_irq);
- INTERRUPT_GEN_MEMBER(digdug2_main_vblank_irq);
- INTERRUPT_GEN_MEMBER(motos_main_vblank_irq);
+ INTERRUPT_GEN_MEMBER(main_vblank_irq);
INTERRUPT_GEN_MEMBER(sub_vblank_irq);
INTERRUPT_GEN_MEMBER(sub2_vblank_irq);
- TIMER_CALLBACK_MEMBER(superpac_io_run);
- TIMER_CALLBACK_MEMBER(pacnpal_io_run);
- TIMER_CALLBACK_MEMBER(grobda_io_run);
- TIMER_CALLBACK_MEMBER(phozon_io_run);
- TIMER_CALLBACK_MEMBER(mappy_io_run);
- TIMER_CALLBACK_MEMBER(digdug2_io_run);
- TIMER_CALLBACK_MEMBER(motos_io_run);
- DECLARE_DRIVER_INIT(superpac);
- DECLARE_DRIVER_INIT(pacnpal);
DECLARE_DRIVER_INIT(grobda);
- DECLARE_DRIVER_INIT(phozon);
- DECLARE_DRIVER_INIT(mappy);
- DECLARE_DRIVER_INIT(druaga);
DECLARE_DRIVER_INIT(digdug2);
- DECLARE_DRIVER_INIT(motos);
void mappy_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t *spriteram_base);
void phozon_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t *spriteram_base);