summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine
diff options
context:
space:
mode:
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
commit25cada293ced614e20d3fb25f343a64db9c72da0 (patch)
tree68f31c839eceee3002e993fa52e19e1046453fcc /src/emu/machine
parent882edf70ba2c0e849aa2c3a678776b8b88695d3e (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.c18
-rw-r--r--src/emu/machine/pit8253.h3
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);