diff options
Diffstat (limited to 'src/mame/drivers/spectrum.cpp')
-rw-r--r-- | src/mame/drivers/spectrum.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/mame/drivers/spectrum.cpp b/src/mame/drivers/spectrum.cpp index 4b1d5cecac2..b99227983df 100644 --- a/src/mame/drivers/spectrum.cpp +++ b/src/mame/drivers/spectrum.cpp @@ -727,10 +727,14 @@ void spectrum_state::init_spectrum() void spectrum_state::machine_start() { save_item(NAME(m_port_fe_data)); + save_item(NAME(m_int_at)); } void spectrum_state::machine_reset() { + /* Initial value/behaviour of FE port is not confirmed. Startup of real devices produce 'random' border + color which need to be investigated. */ + m_port_fe_data = -1; m_port_7ffd_data = -1; m_port_1ffd_data = -1; } @@ -756,8 +760,10 @@ void spectrum_state::device_timer(emu_timer &timer, device_timer_id id, int para switch (id) { case TIMER_IRQ_ON: - m_maincpu->set_input_line(0, HOLD_LINE); - timer_set(m_maincpu->clocks_to_attotime(32), TIMER_IRQ_OFF, 0); + m_int_at = m_maincpu->total_cycles(); + m_int_at -= m_maincpu->attotime_to_cycles(m_maincpu->local_time() - machine().time()); + m_maincpu->set_input_line(0, ASSERT_LINE); + m_irq_off_timer->adjust(m_maincpu->clocks_to_attotime(32)); break; case TIMER_IRQ_OFF: m_maincpu->set_input_line(0, CLEAR_LINE); @@ -767,13 +773,9 @@ void spectrum_state::device_timer(emu_timer &timer, device_timer_id id, int para } } -attotime spectrum_state::time_until_int() { - return m_screen->time_until_pos(0, get_screen_area().left()); -}; - INTERRUPT_GEN_MEMBER(spectrum_state::spec_interrupt) { - timer_set(time_until_int(), TIMER_IRQ_ON, 0); + timer_set(m_screen->time_until_pos(0, get_screen_area().left()), TIMER_IRQ_ON); } void spectrum_state::spectrum_common(machine_config &config) |