diff options
author | cracyc <cracyc@users.noreply.github.com> | 2015-08-23 16:14:09 -0500 |
---|---|---|
committer | cracyc <cracyc@users.noreply.github.com> | 2015-08-23 16:14:09 -0500 |
commit | 25cada293ced614e20d3fb25f343a64db9c72da0 (patch) | |
tree | 68f31c839eceee3002e993fa52e19e1046453fcc /src/emu/machine | |
parent | 882edf70ba2c0e849aa2c3a678776b8b88695d3e (diff) |
leland: fix MT05377 MT05709 and MT05435 (hopefully)
pit8253: try to prevent mode 2 triggering twice (nw)
Diffstat (limited to 'src/emu/machine')
-rw-r--r-- | src/emu/machine/pit8253.c | 18 | ||||
-rw-r--r-- | src/emu/machine/pit8253.h | 3 |
2 files changed, 7 insertions, 14 deletions
diff --git a/src/emu/machine/pit8253.c b/src/emu/machine/pit8253.c index 006992f7073..1ad506686e0 100644 --- a/src/emu/machine/pit8253.c +++ b/src/emu/machine/pit8253.c @@ -113,7 +113,7 @@ void pit8253_device::device_start() pit8253_timer *timer = get_timer(timerno); /* initialize timer */ - timer->updatetimer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pit8253_device::update_timer_cb),this)); + timer->updatetimer = timer_alloc(timerno); timer->updatetimer->adjust(attotime::never, timerno); /* set up state save values */ @@ -513,7 +513,7 @@ void pit8253_device::simulate2(pit8253_timer *timer, INT64 elapsed_cycles) if (elapsed_cycles > 0 && timer->phase == 3) { /* Reload counter, output goes high */ - --elapsed_cycles; + elapsed_cycles -= adjusted_value; timer->phase = 2; load_counter_value(timer); adjusted_value = adjusted_count(bcd, timer->value); @@ -741,16 +741,6 @@ void pit8253_device::update(pit8253_timer *timer) } -TIMER_CALLBACK_MEMBER( pit8253_device::update_timer_cb ) -{ - pit8253_timer *timer = get_timer(param); - - LOG2(("pit8253: output_changed(): timer %d\n", param)); - - update(timer); -} - - /* We recycle bit 0 of timer->value to hold the phase in mode 3 when count is odd. Since read commands in mode 3 always return even numbers, we need to mask this bit off. */ @@ -941,6 +931,10 @@ void pit8254_device::readback_command(UINT8 data) readback(get_timer(2), read_command); } +void pit8253_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + update(get_timer(id)); +} WRITE8_MEMBER( pit8253_device::write ) { diff --git a/src/emu/machine/pit8253.h b/src/emu/machine/pit8253.h index a5ced426044..67e3f86b23b 100644 --- a/src/emu/machine/pit8253.h +++ b/src/emu/machine/pit8253.h @@ -93,6 +93,7 @@ protected: // device-level overrides virtual void device_start(); virtual void device_reset(); + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); // internal state struct pit8253_timer @@ -141,8 +142,6 @@ private: pit8253_timer m_timers[PIT8253_MAX_TIMER]; - TIMER_CALLBACK_MEMBER(update_timer_cb); - inline UINT32 adjusted_count(int bcd, UINT16 val); void decrease_counter_value(pit8253_timer *timer, INT64 cycles); void load_counter_value(pit8253_timer *timer); |