From f88926de9d8cbaef09f1ad26b488e9b42a40d635 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 28 Mar 2018 22:40:45 -0400 Subject: jollyjgr.cpp, mirax.cpp, pachifev.cpp, ron.cpp, marineb.cpp: MCFG_CPU_VBLANK_INT line callback replacement (nw) --- src/mame/drivers/jollyjgr.cpp | 13 ++++++++----- src/mame/drivers/marineb.cpp | 31 ++++++++++++++++++++++--------- src/mame/drivers/mirax.cpp | 10 +++++----- src/mame/drivers/pachifev.cpp | 9 +++++---- src/mame/drivers/ron.cpp | 12 +++++++----- src/mame/includes/marineb.h | 7 ++++--- 6 files changed, 51 insertions(+), 31 deletions(-) diff --git a/src/mame/drivers/jollyjgr.cpp b/src/mame/drivers/jollyjgr.cpp index c7e81507eb4..956cece4492 100644 --- a/src/mame/drivers/jollyjgr.cpp +++ b/src/mame/drivers/jollyjgr.cpp @@ -168,7 +168,7 @@ public: DECLARE_PALETTE_INIT(jollyjgr); uint32_t screen_update_jollyjgr(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); uint32_t screen_update_fspider(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(jollyjgr_interrupt); + DECLARE_WRITE_LINE_MEMBER(vblank_irq); void draw_bitmap( bitmap_rgb32 &bitmap ); required_device m_maincpu; required_device m_gfxdecode; @@ -226,6 +226,8 @@ WRITE8_MEMBER(jollyjgr_state::jollyjgr_misc_w) m_bg_tilemap->set_flip((m_flip_x ? TILEMAP_FLIPX : 0) | (m_flip_y ? TILEMAP_FLIPY : 0)); m_nmi_enable = data & 0x80; + if (!m_nmi_enable) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } WRITE8_MEMBER(jollyjgr_state::jollyjgr_coin_lookout_w) @@ -651,10 +653,10 @@ GFXDECODE_END * *************************************/ -INTERRUPT_GEN_MEMBER(jollyjgr_state::jollyjgr_interrupt) +WRITE_LINE_MEMBER(jollyjgr_state::vblank_irq) { - if(m_nmi_enable) - device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); + if (state && m_nmi_enable) + m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } @@ -670,6 +672,7 @@ void jollyjgr_state::machine_start() void jollyjgr_state::machine_reset() { m_nmi_enable = 0; + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); m_flip_x = 0; m_flip_y = 0; m_bitmap_disable = 0; @@ -680,7 +683,6 @@ MACHINE_CONFIG_START(jollyjgr_state::jollyjgr) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, XTAL(18'000'000)/6) /* 3MHz verified */ MCFG_CPU_PROGRAM_MAP(jollyjgr_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", jollyjgr_state, jollyjgr_interrupt) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -689,6 +691,7 @@ MACHINE_CONFIG_START(jollyjgr_state::jollyjgr) MCFG_SCREEN_SIZE(256, 256) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(jollyjgr_state, screen_update_jollyjgr) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(jollyjgr_state, vblank_irq)) MCFG_GFXDECODE_ADD("gfxdecode", "palette", jollyjgr) MCFG_PALETTE_ADD("palette", 32) // tilemap and sprites diff --git a/src/mame/drivers/marineb.cpp b/src/mame/drivers/marineb.cpp index ded73a301e0..f49c32879c8 100644 --- a/src/mame/drivers/marineb.cpp +++ b/src/mame/drivers/marineb.cpp @@ -58,11 +58,21 @@ void marineb_state::machine_reset() void marineb_state::machine_start() { + save_item(NAME(m_irq_mask)); } WRITE_LINE_MEMBER(marineb_state::irq_mask_w) { m_irq_mask = state; + if (!m_irq_mask) + m_maincpu->set_input_line(0, CLEAR_LINE); +} + +WRITE_LINE_MEMBER(marineb_state::nmi_mask_w) +{ + m_irq_mask = state; + if (!m_irq_mask) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } void marineb_state::marineb_map(address_map &map) @@ -516,16 +526,16 @@ static GFXDECODE_START( hopprobo ) GFXDECODE_ENTRY( "gfx2", 0x0000, marineb_big_spritelayout, 0, 64 ) GFXDECODE_END -INTERRUPT_GEN_MEMBER(marineb_state::marineb_vblank_irq) +WRITE_LINE_MEMBER(marineb_state::marineb_vblank_irq) { - if(m_irq_mask) - device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); + if (state && m_irq_mask) + m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } -INTERRUPT_GEN_MEMBER(marineb_state::wanted_vblank_irq) +WRITE_LINE_MEMBER(marineb_state::wanted_vblank_irq) { - if(m_irq_mask) - device.execute().set_input_line(0, HOLD_LINE); + if (state && m_irq_mask) + m_maincpu->set_input_line(0, HOLD_LINE); } @@ -535,10 +545,9 @@ MACHINE_CONFIG_START(marineb_state::marineb) MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) /* 3 MHz? */ MCFG_CPU_PROGRAM_MAP(marineb_map) MCFG_CPU_IO_MAP(marineb_io_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", marineb_state, marineb_vblank_irq) MCFG_DEVICE_ADD("outlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(marineb_state, irq_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(marineb_state, nmi_mask_w)) MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(marineb_state, flipscreen_y_w)) MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(marineb_state, flipscreen_x_w)) @@ -550,6 +559,7 @@ MACHINE_CONFIG_START(marineb_state::marineb) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(marineb_state, screen_update_marineb) MCFG_SCREEN_PALETTE("palette") + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(marineb_state, marineb_vblank_irq)) MCFG_GFXDECODE_ADD("gfxdecode", "palette", marineb) MCFG_PALETTE_ADD("palette", 256) @@ -606,12 +616,15 @@ MACHINE_CONFIG_START(marineb_state::wanted) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_IO_MAP(wanted_io_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", marineb_state, wanted_vblank_irq) + + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(marineb_state, irq_mask_w)) /* video hardware */ MCFG_GFXDECODE_MODIFY("gfxdecode", wanted) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE_DRIVER(marineb_state, screen_update_springer) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(marineb_state, wanted_vblank_irq)) // sound hardware (PSG type verified only for bcruzm12) MCFG_SOUND_REPLACE("ay1", AY8912, SOUND_CLOCK) diff --git a/src/mame/drivers/mirax.cpp b/src/mame/drivers/mirax.cpp index 9bf20baf2e3..945a2fd5745 100644 --- a/src/mame/drivers/mirax.cpp +++ b/src/mame/drivers/mirax.cpp @@ -158,7 +158,7 @@ public: void draw_tilemap(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t draw_flag); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(vblank_irq); + DECLARE_WRITE_LINE_MEMBER(vblank_irq); void mirax(machine_config &config); void mirax_main_map(address_map &map); void mirax_sound_map(address_map &map); @@ -472,16 +472,15 @@ static GFXDECODE_START( mirax ) GFXDECODE_END -INTERRUPT_GEN_MEMBER(mirax_state::vblank_irq) +WRITE_LINE_MEMBER(mirax_state::vblank_irq) { - if (m_nmi_mask) - device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE); + if (state && m_nmi_mask) + m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } MACHINE_CONFIG_START(mirax_state::mirax) MCFG_CPU_ADD("maincpu", Z80, 12000000/4) // ceramic potted module, encrypted z80 MCFG_CPU_PROGRAM_MAP(mirax_main_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", mirax_state, vblank_irq) MCFG_CPU_ADD("audiocpu", Z80, 12000000/4) MCFG_CPU_PROGRAM_MAP(mirax_sound_map) @@ -504,6 +503,7 @@ MACHINE_CONFIG_START(mirax_state::mirax) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) MCFG_SCREEN_UPDATE_DRIVER(mirax_state, screen_update) MCFG_SCREEN_PALETTE("palette") + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(mirax_state, vblank_irq)) MCFG_PALETTE_ADD("palette", 0x40) MCFG_PALETTE_INIT_OWNER(mirax_state, mirax) diff --git a/src/mame/drivers/pachifev.cpp b/src/mame/drivers/pachifev.cpp index bba8b18b00a..3bfd1d93389 100644 --- a/src/mame/drivers/pachifev.cpp +++ b/src/mame/drivers/pachifev.cpp @@ -111,7 +111,7 @@ public: DECLARE_READ8_MEMBER(controls_r); virtual void machine_start() override; virtual void machine_reset() override; - INTERRUPT_GEN_MEMBER(pachifev_vblank_irq); + DECLARE_WRITE_LINE_MEMBER(vblank_w); required_device m_maincpu; void pachifev(machine_config &config); void pachifev_cru(address_map &map); @@ -306,15 +306,16 @@ void pachifev_state::machine_reset() } -INTERRUPT_GEN_MEMBER(pachifev_state::pachifev_vblank_irq) +WRITE_LINE_MEMBER(pachifev_state::vblank_w) { + if (state) { static const char *const inname[2] = { "PLUNGER_P1", "PLUNGER_P2" }; /* I wish I had found a better way to handle cocktail inputs, but I can't find a way to access internal RAM */ /* (bit 5 of 0xf0aa : 0 = player 1 and 1 = player 2 - bit 6 of 0xf0aa : 0 = upright and 1 = cocktail). */ /* All I found is that in main RAM, 0xe00f.b determines the player : 0x00 = player 1 and 0x01 = player 2. */ - address_space &ramspace = device.memory().space(AS_PROGRAM); + address_space &ramspace = m_maincpu->space(AS_PROGRAM); uint8_t player = 0; if ((ramspace.read_byte(0xe00f) == 0x01) && ((ioport("DSW1")->read() & 0x08) == 0x00)) @@ -350,13 +351,13 @@ MACHINE_CONFIG_START(pachifev_state::pachifev) // CPU TMS9995, standard variant; no line connections MCFG_TMS99xx_ADD("maincpu", TMS9995, XTAL(12'000'000), pachifev_map, pachifev_cru) - MCFG_CPU_VBLANK_INT_DRIVER("screen", pachifev_state, pachifev_vblank_irq) /* video hardware */ MCFG_DEVICE_ADD( "tms9928a", TMS9928A, XTAL(10'738'635) / 2 ) MCFG_TMS9928A_VRAM_SIZE(0x4000) MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" ) MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update ) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(pachifev_state, vblank_w)) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/ron.cpp b/src/mame/drivers/ron.cpp index 082cb239050..36a5512d7f1 100644 --- a/src/mame/drivers/ron.cpp +++ b/src/mame/drivers/ron.cpp @@ -53,7 +53,7 @@ public: // screen updates uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_PALETTE_INIT(ron); - INTERRUPT_GEN_MEMBER(vblank_irq); + DECLARE_WRITE_LINE_MEMBER(vblank_irq); DECLARE_WRITE8_MEMBER(output_w); DECLARE_READ8_MEMBER(p1_mux_r); @@ -143,6 +143,8 @@ uint32_t ron_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, WRITE8_MEMBER(ron_state::output_w) { m_nmi_enable = (data & 0x10) == 0x10; + if (!m_nmi_enable) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); if(data & 0xef) printf("%02x\n",data); @@ -427,10 +429,10 @@ PALETTE_INIT_MEMBER(ron_state, ron) } -INTERRUPT_GEN_MEMBER( ron_state::vblank_irq ) +WRITE_LINE_MEMBER(ron_state::vblank_irq) { - if (m_nmi_enable) - device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); + if (state && m_nmi_enable) + m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } READ8_MEMBER(ron_state::audio_cmd_r) @@ -487,7 +489,6 @@ MACHINE_CONFIG_START(ron_state::ron) MCFG_CPU_ADD("maincpu", Z80, MAIN_CLOCK) MCFG_CPU_PROGRAM_MAP(ron_map) MCFG_CPU_IO_MAP(ron_io) - MCFG_CPU_VBLANK_INT_DRIVER("screen", ron_state, vblank_irq) MCFG_CPU_ADD("audiocpu", I8035, SOUND_CLOCK) MCFG_CPU_PROGRAM_MAP(ron_audio_map) @@ -503,6 +504,7 @@ MACHINE_CONFIG_START(ron_state::ron) MCFG_SCREEN_UPDATE_DRIVER(ron_state, screen_update) MCFG_SCREEN_RAW_PARAMS(VIDEO_CLOCK, 320, 0, 256, 264, 0, 240) MCFG_SCREEN_PALETTE("palette") + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(ron_state, vblank_irq)) MCFG_GFXDECODE_ADD("gfxdecode", "palette", ron) diff --git a/src/mame/includes/marineb.h b/src/mame/includes/marineb.h index 369b2ba6468..957c9466a2a 100644 --- a/src/mame/includes/marineb.h +++ b/src/mame/includes/marineb.h @@ -31,8 +31,9 @@ public: required_device m_gfxdecode; required_device m_palette; - uint8_t m_irq_mask; + bool m_irq_mask; DECLARE_WRITE_LINE_MEMBER(irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(nmi_mask_w); DECLARE_WRITE8_MEMBER(marineb_videoram_w); DECLARE_WRITE8_MEMBER(marineb_colorram_w); DECLARE_WRITE8_MEMBER(marineb_column_scroll_w); @@ -50,8 +51,8 @@ public: uint32_t screen_update_springer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_hoccer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_hopprobo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(marineb_vblank_irq); - INTERRUPT_GEN_MEMBER(wanted_vblank_irq); + DECLARE_WRITE_LINE_MEMBER(marineb_vblank_irq); + DECLARE_WRITE_LINE_MEMBER(wanted_vblank_irq); void set_tilemap_scrolly( int cols ); void springer(machine_config &config); void wanted(machine_config &config); -- cgit v1.2.3