From 18ff3a070068b6c933e0d139abcf8bc9f7b07319 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 9 Apr 2018 12:59:50 -0400 Subject: ddenlovr.cpp: Separate blitter IRQ handlers; fix interrupts in mjmyster and related sets (nw) --- src/mame/drivers/ddenlovr.cpp | 190 +++++++++++++++++++++++++----------------- 1 file changed, 115 insertions(+), 75 deletions(-) diff --git a/src/mame/drivers/ddenlovr.cpp b/src/mame/drivers/ddenlovr.cpp index 6bb9212ac96..584dbced7b6 100644 --- a/src/mame/drivers/ddenlovr.cpp +++ b/src/mame/drivers/ddenlovr.cpp @@ -160,6 +160,10 @@ static const int ddenlovr_commands[8] = { BLIT_NEXT, BLIT_LINE, BLIT_COP static const int hanakanz_commands[8] = { BLIT_NEXT, BLIT_CHANGE_PEN, BLIT_CHANGE_NUM, BLIT_UNKNOWN, BLIT_SKIP, BLIT_COPY, BLIT_LINE, BLIT_STOP }; static const int mjflove_commands[8] = { BLIT_STOP, BLIT_CHANGE_PEN, BLIT_CHANGE_NUM, BLIT_UNKNOWN, BLIT_SKIP, BLIT_COPY, BLIT_LINE, BLIT_NEXT }; +// TODO: make this a proper device callback once the blitter becomes a device +#define MCFG_DDENLOVR_BLITTER_IRQ(_class, _func) \ + set_blitter_irq(write_line_delegate(&_class::_func, #_class "::" #_func, DEVICE_SELF, (_class *)nullptr)); + class ddenlovr_state : public dynax_state { public: @@ -169,6 +173,10 @@ public: m_protection2(*this, "protection2"), m_soundlatch(*this, "soundlatch") { } + void set_blitter_irq(write_line_delegate &&handler) { m_blitter_irq_handler = std::move(handler); } + + write_line_delegate m_blitter_irq_handler; + optional_shared_ptr m_protection1; optional_shared_ptr m_protection2; @@ -261,7 +269,6 @@ public: DECLARE_WRITE_LINE_MEMBER(mjchuuka_rtc_irq); DECLARE_WRITE_LINE_MEMBER(hginga_rtc_irq); DECLARE_WRITE_LINE_MEMBER(mjflove_rtc_irq); - DECLARE_WRITE_LINE_MEMBER(mjmyster_rtc_irq); TIMER_DEVICE_CALLBACK_MEMBER(mjmyster_irq); DECLARE_CUSTOM_INPUT_MEMBER(ddenlovr_blitter_irq_r); @@ -276,8 +283,9 @@ public: DECLARE_WRITE8_MEMBER(ddenlovr_layer_enable2_w); DECLARE_WRITE8_MEMBER(hanakanz_blitter_reg_w); DECLARE_WRITE8_MEMBER(hanakanz_blitter_data_w); - DECLARE_WRITE8_MEMBER(rongrong_blitter_w); + DECLARE_WRITE_LINE_MEMBER(rongrong_blitter_irq); DECLARE_WRITE8_MEMBER(ddenlovr_blitter_w); + DECLARE_WRITE_LINE_MEMBER(ddenlovr_blitter_irq); DECLARE_WRITE_LINE_MEMBER(ddenlovr_blitter_irq_ack_w); DECLARE_READ8_MEMBER(rongrong_gfxrom_r); DECLARE_READ16_MEMBER(ddenlovr_gfxrom_r); @@ -316,14 +324,15 @@ public: DECLARE_WRITE8_MEMBER(rongrong_select_w); DECLARE_READ8_MEMBER(magic_r); DECLARE_WRITE8_MEMBER(mmpanic_rombank_w); - DECLARE_WRITE8_MEMBER(mmpanic_blitter_w); DECLARE_WRITE8_MEMBER(mmpanic_blitter2_w); + DECLARE_WRITE_LINE_MEMBER(mmpanic_blitter_irq); DECLARE_WRITE8_MEMBER(mmpanic_leds_w); DECLARE_WRITE8_MEMBER(mmpanic_leds2_w); DECLARE_WRITE8_MEMBER(mmpanic_lockout_w); DECLARE_READ8_MEMBER(mmpanic_link_r); DECLARE_READ8_MEMBER(funkyfig_busy_r); DECLARE_WRITE8_MEMBER(funkyfig_blitter_w); + DECLARE_WRITE_LINE_MEMBER(funkyfig_blitter_irq); DECLARE_WRITE8_MEMBER(funkyfig_rombank_w); DECLARE_READ8_MEMBER(funkyfig_dsw_r); DECLARE_READ8_MEMBER(funkyfig_coin_r); @@ -355,7 +364,7 @@ public: DECLARE_READ8_MEMBER(mjmyster_keyb_r); DECLARE_READ8_MEMBER(mjmyster_dsw_r); DECLARE_WRITE8_MEMBER(mjmyster_coincounter_w); - DECLARE_WRITE8_MEMBER(mjmyster_blitter_w); + DECLARE_WRITE_LINE_MEMBER(mjmyster_blitter_irq); DECLARE_WRITE8_MEMBER(hginga_rombank_w); DECLARE_READ8_MEMBER(hginga_protection_r); DECLARE_WRITE8_MEMBER(hginga_input_w); @@ -385,7 +394,7 @@ public: DECLARE_WRITE8_MEMBER(mjflove_rombank_w); DECLARE_READ8_MEMBER(mjflove_protection_r); DECLARE_READ8_MEMBER(mjflove_keyb_r); - DECLARE_WRITE8_MEMBER(mjflove_blitter_w); + DECLARE_WRITE_LINE_MEMBER(mjflove_blitter_irq); DECLARE_WRITE8_MEMBER(mjflove_coincounter_w); DECLARE_WRITE8_MEMBER(jongtei_dsw_keyb_w); DECLARE_READ8_MEMBER(jongtei_busy_r); @@ -445,8 +454,8 @@ public: void blit_horiz_line(); void blit_vert_line(); inline void log_blit(int data ); - void blitter_w(int blitter, offs_t offset, uint8_t data, int irq_vector ); - void blitter_w_funkyfig(int blitter, offs_t offset, uint8_t data, int irq_vector ); + void blitter_w(int blitter, offs_t offset, uint8_t data); + void blitter_w_funkyfig(int blitter, offs_t offset, uint8_t data); void copylayer(bitmap_ind16 &bitmap, const rectangle &cliprect, int layer ); void mmpanic_update_leds(); void mjchuuka_get_romdata(); @@ -538,9 +547,9 @@ public: VIDEO_START_MEMBER(ddenlovr_state,ddenlovr) { - int i; + m_blitter_irq_handler.bind_relative_to(*this); - for (i = 0; i < 8; i++) + for (int i = 0; i < 8; i++) { m_ddenlovr_pixmap[i] = std::make_unique(512 * 512); m_ddenlovr_scroll[i * 2 + 0] = m_ddenlovr_scroll[i * 2 + 1] = 0; @@ -582,7 +591,7 @@ VIDEO_START_MEMBER(ddenlovr_state,ddenlovr) m_ddenlovr_blit_regs[0] = 0; m_ddenlovr_blit_regs[1] = 0; - for (i = 0; i < 8; i++) + for (int i = 0; i < 8; i++) { m_ddenlovr_palette_base[i] = 0; m_ddenlovr_palette_mask[i] = 0; @@ -1049,7 +1058,7 @@ inline void ddenlovr_state::log_blit( int data ) #endif } -void ddenlovr_state::blitter_w(int blitter, offs_t offset, uint8_t data, int irq_vector ) +void ddenlovr_state::blitter_w(int blitter, offs_t offset, uint8_t data) { int hi_bits; @@ -1184,18 +1193,7 @@ g_profiler.start(PROFILER_VIDEO); #endif } - if (irq_vector) - /* quizchq */ - m_maincpu->set_input_line_and_vector(0, HOLD_LINE, irq_vector); - else - { - /* ddenlovr */ - if (m_ddenlovr_blitter_irq_enable) - { - m_ddenlovr_blitter_irq_flag = 1; - m_maincpu->set_input_line(1, HOLD_LINE); - } - } + m_blitter_irq_handler(1); break; default: @@ -1211,7 +1209,7 @@ g_profiler.stop(); // differences wrt blitter_data_w: slightly different blitter commands -void ddenlovr_state::blitter_w_funkyfig( int blitter, offs_t offset, uint8_t data, int irq_vector ) +void ddenlovr_state::blitter_w_funkyfig(int blitter, offs_t offset, uint8_t data) { int hi_bits; @@ -1351,7 +1349,7 @@ g_profiler.start(PROFILER_VIDEO); #endif } - m_maincpu->set_input_line_and_vector(0, HOLD_LINE, irq_vector); + m_blitter_irq_handler(1); break; default: @@ -1562,17 +1560,27 @@ g_profiler.stop(); } -WRITE8_MEMBER(ddenlovr_state::rongrong_blitter_w) +WRITE_LINE_MEMBER(ddenlovr_state::rongrong_blitter_irq) { - blitter_w(0, offset, data, 0xf8); + if (state) + m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0xf8); } WRITE8_MEMBER(ddenlovr_state::ddenlovr_blitter_w) { - blitter_w(0, offset, data, 0); + blitter_w(0, offset, data); } +WRITE_LINE_MEMBER(ddenlovr_state::ddenlovr_blitter_irq) +{ + if (state && m_ddenlovr_blitter_irq_enable) + { + m_ddenlovr_blitter_irq_flag = 1; + m_maincpu->set_input_line(1, HOLD_LINE); + } +} + WRITE_LINE_MEMBER(ddenlovr_state::ddenlovr_blitter_irq_ack_w) { if (state) @@ -2311,7 +2319,7 @@ void ddenlovr_state::quizchq_map(address_map &map) void ddenlovr_state::quizchq_portmap(address_map &map) { map.global_mask(0xff); - map(0x00, 0x01).w(this, FUNC(ddenlovr_state::rongrong_blitter_w)); + map(0x00, 0x01).w(this, FUNC(ddenlovr_state::ddenlovr_blitter_w)); map(0x03, 0x03).r(this, FUNC(ddenlovr_state::rongrong_gfxrom_r)); map(0x1b, 0x1b).rw(this, FUNC(ddenlovr_state::rongrong_blitter_busy_r), FUNC(ddenlovr_state::rongrong_blitter_busy_w)); @@ -2351,7 +2359,7 @@ void ddenlovr_state::rongrong_map(address_map &map) void ddenlovr_state::rongrong_portmap(address_map &map) { map.global_mask(0xff); - map(0x00, 0x01).w(this, FUNC(ddenlovr_state::rongrong_blitter_w)); + map(0x00, 0x01).w(this, FUNC(ddenlovr_state::ddenlovr_blitter_w)); map(0x03, 0x03).r(this, FUNC(ddenlovr_state::rongrong_gfxrom_r)); map(0x1b, 0x1b).rw(this, FUNC(ddenlovr_state::rongrong_blitter_busy_r), FUNC(ddenlovr_state::rongrong_blitter_busy_w)); @@ -2399,13 +2407,15 @@ WRITE8_MEMBER(ddenlovr_state::mmpanic_rombank_w) /* Bit 4? */ } -WRITE8_MEMBER(ddenlovr_state::mmpanic_blitter_w) +WRITE8_MEMBER(ddenlovr_state::mmpanic_blitter2_w) { - blitter_w(0, offset, data, 0xdf); // RST 18 + blitter_w(1, offset, data); } -WRITE8_MEMBER(ddenlovr_state::mmpanic_blitter2_w) + +WRITE_LINE_MEMBER(ddenlovr_state::mmpanic_blitter_irq) { - blitter_w(1, offset, data, 0xdf); // RST 18 + if (state) + m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0xdf); // RST 18 } void ddenlovr_state::mmpanic_update_leds() @@ -2476,7 +2486,7 @@ void ddenlovr_state::mmpanic_portmap(address_map &map) map(0x56, 0x56).w(this, FUNC(ddenlovr_state::ddenlovr_layer_enable2_w)); map(0x58, 0x58).r(this, FUNC(ddenlovr_state::unk_r)); // ? must be 78 on startup - map(0x60, 0x61).w(this, FUNC(ddenlovr_state::mmpanic_blitter_w)); + map(0x60, 0x61).w(this, FUNC(ddenlovr_state::ddenlovr_blitter_w)); map(0x63, 0x63).r(this, FUNC(ddenlovr_state::rongrong_gfxrom_r)); // Video Chip map(0x64, 0x65).w(this, FUNC(ddenlovr_state::mmpanic_blitter2_w)); map(0x68, 0x68).w(this, FUNC(ddenlovr_state::ddenlovr_select_w)); @@ -2545,7 +2555,13 @@ READ8_MEMBER(ddenlovr_state::funkyfig_busy_r) WRITE8_MEMBER(ddenlovr_state::funkyfig_blitter_w) { - blitter_w_funkyfig(0, offset, data, 0xe0); + blitter_w_funkyfig(0, offset, data); +} + +WRITE_LINE_MEMBER(ddenlovr_state::funkyfig_blitter_irq) +{ + if (state) + m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0xe0); } WRITE8_MEMBER(ddenlovr_state::funkyfig_rombank_w) @@ -3079,7 +3095,7 @@ void ddenlovr_state::mjschuka_portmap(address_map &map) map(0x36, 0x36).w(this, FUNC(ddenlovr_state::ddenlovr_layer_enable_w)); map(0x38, 0x38).nopr(); // ? ack or watchdog - map(0x40, 0x41).w(this, FUNC(ddenlovr_state::mjmyster_blitter_w)); + map(0x40, 0x41).w(this, FUNC(ddenlovr_state::ddenlovr_blitter_w)); map(0x43, 0x43).r(this, FUNC(ddenlovr_state::rongrong_gfxrom_r)); map(0x50, 0x50).w(this, FUNC(ddenlovr_state::mjflove_okibank_w)); @@ -3191,15 +3207,16 @@ WRITE8_MEMBER(ddenlovr_state::mjmyster_coincounter_w) } } -WRITE8_MEMBER(ddenlovr_state::mjmyster_blitter_w) +WRITE_LINE_MEMBER(ddenlovr_state::mjmyster_blitter_irq) { - blitter_w(0, offset, data, 0xfc); + if (state) + m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0xfc); } void ddenlovr_state::mjmyster_portmap(address_map &map) { map.global_mask(0xff); - map(0x00, 0x01).w(this, FUNC(ddenlovr_state::mjmyster_blitter_w)); + map(0x00, 0x01).w(this, FUNC(ddenlovr_state::ddenlovr_blitter_w)); map(0x03, 0x03).r(this, FUNC(ddenlovr_state::rongrong_gfxrom_r)); map(0x1c, 0x1c).w(this, FUNC(ddenlovr_state::mjmyster_rambank_w)); map(0x1e, 0x1e).w(this, FUNC(ddenlovr_state::mmpanic_rombank_w)); @@ -3365,7 +3382,7 @@ WRITE8_MEMBER(ddenlovr_state::hginga_blitter_w) break; } } - blitter_w(0, offset, data, 0xfc); + blitter_w(0, offset, data); } void ddenlovr_state::hginga_portmap(address_map &map) @@ -3631,7 +3648,7 @@ void ddenlovr_state::hparadis_map(address_map &map) void ddenlovr_state::hparadis_portmap(address_map &map) { map.global_mask(0xff); - map(0x00, 0x01).w(this, FUNC(ddenlovr_state::rongrong_blitter_w)); + map(0x00, 0x01).w(this, FUNC(ddenlovr_state::ddenlovr_blitter_w)); map(0x03, 0x03).r(this, FUNC(ddenlovr_state::rongrong_gfxrom_r)); map(0x1b, 0x1b).rw(this, FUNC(ddenlovr_state::rongrong_blitter_busy_r), FUNC(ddenlovr_state::rongrong_blitter_busy_w)); map(0x1c, 0x1c).r(this, FUNC(ddenlovr_state::hparadis_dsw_r)); @@ -3675,7 +3692,7 @@ READ8_MEMBER(ddenlovr_state::mjmywrld_coins_r) void ddenlovr_state::mjmywrld_portmap(address_map &map) { map.global_mask(0xff); - map(0x00, 0x01).w(this, FUNC(ddenlovr_state::mjmyster_blitter_w)); + map(0x00, 0x01).w(this, FUNC(ddenlovr_state::ddenlovr_blitter_w)); map(0x03, 0x03).r(this, FUNC(ddenlovr_state::rongrong_gfxrom_r)); map(0x1c, 0x1c).w(this, FUNC(ddenlovr_state::mjmyster_rambank_w)); map(0x1e, 0x1e).w(this, FUNC(ddenlovr_state::hginga_rombank_w)); @@ -3843,11 +3860,6 @@ CUSTOM_INPUT_MEMBER(ddenlovr_state::mjflove_blitter_r) return m_mjflove_irq_cause; } -WRITE8_MEMBER(ddenlovr_state::mjflove_blitter_w) -{ - blitter_w(0, offset, data, 0); -} - WRITE8_MEMBER(ddenlovr_state::mjflove_coincounter_w) { // bit 0 = in counter @@ -3873,7 +3885,7 @@ void ddenlovr_state::mjflove_portmap(address_map &map) map(0x0035, 0x0035).w(this, FUNC(ddenlovr_state::ddenlovr_priority_w)); map(0x0036, 0x0036).w(this, FUNC(ddenlovr_state::ddenlovr_layer_enable_w)); map(0x0038, 0x0038).nopr(); // ? ack or watchdog - map(0x0040, 0x0041).w(this, FUNC(ddenlovr_state::mjflove_blitter_w)).mirror(0xff00); + map(0x0040, 0x0041).w(this, FUNC(ddenlovr_state::ddenlovr_blitter_w)).mirror(0xff00); map(0x0043, 0x0043).r(this, FUNC(ddenlovr_state::rongrong_gfxrom_r)); map(0x0080, 0x0081).r(this, FUNC(ddenlovr_state::mjflove_keyb_r)); map(0x0082, 0x0082).portr("SYSTEM"); @@ -4061,7 +4073,7 @@ void ddenlovr_state::sryudens_portmap(address_map &map) map(0x35, 0x35).w(this, FUNC(ddenlovr_state::ddenlovr_priority_w)); map(0x36, 0x36).w(this, FUNC(ddenlovr_state::ddenlovr_layer_enable_w)); map(0x38, 0x38).nopr(); // ? ack or watchdog - map(0x40, 0x41).w(this, FUNC(ddenlovr_state::mjflove_blitter_w)); + map(0x40, 0x41).w(this, FUNC(ddenlovr_state::ddenlovr_blitter_w)); map(0x43, 0x43).r(this, FUNC(ddenlovr_state::rongrong_gfxrom_r)); map(0x50, 0x50).r(this, FUNC(ddenlovr_state::hanakanz_rand_r)); map(0x70, 0x70).w(this, FUNC(ddenlovr_state::quizchq_oki_bank_w)); @@ -4131,7 +4143,7 @@ void ddenlovr_state::janshinp_portmap(address_map &map) map(0x35, 0x35).w(this, FUNC(ddenlovr_state::ddenlovr_priority_w)); map(0x36, 0x36).w(this, FUNC(ddenlovr_state::ddenlovr_layer_enable_w)); map(0x38, 0x38).nopr(); // ? ack or watchdog - map(0x40, 0x41).w(this, FUNC(ddenlovr_state::mjflove_blitter_w)); + map(0x40, 0x41).w(this, FUNC(ddenlovr_state::ddenlovr_blitter_w)); map(0x43, 0x43).r(this, FUNC(ddenlovr_state::rongrong_gfxrom_r)); map(0x50, 0x5f).rw("rtc", FUNC(msm6242_device::read), FUNC(msm6242_device::write)); map(0x60, 0x60).r(this, FUNC(ddenlovr_state::hanakanz_rand_r)); @@ -4210,7 +4222,7 @@ void ddenlovr_state::seljan2_portmap(address_map &map) map(0x35, 0x35).w(this, FUNC(ddenlovr_state::ddenlovr_priority_w)); map(0x36, 0x36).w(this, FUNC(ddenlovr_state::ddenlovr_layer_enable_w)); map(0x38, 0x38).nopr(); // ? ack or watchdog - map(0x40, 0x41).w(this, FUNC(ddenlovr_state::mjflove_blitter_w)); + map(0x40, 0x41).w(this, FUNC(ddenlovr_state::ddenlovr_blitter_w)); map(0x43, 0x43).r(this, FUNC(ddenlovr_state::rongrong_gfxrom_r)); map(0x50, 0x51).w("ym2413", FUNC(ym2413_device::write)); map(0x54, 0x54).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); @@ -9779,6 +9791,8 @@ MACHINE_CONFIG_START(ddenlovr_state::ddenlovr) MCFG_PALETTE_ADD("palette", 0x100) + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, ddenlovr_blitter_irq) + MCFG_VIDEO_START_OVERRIDE(ddenlovr_state,ddenlovr) /* sound hardware */ @@ -9921,6 +9935,8 @@ MACHINE_CONFIG_START(ddenlovr_state::quizchq) MCFG_PALETTE_ADD("palette", 0x100) + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, rongrong_blitter_irq) + MCFG_VIDEO_START_OVERRIDE(ddenlovr_state,ddenlovr) /* sound hardware */ @@ -10008,6 +10024,8 @@ MACHINE_CONFIG_START(ddenlovr_state::mmpanic) MCFG_PALETTE_ADD("palette", 0x100) + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mmpanic_blitter_irq) + MCFG_VIDEO_START_OVERRIDE(ddenlovr_state,mmpanic) // extra layers /* sound hardware */ @@ -10259,6 +10277,8 @@ MACHINE_CONFIG_START(ddenlovr_state::funkyfig) MCFG_DEVICE_MODIFY("rtc") MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE(ddenlovr_state, mjchuuka_rtc_irq)) + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, funkyfig_blitter_irq) + MCFG_CPU_MODIFY("soundcpu") MCFG_CPU_IO_MAP(funkyfig_sound_portmap) @@ -10293,6 +10313,8 @@ MACHINE_CONFIG_START(ddenlovr_state::mjschuka) MCFG_PALETTE_ADD("palette", 0x200) + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mjmyster_blitter_irq) + MCFG_VIDEO_START_OVERRIDE(ddenlovr_state,mjflove) // blitter commands in the roms are shuffled around /* sound hardware */ @@ -10347,31 +10369,23 @@ TIMER_DEVICE_CALLBACK_MEMBER(ddenlovr_state::mjmyster_irq) m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0xfa); } -WRITE_LINE_MEMBER(ddenlovr_state::mjmyster_rtc_irq) -{ - /* I haven't found a irq ack register, so I need this kludge to - make sure I don't lose any interrupt generated by the blitter, - otherwise quizchq would lock up. */ - //if (downcast(drvm_maincpu)->input_state(0)) - // return; - - m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); -} - MACHINE_CONFIG_START(ddenlovr_state::mjmyster) quizchq(config); /* basic machine hardware */ - MCFG_DEVICE_REMOVE("maincpu") - - MCFG_CPU_ADD("maincpu", Z80, XTAL(16'000'000)/2) /* Verified */ + MCFG_CPU_REPLACE("maincpu", Z80, XTAL(16'000'000)/2) /* Verified */ MCFG_CPU_PROGRAM_MAP(mjmyster_map) MCFG_CPU_IO_MAP(mjmyster_portmap) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ddenlovr_state, mjmyster_irq, "screen", 0, 1) + MCFG_SCREEN_MODIFY("screen") + MCFG_SCREEN_VBLANK_CALLBACK(NOOP) + MCFG_DEVICE_MODIFY("rtc") - MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE(ddenlovr_state, mjmyster_rtc_irq)) + MCFG_MSM6242_OUT_INT_HANDLER(INPUTLINE("maincpu", INPUT_LINE_NMI)) + + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mjmyster_blitter_irq) MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,mjmyster) @@ -10433,6 +10447,8 @@ MACHINE_CONFIG_START(ddenlovr_state::hginga) MCFG_DEVICE_MODIFY("rtc") MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE(ddenlovr_state, hginga_rtc_irq)) + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mjmyster_blitter_irq) + MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,mjmyster) MCFG_SOUND_ADD("aysnd", AY8910, 3579545) @@ -10455,6 +10471,8 @@ MACHINE_CONFIG_START(ddenlovr_state::hgokou) MCFG_DEVICE_MODIFY("rtc") MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE(ddenlovr_state, hginga_rtc_irq)) + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mjmyster_blitter_irq) + MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,mjmyster) MCFG_SOUND_ADD("aysnd", AY8910, 3579545) @@ -10485,17 +10503,20 @@ MACHINE_CONFIG_START(ddenlovr_state::mjmyuniv) quizchq(config); /* basic machine hardware */ - MCFG_DEVICE_REMOVE("maincpu") - - MCFG_CPU_ADD("maincpu", Z80, XTAL(16'000'000)/2) /* Verified */ + MCFG_CPU_REPLACE("maincpu", Z80, XTAL(16'000'000)/2) /* Verified */ MCFG_CPU_PROGRAM_MAP(mjmyster_map) MCFG_CPU_IO_MAP(mjmyster_portmap) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ddenlovr_state, mjmyster_irq, "screen", 0, 1) + MCFG_SCREEN_MODIFY("screen") + MCFG_SCREEN_VBLANK_CALLBACK(NOOP) + MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,mjmyster) MCFG_DEVICE_MODIFY("rtc") - MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE(ddenlovr_state, mjmyster_rtc_irq)) + MCFG_MSM6242_OUT_INT_HANDLER(INPUTLINE("maincpu", INPUT_LINE_NMI)) + + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mjmyster_blitter_irq) MCFG_SOUND_ADD("aysnd", AY8910, 1789772) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(ddenlovr_state, ddenlovr_select_w)) @@ -10506,20 +10527,23 @@ MACHINE_CONFIG_START(ddenlovr_state::mjmyornt) quizchq(config); /* basic machine hardware */ - MCFG_DEVICE_REMOVE("maincpu") - - MCFG_CPU_ADD("maincpu", Z80, XTAL(16'000'000)/2) /* Verified */ + MCFG_CPU_REPLACE("maincpu", Z80, XTAL(16'000'000)/2) /* Verified */ MCFG_CPU_PROGRAM_MAP(quizchq_map) MCFG_CPU_IO_MAP(mjmyster_portmap) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ddenlovr_state, mjmyster_irq, "screen", 0, 1) + MCFG_SCREEN_MODIFY("screen") + MCFG_SCREEN_VBLANK_CALLBACK(NOOP) + MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 4, 256-16+4-1) MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,mjmyster) MCFG_DEVICE_MODIFY("rtc") - MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE(ddenlovr_state, mjmyster_rtc_irq)) + MCFG_MSM6242_OUT_INT_HANDLER(INPUTLINE("maincpu", INPUT_LINE_NMI)) + + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mjmyster_blitter_irq) MCFG_SOUND_ADD("aysnd", AY8910, 1789772) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(ddenlovr_state, ddenlovr_select_w)) @@ -10545,6 +10569,12 @@ WRITE_LINE_MEMBER(ddenlovr_state::mjflove_rtc_irq) } } +WRITE_LINE_MEMBER(ddenlovr_state::mjflove_blitter_irq) +{ + if (0) // ??? + m_maincpu->set_input_line(0, HOLD_LINE); +} + MACHINE_CONFIG_START(ddenlovr_state::mjflove) quizchq(config); @@ -10562,6 +10592,8 @@ MACHINE_CONFIG_START(ddenlovr_state::mjflove) MCFG_DEVICE_REPLACE("rtc", RTC72421, XTAL(32'768)) MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE(ddenlovr_state, mjflove_rtc_irq)) + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mjflove_blitter_irq) + MCFG_VIDEO_START_OVERRIDE(ddenlovr_state,mjflove) // blitter commands in the roms are shuffled around MCFG_SOUND_ADD("aysnd", AY8910, 28636363/8) @@ -10615,6 +10647,8 @@ MACHINE_CONFIG_START(ddenlovr_state::jongtei) MCFG_PALETTE_ADD("palette", 0x200) + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mjflove_blitter_irq) + MCFG_VIDEO_START_OVERRIDE(ddenlovr_state,hanakanz) // blitter commands in the roms are shuffled around /* sound hardware */ @@ -10668,6 +10702,8 @@ MACHINE_CONFIG_START(ddenlovr_state::sryudens) MCFG_PALETTE_ADD("palette", 0x100) + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mjflove_blitter_irq) + MCFG_VIDEO_START_OVERRIDE(ddenlovr_state,mjflove) // blitter commands in the roms are shuffled around /* sound hardware */ @@ -10715,6 +10751,8 @@ MACHINE_CONFIG_START(ddenlovr_state::janshinp) MCFG_PALETTE_ADD("palette", 0x100) + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mjflove_blitter_irq) + MCFG_VIDEO_START_OVERRIDE(ddenlovr_state,ddenlovr) /* sound hardware */ @@ -10783,6 +10821,8 @@ MACHINE_CONFIG_START(ddenlovr_state::seljan2) MCFG_PALETTE_ADD("palette", 0x100) + MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mjflove_blitter_irq) + MCFG_VIDEO_START_OVERRIDE(ddenlovr_state,mjflove) // blitter commands in the roms are shuffled around /* sound hardware */ -- cgit v1.2.3