summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/capcom/lastduel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/capcom/lastduel.cpp')
-rw-r--r--src/mame/capcom/lastduel.cpp60
1 files changed, 28 insertions, 32 deletions
diff --git a/src/mame/capcom/lastduel.cpp b/src/mame/capcom/lastduel.cpp
index bebdb764eb1..af10a1a6c73 100644
--- a/src/mame/capcom/lastduel.cpp
+++ b/src/mame/capcom/lastduel.cpp
@@ -25,6 +25,8 @@ To advance test mode screens:
TODO:
- The seem to be minor priority issues in Mad Gear, but the game might just
be like that. The priority PROM is dumped but currently not used.
+- Verify lastduel clocks, XTALs on photos are the same as madgear PCB notes
+ below, so: 10MHz, 3.57MHz, 24MHz.
**************************************************************************
@@ -479,14 +481,20 @@ GFXDECODE_END
/******************************************************************************/
-TIMER_DEVICE_CALLBACK_MEMBER(lastduel_state::lastduel_timer_cb)
+void lastduel_state::lastduel_interrupt(int state)
{
- m_maincpu->set_input_line(4, HOLD_LINE); /* Controls */
+ if (state)
+ m_maincpu->set_input_line(2, HOLD_LINE); // vblank
+ else
+ m_maincpu->set_input_line(4, HOLD_LINE); // controls
}
-TIMER_DEVICE_CALLBACK_MEMBER(lastduel_state::madgear_timer_cb)
+void lastduel_state::madgear_interrupt(int state)
{
- m_maincpu->set_input_line(6, HOLD_LINE); /* Controls */
+ if (state)
+ m_maincpu->set_input_line(5, HOLD_LINE); // vblank
+ else
+ m_maincpu->set_input_line(6, HOLD_LINE); // controls
}
MACHINE_START_MEMBER(lastduel_state,lastduel)
@@ -506,36 +514,29 @@ MACHINE_START_MEMBER(lastduel_state,madgear)
void lastduel_state::machine_reset()
{
- int i;
-
m_tilemap_priority = 0;
- for (i = 0; i < 8; i++)
+ for (int i = 0; i < 8; i++)
m_vctrl[i] = 0;
}
void lastduel_state::lastduel(machine_config &config)
{
/* basic machine hardware */
- M68000(config, m_maincpu, 10000000); // Unconfirmed - could be 8MHz
+ M68000(config, m_maincpu, 10_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &lastduel_state::lastduel_map);
- m_maincpu->set_vblank_int("screen", FUNC(lastduel_state::irq2_line_hold));
- TIMER(config, "timer_irq").configure_periodic(FUNC(lastduel_state::lastduel_timer_cb), attotime::from_hz(120));
- Z80(config, m_audiocpu, XTAL(3'579'545));
+ Z80(config, m_audiocpu, 3.579545_MHz_XTAL);
m_audiocpu->set_addrmap(AS_PROGRAM, &lastduel_state::sound_map);
MCFG_MACHINE_START_OVERRIDE(lastduel_state,lastduel)
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
- screen.set_refresh_hz(60);
- screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
- screen.set_size(64*8, 32*8);
- screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1);
+ screen.set_raw(24_MHz_XTAL / 3, 512, 64, 448, 272, 8, 248);
screen.set_screen_update(FUNC(lastduel_state::screen_update_lastduel));
- screen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising));
+ screen.screen_vblank().set(FUNC(lastduel_state::lastduel_interrupt));
+ screen.screen_vblank().append("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising));
screen.set_palette(m_palette);
BUFFERED_SPRITERAM16(config, m_spriteram);
@@ -550,36 +551,31 @@ void lastduel_state::lastduel(machine_config &config)
GENERIC_LATCH_8(config, m_soundlatch);
- ym2203_device &ym1(YM2203(config, "ym1", XTAL(3'579'545)));
+ ym2203_device &ym1(YM2203(config, "ym1", 3.579545_MHz_XTAL));
ym1.irq_handler().set_inputline(m_audiocpu, 0);
ym1.add_route(ALL_OUTPUTS, "mono", 0.40);
- ym2203_device &ym2(YM2203(config, "ym2", XTAL(3'579'545)));
+ ym2203_device &ym2(YM2203(config, "ym2", 3.579545_MHz_XTAL));
ym2.add_route(ALL_OUTPUTS, "mono", 0.40);
}
void lastduel_state::madgear(machine_config &config)
{
/* basic machine hardware */
- M68000(config, m_maincpu, XTAL(10'000'000));
+ M68000(config, m_maincpu, 10_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &lastduel_state::madgear_map);
- m_maincpu->set_vblank_int("screen", FUNC(lastduel_state::irq5_line_hold));
- TIMER(config, "timer_irq").configure_periodic(FUNC(lastduel_state::madgear_timer_cb), attotime::from_hz(120));
- Z80(config, m_audiocpu, XTAL(3'579'545));
+ Z80(config, m_audiocpu, 3.579545_MHz_XTAL);
m_audiocpu->set_addrmap(AS_PROGRAM, &lastduel_state::madgear_sound_map);
MCFG_MACHINE_START_OVERRIDE(lastduel_state,madgear)
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
- screen.set_refresh_hz(57.4444);
- screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
- screen.set_size(64*8, 32*8);
- screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1);
+ screen.set_raw(24_MHz_XTAL / 3, 512, 64, 448, 272, 8, 248); // measured 57.4444Hz
screen.set_screen_update(FUNC(lastduel_state::screen_update_madgear));
- screen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising));
+ screen.screen_vblank().set(FUNC(lastduel_state::madgear_interrupt));
+ screen.screen_vblank().append("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising));
screen.set_palette(m_palette);
BUFFERED_SPRITERAM16(config, m_spriteram);
@@ -594,14 +590,14 @@ void lastduel_state::madgear(machine_config &config)
GENERIC_LATCH_8(config, m_soundlatch);
- ym2203_device &ym1(YM2203(config, "ym1", XTAL(3'579'545)));
+ ym2203_device &ym1(YM2203(config, "ym1", 3.579545_MHz_XTAL));
ym1.irq_handler().set_inputline(m_audiocpu, 0);
ym1.add_route(ALL_OUTPUTS, "mono", 0.40);
- ym2203_device &ym2(YM2203(config, "ym2", XTAL(3'579'545)));
+ ym2203_device &ym2(YM2203(config, "ym2", 3.579545_MHz_XTAL));
ym2.add_route(ALL_OUTPUTS, "mono", 0.40);
- okim6295_device &oki(OKIM6295(config, "oki", XTAL(10'000'000)/10, okim6295_device::PIN7_HIGH));
+ okim6295_device &oki(OKIM6295(config, "oki", 10_MHz_XTAL / 10, okim6295_device::PIN7_HIGH));
oki.add_route(ALL_OUTPUTS, "mono", 0.98);
}