diff options
author | 2015-10-09 14:30:28 +0100 | |
---|---|---|
committer | 2015-10-09 14:30:28 +0100 | |
commit | fb989bb821f049bc41d537a0421e73b8798d48ac (patch) | |
tree | 4ab9d9c00a1af9cb28368644a48d89fde805c883 | |
parent | 4f96fdf9b549dc9224b0c471ef3314787fd1721b (diff) |
gah, this causes a regression here too, avoid (nw)
-rw-r--r-- | src/mame/drivers/m72.c | 63 | ||||
-rw-r--r-- | src/mame/video/m72.c | 7 |
2 files changed, 58 insertions, 12 deletions
diff --git a/src/mame/drivers/m72.c b/src/mame/drivers/m72.c index 8277eb15c34..4cb93f3a8d6 100644 --- a/src/mame/drivers/m72.c +++ b/src/mame/drivers/m72.c @@ -200,6 +200,38 @@ other supported games as well. /***************************************************************************/ +// bchopper doesn't like the proper IRQ controller hookup, title screen jumps around, as does ingame at times +// like m92.c I think this is because we don't clear things at the right time. +#define USE_HACKED_IRQS + +#ifdef USE_HACKED_IRQS + +#define M72_TRIGGER_IRQ0 m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_upd71059c->HACK_get_base_vector()+0 ); /* VBL interrupt */ +#define M72_TRIGGER_IRQ1 m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_upd71059c->HACK_get_base_vector()+1 ); /* Sprite buffer complete interrupt */ +#define M72_TRIGGER_IRQ2 m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_upd71059c->HACK_get_base_vector()+2 ); /* Raster interrupt */ +#define M72_TRIGGER_IRQ3 m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_upd71059c->HACK_get_base_vector()+3 ); /* Sound cpu->Main cpu interrupt */ +// not used due to HOLD LINE logic +#define M72_CLEAR_IRQ0 ; +#define M72_CLEAR_IRQ1 ; +#define M72_CLEAR_IRQ2 ; +#define M72_CLEAR_IRQ3 ; + +#else + +#define M72_TRIGGER_IRQ0 m_upd71059c->ir0_w(1); +#define M72_TRIGGER_IRQ1 m_upd71059c->ir1_w(1); +#define M72_TRIGGER_IRQ2 m_upd71059c->ir2_w(1); +#define M72_TRIGGER_IRQ3 m_upd71059c->ir3_w(1); +// not sure when these should happen, probably the source of our issues +#define M72_CLEAR_IRQ0 m_upd71059c->ir0_w(0); +#define M72_CLEAR_IRQ1 m_upd71059c->ir1_w(0); +#define M72_CLEAR_IRQ2 m_upd71059c->ir2_w(0); +#define M72_CLEAR_IRQ3 m_upd71059c->ir3_w(0); + +#endif + + + void m72_state::machine_start() { m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m72_state::scanline_interrupt),this)); @@ -237,20 +269,22 @@ TIMER_CALLBACK_MEMBER(m72_state::scanline_interrupt) /* raster interrupt - visible area only? */ if (scanline < 256 && scanline == m_raster_irq_position - 128) { - m_screen->update_partial(scanline); - m_upd71059c->ir2_w(1); + M72_TRIGGER_IRQ2 } else - m_upd71059c->ir2_w(0); + { + M72_CLEAR_IRQ2 + } /* VBLANK interrupt */ if (scanline == 256) { - m_screen->update_partial(scanline); - m_upd71059c->ir0_w(1); + M72_TRIGGER_IRQ0 } else - m_upd71059c->ir0_w(0); + { + M72_CLEAR_IRQ0 + } /* adjust for next scanline */ if (++scanline >= m_screen->height()) @@ -1857,8 +1891,9 @@ static MACHINE_CONFIG_START( m72_base, m72_state ) MCFG_CPU_ADD("maincpu",V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ MCFG_CPU_PROGRAM_MAP(m72_map) MCFG_CPU_IO_MAP(m72_portmap) +#ifndef USE_HACKED_IRQS MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb) - +#endif MCFG_CPU_ADD("soundcpu",Z80, SOUND_CLOCK) MCFG_CPU_PROGRAM_MAP(sound_ram_map) MCFG_CPU_IO_MAP(sound_portmap) @@ -1968,7 +2003,9 @@ static MACHINE_CONFIG_START( rtype2, m72_state ) MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ MCFG_CPU_PROGRAM_MAP(rtype2_map) MCFG_CPU_IO_MAP(m84_portmap) +#ifndef USE_HACKED_IRQS MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb) +#endif MCFG_CPU_ADD("soundcpu", Z80, SOUND_CLOCK) MCFG_CPU_PROGRAM_MAP(sound_rom_map) @@ -2011,7 +2048,9 @@ static MACHINE_CONFIG_START( cosmccop, m72_state ) MCFG_CPU_ADD("maincpu", V35,MASTER_CLOCK/2) MCFG_CPU_PROGRAM_MAP(kengo_map) MCFG_CPU_IO_MAP(m84_v33_portmap) - MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb) +//#ifndef USE_HACKED_IRQS +// MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb) +//#endif MCFG_CPU_ADD("soundcpu", Z80, SOUND_CLOCK) MCFG_CPU_PROGRAM_MAP(sound_rom_map) @@ -2019,7 +2058,7 @@ static MACHINE_CONFIG_START( cosmccop, m72_state ) MCFG_CPU_PERIODIC_INT_DRIVER(m72_state, nmi_line_pulse, 128*55) /* clocked by V1? (Vigilante) */ /* IRQs are generated by main Z80 and YM2151 */ - MCFG_PIC8259_ADD( "upd71059c", INPUTLINE("maincpu", 0), VCC, NULL) +// MCFG_PIC8259_ADD( "upd71059c", INPUTLINE("maincpu", 0), VCC, NULL) MCFG_MACHINE_START_OVERRIDE(m72_state,kengo) MCFG_MACHINE_RESET_OVERRIDE(m72_state,kengo) @@ -2058,8 +2097,9 @@ static MACHINE_CONFIG_START( m82, m72_state ) MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ MCFG_CPU_PROGRAM_MAP(m82_map) MCFG_CPU_IO_MAP(m82_portmap) +#ifndef USE_HACKED_IRQS MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb) - +#endif MCFG_CPU_ADD("soundcpu", Z80, SOUND_CLOCK) MCFG_CPU_PROGRAM_MAP(sound_rom_map) MCFG_CPU_IO_MAP(rtype2_sound_portmap) @@ -2093,8 +2133,9 @@ static MACHINE_CONFIG_START( poundfor, m72_state ) MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ MCFG_CPU_PROGRAM_MAP(rtype2_map) MCFG_CPU_IO_MAP(poundfor_portmap) +#ifndef USE_HACKED_IRQS MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb) - +#endif MCFG_CPU_ADD("soundcpu", Z80, SOUND_CLOCK) MCFG_CPU_PROGRAM_MAP(sound_rom_map) MCFG_CPU_IO_MAP(poundfor_sound_portmap) diff --git a/src/mame/video/m72.c b/src/mame/video/m72.c index 34faa8913d5..b215759473a 100644 --- a/src/mame/video/m72.c +++ b/src/mame/video/m72.c @@ -345,25 +345,30 @@ WRITE16_MEMBER(m72_state::videoram2_w) WRITE16_MEMBER(m72_state::irq_line_w) { COMBINE_DATA(&m_raster_irq_position); +// printf("m_raster_irq_position %04x\n", m_raster_irq_position); } WRITE16_MEMBER(m72_state::scrollx1_w) { + m_screen->update_partial(m_screen->vpos()); COMBINE_DATA(&m_scrollx1); } WRITE16_MEMBER(m72_state::scrollx2_w) { + m_screen->update_partial(m_screen->vpos()); COMBINE_DATA(&m_scrollx2); } WRITE16_MEMBER(m72_state::scrolly1_w) { + m_screen->update_partial(m_screen->vpos()); COMBINE_DATA(&m_scrolly1); } WRITE16_MEMBER(m72_state::scrolly2_w) { + m_screen->update_partial(m_screen->vpos()); COMBINE_DATA(&m_scrolly2); } @@ -437,7 +442,7 @@ WRITE16_MEMBER(m72_state::m82_gfx_ctrl_w) WRITE16_MEMBER(m72_state::m82_tm_ctrl_w) { COMBINE_DATA(&m_m82_tmcontrol); - printf("tmcontrol %04x\n", m_m82_tmcontrol); +// printf("tmcontrol %04x\n", m_m82_tmcontrol); } |