From bb6aaac7680adb3c5d452eff74e493302eaaf0f3 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 24 Jul 2017 11:34:09 -0400 Subject: [PATCH] mappy.cpp: Clean up I/O handlers (nw) --- src/mame/drivers/mappy.cpp | 368 ++++--------------------------------- src/mame/includes/mappy.h | 54 +----- 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) +INTERRUPT_GEN_MEMBER(mappy_state::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_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_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) -{ - 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_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("namcoio_1"); - m_namco56xx_2 = machine().device("namcoio_2"); - break; - case GAME_MAPPY: - m_namco58xx_1 = machine().device("namcoio_1"); - m_namco58xx_2 = machine().device("namcoio_2"); - break; - case GAME_GROBDA: - case GAME_PHOZON: - case GAME_DRUAGA: - case GAME_DIGDUG2: - m_namco58xx_1 = machine().device("namcoio_1"); - m_namco56xx_1 = machine().device("namcoio_2"); - break; - case GAME_PACNPAL: - m_namco56xx_1 = machine().device("namcoio_1"); - m_namco59xx = machine().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 m_maincpu; required_device m_subcpu; optional_device m_subcpu2; + required_device_array m_namcoio; required_device m_namco_15xx; optional_device m_dac; required_device m_gfxdecode; required_device m_screen; required_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);