From 56326e9fe87e06faad384ab7416fb5dc0c413757 Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 25 Aug 2019 00:13:58 -0400 Subject: [PATCH] champbas.cpp, lwings.cpp: VBLANK IRQ modernization (nw) --- src/mame/drivers/champbas.cpp | 14 +++++++------- src/mame/drivers/lwings.cpp | 21 ++++++++++++--------- src/mame/includes/champbas.h | 2 +- src/mame/includes/lwings.h | 4 ++-- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/mame/drivers/champbas.cpp b/src/mame/drivers/champbas.cpp index eea94f3ad36..201eb966bac 100644 --- a/src/mame/drivers/champbas.cpp +++ b/src/mame/drivers/champbas.cpp @@ -512,10 +512,10 @@ void champbas_state::machine_start() save_item(NAME(m_gfx_bank)); } -INTERRUPT_GEN_MEMBER(champbas_state::vblank_irq) +WRITE_LINE_MEMBER(champbas_state::vblank_irq) { - if (m_irq_mask) - device.execute().set_input_line(0, ASSERT_LINE); + if (state && m_irq_mask) + m_maincpu->set_input_line(0, ASSERT_LINE); } @@ -524,7 +524,6 @@ void champbas_state::talbot(machine_config &config) /* basic machine hardware */ Z80(config, m_maincpu, XTAL(18'432'000)/6); m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbasj_map); - m_maincpu->set_vblank_int("screen", FUNC(champbas_state::vblank_irq)); LS259(config, m_mainlatch); m_mainlatch->q_out_cb<0>().set(FUNC(champbas_state::irq_enable_w)); @@ -548,6 +547,7 @@ void champbas_state::talbot(machine_config &config) screen.set_visarea(0, 32*8-1, 2*8, 30*8-1); screen.set_screen_update(FUNC(champbas_state::screen_update_champbas)); screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(champbas_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_talbot); PALETTE(config, m_palette, FUNC(champbas_state::champbas_palette), 512, 32); @@ -566,7 +566,6 @@ void champbas_state::champbas(machine_config &config) /* basic machine hardware */ Z80(config, m_maincpu, XTAL(18'432'000)/6); m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbas_map); - m_maincpu->set_vblank_int("screen", FUNC(champbas_state::vblank_irq)); LS259(config, m_mainlatch); // 9D; 8G on Champion Baseball II Double Board Configuration m_mainlatch->q_out_cb<0>().set(FUNC(champbas_state::irq_enable_w)); @@ -590,6 +589,7 @@ void champbas_state::champbas(machine_config &config) screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); screen.set_screen_update(FUNC(champbas_state::screen_update_champbas)); screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(champbas_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_champbas); PALETTE(config, m_palette, FUNC(champbas_state::champbas_palette), 512, 32); @@ -668,7 +668,6 @@ void exctsccr_state::exctsccr(machine_config &config) /* basic machine hardware */ Z80(config, m_maincpu, XTAL(18'432'000)/6); m_maincpu->set_addrmap(AS_PROGRAM, &exctsccr_state::exctsccr_map); - m_maincpu->set_vblank_int("screen", FUNC(exctsccr_state::vblank_irq)); LS259(config, m_mainlatch); m_mainlatch->q_out_cb<0>().set(FUNC(exctsccr_state::irq_enable_w)); @@ -701,6 +700,7 @@ void exctsccr_state::exctsccr(machine_config &config) screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); screen.set_screen_update(FUNC(exctsccr_state::screen_update_exctsccr)); screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(exctsccr_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_exctsccr); PALETTE(config, m_palette, FUNC(exctsccr_state::exctsccr_palette), 512, 32); @@ -732,7 +732,6 @@ void exctsccr_state::exctsccrb(machine_config &config) /* basic machine hardware */ Z80(config, m_maincpu, XTAL(18'432'000)/6); m_maincpu->set_addrmap(AS_PROGRAM, &exctsccr_state::exctsccrb_map); - m_maincpu->set_vblank_int("screen", FUNC(exctsccr_state::vblank_irq)); LS259(config, m_mainlatch); m_mainlatch->q_out_cb<0>().set(FUNC(exctsccr_state::irq_enable_w)); @@ -759,6 +758,7 @@ void exctsccr_state::exctsccrb(machine_config &config) screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); screen.set_screen_update(FUNC(exctsccr_state::screen_update_exctsccr)); screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(exctsccr_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_exctsccr); PALETTE(config, m_palette, FUNC(exctsccr_state::exctsccr_palette), 512, 32); diff --git a/src/mame/drivers/lwings.cpp b/src/mame/drivers/lwings.cpp index 18debe71f32..1080b4661e4 100644 --- a/src/mame/drivers/lwings.cpp +++ b/src/mame/drivers/lwings.cpp @@ -103,16 +103,16 @@ WRITE8_MEMBER(lwings_state::lwings_bankswitch_w) machine().bookkeeping().coin_counter_w(0, data & 0x80); } -INTERRUPT_GEN_MEMBER(lwings_state::lwings_interrupt) +WRITE_LINE_MEMBER(lwings_state::lwings_interrupt) { - if(m_nmi_mask) - device.execute().set_input_line_and_vector(0, HOLD_LINE, 0xd7); /* Z80 - RST 10h */ + if (state && m_nmi_mask) + m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0xd7); /* Z80 - RST 10h */ } -INTERRUPT_GEN_MEMBER(lwings_state::avengers_interrupt) +WRITE_LINE_MEMBER(lwings_state::avengers_interrupt) { - if(m_nmi_mask) - device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero); + if (state && m_nmi_mask) + m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } @@ -936,7 +936,6 @@ void lwings_state::lwings(machine_config &config) /* basic machine hardware */ Z80(config, m_maincpu, XTAL(12'000'000)/2); /* verified on PCB */ m_maincpu->set_addrmap(AS_PROGRAM, &lwings_state::lwings_map); - m_maincpu->set_vblank_int("screen", FUNC(lwings_state::lwings_interrupt)); Z80(config, m_soundcpu, XTAL(12'000'000)/4); /* verified on PCB */ m_soundcpu->set_addrmap(AS_PROGRAM, &lwings_state::lwings_sound_map); @@ -955,6 +954,7 @@ void lwings_state::lwings(machine_config &config) screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1); screen.set_screen_update(FUNC(lwings_state::screen_update_lwings)); screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising)); + screen.screen_vblank().append(FUNC(lwings_state::lwings_interrupt)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_lwings); @@ -983,7 +983,6 @@ void lwings_state::fball(machine_config &config) /* basic machine hardware */ Z80(config, m_maincpu, XTAL(12'000'000)/2); m_maincpu->set_addrmap(AS_PROGRAM, &lwings_state::fball_map); - m_maincpu->set_vblank_int("screen", FUNC(lwings_state::avengers_interrupt)); Z80(config, m_soundcpu, XTAL(12'000'000)/4); // ? m_soundcpu->set_addrmap(AS_PROGRAM, &lwings_state::fball_sound_map); @@ -1001,6 +1000,7 @@ void lwings_state::fball(machine_config &config) screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1); // the 16-pixel black border on left edge is correct, test mode actually uses that area screen.set_screen_update(FUNC(lwings_state::screen_update_lwings)); screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising)); + screen.screen_vblank().append(FUNC(lwings_state::avengers_interrupt)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_lwings); @@ -1051,7 +1051,10 @@ void lwings_state::avengers(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &lwings_state::avengers_map); - m_maincpu->set_vblank_int("screen", FUNC(lwings_state::avengers_interrupt)); // RST 38h triggered by software + + screen_device &screen(*subdevice("screen")); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising)); + screen.screen_vblank().append(FUNC(lwings_state::avengers_interrupt)); // RST 38h triggered by software subdevice("adpcm")->set_addrmap(AS_IO, &lwings_state::avengers_adpcm_io_map); diff --git a/src/mame/includes/champbas.h b/src/mame/includes/champbas.h index fe9737411e4..299ef351881 100644 --- a/src/mame/includes/champbas.h +++ b/src/mame/includes/champbas.h @@ -56,7 +56,7 @@ protected: DECLARE_WRITE_LINE_MEMBER(mcu_start_w); DECLARE_READ8_MEMBER(champbja_protection_r); - INTERRUPT_GEN_MEMBER(vblank_irq); + DECLARE_WRITE_LINE_MEMBER(vblank_irq); DECLARE_WRITE8_MEMBER(tilemap_w); DECLARE_WRITE_LINE_MEMBER(gfxbank_w); diff --git a/src/mame/includes/lwings.h b/src/mame/includes/lwings.h index 8cb077bc842..7139936cfb3 100644 --- a/src/mame/includes/lwings.h +++ b/src/mame/includes/lwings.h @@ -86,8 +86,8 @@ private: DECLARE_VIDEO_START(avengersb); uint32_t screen_update_lwings(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_trojan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(lwings_interrupt); - INTERRUPT_GEN_MEMBER(avengers_interrupt); + DECLARE_WRITE_LINE_MEMBER(lwings_interrupt); + DECLARE_WRITE_LINE_MEMBER(avengers_interrupt); inline int is_sprite_on( uint8_t *buffered_spriteram, int offs ); void lwings_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); void trojan_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );