summaryrefslogtreecommitdiffstats
path: root/src/mame/drivers/spectrum.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/spectrum.cpp')
-rw-r--r--src/mame/drivers/spectrum.cpp16
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)