diff --git a/src/mame/drivers/galaga.cpp b/src/mame/drivers/galaga.cpp index f0c530e5516..c486bd6cba0 100644 --- a/src/mame/drivers/galaga.cpp +++ b/src/mame/drivers/galaga.cpp @@ -1553,16 +1553,13 @@ static const char *const battles_sample_names[] = nullptr /* end of array */ }; -INTERRUPT_GEN_MEMBER(galaga_state::main_vblank_irq) +WRITE_LINE_MEMBER(galaga_state::vblank_irq) { - if(m_main_irq_mask) - device.execute().set_input_line(0, ASSERT_LINE); -} + if (state && m_main_irq_mask) + m_maincpu->set_input_line(0, ASSERT_LINE); -INTERRUPT_GEN_MEMBER(galaga_state::sub_vblank_irq) -{ - if(m_sub_irq_mask) - device.execute().set_input_line(0, ASSERT_LINE); + if (state && m_sub_irq_mask) + m_subcpu->set_input_line(0, ASSERT_LINE); } MACHINE_CONFIG_START(bosco_state::bosco) @@ -1570,11 +1567,9 @@ MACHINE_CONFIG_START(bosco_state::bosco) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(bosco_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", galaga_state, main_vblank_irq) MCFG_CPU_ADD("sub", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(bosco_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", galaga_state, sub_vblank_irq) MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(bosco_map) @@ -1643,6 +1638,7 @@ MACHINE_CONFIG_START(bosco_state::bosco) MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/3, 384, 0, 288, 264, 16, 224+16) MCFG_SCREEN_UPDATE_DRIVER(bosco_state, screen_update_bosco) MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(bosco_state, screen_vblank_bosco)) + MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(galaga_state, vblank_irq)) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", bosco) @@ -1669,11 +1665,9 @@ MACHINE_CONFIG_START(galaga_state::galaga) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(galaga_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", galaga_state, main_vblank_irq) MCFG_CPU_ADD("sub", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(galaga_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", galaga_state, sub_vblank_irq) MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(galaga_map) @@ -1720,6 +1714,7 @@ MACHINE_CONFIG_START(galaga_state::galaga) MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/3, 384, 0, 288, 264, 0, 224) MCFG_SCREEN_UPDATE_DRIVER(galaga_state, screen_update_galaga) MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(galaga_state, screen_vblank_galaga)) + MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(galaga_state, vblank_irq)) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", galaga) @@ -1776,11 +1771,9 @@ MACHINE_CONFIG_START(xevious_state::xevious) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(xevious_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", galaga_state, main_vblank_irq) MCFG_CPU_ADD("sub", Z80,MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(xevious_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", galaga_state, sub_vblank_irq) MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(xevious_map) @@ -1828,6 +1821,7 @@ MACHINE_CONFIG_START(xevious_state::xevious) MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/3, 384, 0, 288, 264, 0, 224) MCFG_SCREEN_UPDATE_DRIVER(xevious_state, screen_update_xevious) MCFG_SCREEN_PALETTE("palette") + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(galaga_state, vblank_irq)) MCFG_GFXDECODE_ADD("gfxdecode", "palette", xevious) MCFG_PALETTE_ADD("palette", 128*4+64*8+64*2) @@ -1865,7 +1859,10 @@ MACHINE_CONFIG_START(xevious_state::battles) MCFG_CPU_ADD("sub3", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(battles_mem4) - MCFG_CPU_VBLANK_INT_DRIVER("screen", xevious_state, battles_interrupt_4) + + MCFG_SCREEN_MODIFY("screen") + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(galaga_state, vblank_irq)) + MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(xevious_state, battles_interrupt_4)) MCFG_TIMER_DRIVER_ADD("battles_nmi", xevious_state, battles_nmi_generate) @@ -1885,11 +1882,9 @@ MACHINE_CONFIG_START(digdug_state::digdug) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(digdug_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", galaga_state, main_vblank_irq) MCFG_CPU_ADD("sub", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(digdug_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", galaga_state, sub_vblank_irq) MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(digdug_map) @@ -1948,6 +1943,7 @@ MACHINE_CONFIG_START(digdug_state::digdug) MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/3, 384, 0, 288, 264, 0, 224) MCFG_SCREEN_UPDATE_DRIVER(digdug_state, screen_update_digdug) MCFG_SCREEN_PALETTE("palette") + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(galaga_state, vblank_irq)) MCFG_GFXDECODE_ADD("gfxdecode", "palette", digdug) MCFG_PALETTE_ADD("palette", 16*2+64*4+64*4) diff --git a/src/mame/drivers/pacland.cpp b/src/mame/drivers/pacland.cpp index 643bf6226ae..fdde347492f 100644 --- a/src/mame/drivers/pacland.cpp +++ b/src/mame/drivers/pacland.cpp @@ -416,15 +416,12 @@ static GFXDECODE_START( pacland ) GFXDECODE_END -INTERRUPT_GEN_MEMBER(pacland_state::main_vblank_irq) +WRITE_LINE_MEMBER(pacland_state::vblank_irq) { - if(m_main_irq_mask) + if (state && m_main_irq_mask) m_maincpu->set_input_line(0, ASSERT_LINE); -} -INTERRUPT_GEN_MEMBER(pacland_state::mcu_vblank_irq) -{ - if(m_mcu_irq_mask) + if (state && m_mcu_irq_mask) m_mcu->set_input_line(0, ASSERT_LINE); } @@ -433,12 +430,10 @@ MACHINE_CONFIG_START(pacland_state::pacland) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", MC6809E, XTAL(49'152'000)/32) /* 1.536 MHz */ MCFG_CPU_PROGRAM_MAP(main_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", pacland_state, main_vblank_irq) MCFG_CPU_ADD("mcu", HD63701, XTAL(49'152'000)/8) /* 6.144 MHz? */ MCFG_CPU_PROGRAM_MAP(mcu_map) MCFG_CPU_IO_MAP(mcu_port_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", pacland_state, mcu_vblank_irq) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* we need heavy synching between the MCU and the CPU */ @@ -449,6 +444,7 @@ MACHINE_CONFIG_START(pacland_state::pacland) MCFG_SCREEN_RAW_PARAMS(XTAL(49'152'000)/8, 384, 3*8, 39*8, 264, 2*8, 30*8) MCFG_SCREEN_UPDATE_DRIVER(pacland_state, screen_update) MCFG_SCREEN_PALETTE("palette") + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(pacland_state, vblank_irq)) MCFG_GFXDECODE_ADD("gfxdecode", "palette", pacland) MCFG_PALETTE_ADD("palette", 256*4+256*4+64*16) diff --git a/src/mame/drivers/tceptor.cpp b/src/mame/drivers/tceptor.cpp index 0a03fffce8c..534007c564f 100644 --- a/src/mame/drivers/tceptor.cpp +++ b/src/mame/drivers/tceptor.cpp @@ -40,14 +40,6 @@ WRITE8_MEMBER(tceptor_state::m68k_shared_w) /*******************************************************************/ -INTERRUPT_GEN_MEMBER(tceptor_state::m6809_vb_interrupt) -{ - if (m_m6809_irq_enable) - device.execute().set_input_line(0, HOLD_LINE); - else - m_m6809_irq_enable = 1; -} - WRITE8_MEMBER(tceptor_state::m6809_irq_enable_w) { m_m6809_irq_enable = 1; @@ -59,26 +51,12 @@ WRITE8_MEMBER(tceptor_state::m6809_irq_disable_w) } -INTERRUPT_GEN_MEMBER(tceptor_state::m68k_vb_interrupt) -{ - if (m_m68k_irq_enable) - device.execute().set_input_line(M68K_IRQ_1, HOLD_LINE); -} - WRITE16_MEMBER(tceptor_state::m68k_irq_enable_w) { m_m68k_irq_enable = data; } -INTERRUPT_GEN_MEMBER(tceptor_state::mcu_vb_interrupt) -{ - if (m_mcu_irq_enable) - device.execute().set_input_line(0, HOLD_LINE); - else - m_mcu_irq_enable = 1; -} - WRITE8_MEMBER(tceptor_state::mcu_irq_enable_w) { m_mcu_irq_enable = 1; @@ -350,7 +328,6 @@ MACHINE_CONFIG_START(tceptor_state::tceptor) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M6809, XTAL(49'152'000)/32) MCFG_CPU_PROGRAM_MAP(m6809_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", tceptor_state, m6809_vb_interrupt) MCFG_CPU_ADD("audiocpu", M65C02, XTAL(49'152'000)/24) MCFG_CPU_PROGRAM_MAP(m6502_a_map) @@ -360,12 +337,10 @@ MACHINE_CONFIG_START(tceptor_state::tceptor) MCFG_CPU_ADD("sub", M68000, XTAL(49'152'000)/4) MCFG_CPU_PROGRAM_MAP(m68k_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", tceptor_state, m68k_vb_interrupt) MCFG_CPU_ADD("mcu", HD63701, XTAL(49'152'000)/8) // or compatible 6808 with extra instructions MCFG_CPU_PROGRAM_MAP(mcu_map) MCFG_CPU_IO_MAP(mcu_io_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", tceptor_state, mcu_vb_interrupt) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) diff --git a/src/mame/includes/pacland.h b/src/mame/includes/pacland.h index 8f2f2866305..05ce1b8da59 100644 --- a/src/mame/includes/pacland.h +++ b/src/mame/includes/pacland.h @@ -63,8 +63,7 @@ public: virtual void video_start() override; DECLARE_PALETTE_INIT(pacland); - INTERRUPT_GEN_MEMBER(main_vblank_irq); - INTERRUPT_GEN_MEMBER(mcu_vblank_irq); + DECLARE_WRITE_LINE_MEMBER(vblank_irq); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void switch_palette(); diff --git a/src/mame/includes/tceptor.h b/src/mame/includes/tceptor.h index b904882d0ac..4a4d5098812 100644 --- a/src/mame/includes/tceptor.h +++ b/src/mame/includes/tceptor.h @@ -10,6 +10,8 @@ public: tceptor_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), + m_subcpu(*this, "sub"), + m_mcu(*this, "mcu"), m_cus30(*this, "namco"), m_tile_ram(*this, "tile_ram"), m_tile_attr(*this, "tile_attr"), @@ -25,6 +27,8 @@ public: uint8_t m_m68k_irq_enable; uint8_t m_mcu_irq_enable; required_device m_maincpu; + required_device m_subcpu; + required_device m_mcu; required_device m_cus30; required_shared_ptr m_tile_ram; required_shared_ptr m_tile_attr; diff --git a/src/mame/includes/xevious.h b/src/mame/includes/xevious.h index 6c3b8079163..1c296fcc21a 100644 --- a/src/mame/includes/xevious.h +++ b/src/mame/includes/xevious.h @@ -38,7 +38,7 @@ public: DECLARE_MACHINE_RESET(xevios); DECLARE_MACHINE_RESET(battles); uint32_t screen_update_xevious(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(battles_interrupt_4); + DECLARE_WRITE_LINE_MEMBER(battles_interrupt_4); TIMER_DEVICE_CALLBACK_MEMBER(battles_nmi_generate); void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect); DECLARE_WRITE8_MEMBER( xevious_fg_videoram_w ); diff --git a/src/mame/machine/xevious.cpp b/src/mame/machine/xevious.cpp index 57104d93912..833c352eee2 100644 --- a/src/mame/machine/xevious.cpp +++ b/src/mame/machine/xevious.cpp @@ -175,7 +175,8 @@ READ8_MEMBER( xevious_state::battles_input_port_r ) } -INTERRUPT_GEN_MEMBER(xevious_state::battles_interrupt_4) +WRITE_LINE_MEMBER(xevious_state::battles_interrupt_4) { - device.execute().set_input_line(0, HOLD_LINE); + if (state) + m_subcpu3->set_input_line(0, HOLD_LINE); } diff --git a/src/mame/video/tceptor.cpp b/src/mame/video/tceptor.cpp index 3e344fbd576..c627be26dee 100644 --- a/src/mame/video/tceptor.cpp +++ b/src/mame/video/tceptor.cpp @@ -535,6 +535,19 @@ WRITE_LINE_MEMBER(tceptor_state::screen_vblank_tceptor) if (state) { memcpy(m_sprite_ram_buffered.get(), m_sprite_ram, 0x200); + + if (m_m6809_irq_enable) + m_maincpu->set_input_line(0, HOLD_LINE); + else + m_m6809_irq_enable = 1; + + if (m_m68k_irq_enable) + m_subcpu->set_input_line(1, HOLD_LINE); + + if (m_mcu_irq_enable) + m_mcu->set_input_line(0, HOLD_LINE); + else + m_mcu_irq_enable = 1; } }