champbas.cpp, lwings.cpp: VBLANK IRQ modernization (nw)

This commit is contained in:
AJR 2019-08-25 00:13:58 -04:00
parent 48d67ae6be
commit 56326e9fe8
4 changed files with 22 additions and 19 deletions

View File

@ -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);

View File

@ -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_device>("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<cpu_device>("adpcm")->set_addrmap(AS_IO, &lwings_state::avengers_adpcm_io_map);

View File

@ -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);

View File

@ -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 );