mirror of
https://github.com/holub/mame
synced 2025-06-17 17:59:05 +03:00
dragrace: Add raw parameters for screen and correct IRQ timing
This commit is contained in:
parent
c63155b86c
commit
f64d568f8e
@ -38,6 +38,21 @@ TIMER_DEVICE_CALLBACK_MEMBER(dragrace_state::frame_callback)
|
|||||||
m_watchdog->watchdog_enable(m_in[0]->read() & 0x20);
|
m_watchdog->watchdog_enable(m_in[0]->read() & 0x20);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TIMER_CALLBACK_MEMBER(dragrace_state::scanline_irq)
|
||||||
|
{
|
||||||
|
m_maincpu->set_input_line(M6800_IRQ_LINE, ASSERT_LINE);
|
||||||
|
m_irq_off_timer->adjust(m_screen->scan_period() * 3);
|
||||||
|
|
||||||
|
// Four IRQs per frame (vpos = 64, 128, 192, 240)
|
||||||
|
int scanline = m_screen->vpos();
|
||||||
|
m_scan_timer->adjust(m_screen->time_until_pos(scanline < 240 ? std::min(scanline + 64, 240) : 64));
|
||||||
|
}
|
||||||
|
|
||||||
|
TIMER_CALLBACK_MEMBER(dragrace_state::irq_off)
|
||||||
|
{
|
||||||
|
m_maincpu->set_input_line(M6800_IRQ_LINE, CLEAR_LINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void dragrace_state::speed1_w(uint8_t data)
|
void dragrace_state::speed1_w(uint8_t data)
|
||||||
{
|
{
|
||||||
@ -263,6 +278,10 @@ void dragrace_state::machine_start()
|
|||||||
m_gear_sel.resolve();
|
m_gear_sel.resolve();
|
||||||
m_tacho_sel.resolve();
|
m_tacho_sel.resolve();
|
||||||
|
|
||||||
|
m_scan_timer = timer_alloc(FUNC(dragrace_state::scanline_irq), this);
|
||||||
|
m_irq_off_timer = timer_alloc(FUNC(dragrace_state::irq_off), this);
|
||||||
|
m_scan_timer->adjust(m_screen->time_until_pos(64));
|
||||||
|
|
||||||
save_item(NAME(m_gear));
|
save_item(NAME(m_gear));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,7 +296,6 @@ void dragrace_state::dragrace(machine_config &config)
|
|||||||
// basic machine hardware
|
// basic machine hardware
|
||||||
M6800(config, m_maincpu, 12.096_MHz_XTAL / 12);
|
M6800(config, m_maincpu, 12.096_MHz_XTAL / 12);
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &dragrace_state::main_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &dragrace_state::main_map);
|
||||||
m_maincpu->set_periodic_int(FUNC(dragrace_state::irq0_line_hold), attotime::from_hz(4*60));
|
|
||||||
|
|
||||||
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8);
|
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8);
|
||||||
|
|
||||||
@ -285,9 +303,7 @@ void dragrace_state::dragrace(machine_config &config)
|
|||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||||
m_screen->set_refresh_hz(60);
|
m_screen->set_raw(12.096_MHz_XTAL / 2, 384, 0, 256, 262, 0, 240); // vertical timings determined by sync PROM
|
||||||
m_screen->set_size(256, 262);
|
|
||||||
m_screen->set_visarea(0, 255, 0, 239);
|
|
||||||
m_screen->set_screen_update(FUNC(dragrace_state::screen_update));
|
m_screen->set_screen_update(FUNC(dragrace_state::screen_update));
|
||||||
m_screen->set_palette("palette");
|
m_screen->set_palette("palette");
|
||||||
|
|
||||||
|
@ -70,6 +70,8 @@ private:
|
|||||||
void palette(palette_device &palette) const;
|
void palette(palette_device &palette) const;
|
||||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(frame_callback);
|
TIMER_DEVICE_CALLBACK_MEMBER(frame_callback);
|
||||||
|
TIMER_CALLBACK_MEMBER(scanline_irq);
|
||||||
|
TIMER_CALLBACK_MEMBER(irq_off);
|
||||||
|
|
||||||
void main_map(address_map &map);
|
void main_map(address_map &map);
|
||||||
|
|
||||||
@ -96,6 +98,8 @@ private:
|
|||||||
|
|
||||||
// misc
|
// misc
|
||||||
uint8_t m_gear[2]{};
|
uint8_t m_gear[2]{};
|
||||||
|
emu_timer *m_scan_timer;
|
||||||
|
emu_timer *m_irq_off_timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
//----------- defined in audio/dragrace.cpp -----------
|
//----------- defined in audio/dragrace.cpp -----------
|
||||||
|
Loading…
Reference in New Issue
Block a user