From b4f57de540aa3cd15a43a750a371abf9c9736b11 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 21 Apr 2014 20:21:46 +0000 Subject: [PATCH] h8: compounded duh (nw) --- src/emu/cpu/h8/h83006.c | 4 ++++ src/emu/cpu/h8/h83008.c | 4 ++++ src/emu/cpu/h8/h8_timer16.c | 5 ++++- src/emu/cpu/h8/h8_timer8.c | 2 +- src/emu/cpu/h8/h8s2245.c | 2 ++ src/emu/cpu/h8/h8s2320.c | 2 ++ src/emu/cpu/h8/h8s2357.c | 2 ++ src/emu/cpu/h8/h8s2655.c | 2 ++ 8 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/emu/cpu/h8/h83006.c b/src/emu/cpu/h8/h83006.c index ef093d06494..0cf662cc919 100644 --- a/src/emu/cpu/h8/h83006.c +++ b/src/emu/cpu/h8/h83006.c @@ -233,6 +233,10 @@ void h83006_device::internal_update(UINT64 current_time) add_event(event_time, sci0->internal_update(current_time)); add_event(event_time, sci1->internal_update(current_time)); add_event(event_time, sci2->internal_update(current_time)); + add_event(event_time, timer8_0->internal_update(current_time)); + add_event(event_time, timer8_1->internal_update(current_time)); + add_event(event_time, timer8_2->internal_update(current_time)); + add_event(event_time, timer8_3->internal_update(current_time)); add_event(event_time, timer16_0->internal_update(current_time)); add_event(event_time, timer16_1->internal_update(current_time)); add_event(event_time, timer16_2->internal_update(current_time)); diff --git a/src/emu/cpu/h8/h83008.c b/src/emu/cpu/h8/h83008.c index 64f9ec5734e..b2cc89aa00f 100644 --- a/src/emu/cpu/h8/h83008.c +++ b/src/emu/cpu/h8/h83008.c @@ -188,6 +188,10 @@ void h83008_device::internal_update(UINT64 current_time) add_event(event_time, adc->internal_update(current_time)); add_event(event_time, sci0->internal_update(current_time)); add_event(event_time, sci1->internal_update(current_time)); + add_event(event_time, timer8_0->internal_update(current_time)); + add_event(event_time, timer8_1->internal_update(current_time)); + add_event(event_time, timer8_2->internal_update(current_time)); + add_event(event_time, timer8_3->internal_update(current_time)); add_event(event_time, timer16_0->internal_update(current_time)); add_event(event_time, timer16_1->internal_update(current_time)); add_event(event_time, timer16_2->internal_update(current_time)); diff --git a/src/emu/cpu/h8/h8_timer16.c b/src/emu/cpu/h8/h8_timer16.c index abf89b42c16..12baf41c369 100644 --- a/src/emu/cpu/h8/h8_timer16.c +++ b/src/emu/cpu/h8/h8_timer16.c @@ -240,8 +240,10 @@ void h8_timer16_channel_device::update_counter(UINT64 cur_time) void h8_timer16_channel_device::recalc_event(UINT64 cur_time) { - if(!channel_active) + if(!channel_active) { + event_time = 0; return; + } bool update_cpu = cur_time == 0; UINT64 old_event_time = event_time; @@ -288,6 +290,7 @@ void h8_timer16_channel_device::recalc_event(UINT64 cur_time) if(event_delay > new_delay) event_delay = new_delay; } + if(event_delay != 0xffffffff) event_time = ((((cur_time + (1ULL << clock_divider) - phase) >> clock_divider) + event_delay - 1) << clock_divider) + phase; else diff --git a/src/emu/cpu/h8/h8_timer8.c b/src/emu/cpu/h8/h8_timer8.c index 074085b5f06..2ecda390e89 100644 --- a/src/emu/cpu/h8/h8_timer8.c +++ b/src/emu/cpu/h8/h8_timer8.c @@ -290,7 +290,7 @@ void h8_timer8_channel_device::recalc_event(UINT64 cur_time) } if(event_delay != 0xffffffff) - event_time = ((((cur_time + clock_divider) >> clock_divider) + event_delay - 1) << clock_divider) + clock_divider/2; + event_time = ((((cur_time + clock_divider) / clock_divider) + event_delay - 1) * clock_divider) + clock_divider/2; else event_time = 0; diff --git a/src/emu/cpu/h8/h8s2245.c b/src/emu/cpu/h8/h8s2245.c index 91a0f5bead9..77b50d617cf 100644 --- a/src/emu/cpu/h8/h8s2245.c +++ b/src/emu/cpu/h8/h8s2245.c @@ -312,6 +312,8 @@ void h8s2245_device::internal_update(UINT64 current_time) add_event(event_time, sci0->internal_update(current_time)); add_event(event_time, sci1->internal_update(current_time)); add_event(event_time, sci2->internal_update(current_time)); + add_event(event_time, timer8_0->internal_update(current_time)); + add_event(event_time, timer8_1->internal_update(current_time)); add_event(event_time, timer16_0->internal_update(current_time)); add_event(event_time, timer16_1->internal_update(current_time)); add_event(event_time, timer16_2->internal_update(current_time)); diff --git a/src/emu/cpu/h8/h8s2320.c b/src/emu/cpu/h8/h8s2320.c index 83e27aaa9f3..5aca191a4c2 100644 --- a/src/emu/cpu/h8/h8s2320.c +++ b/src/emu/cpu/h8/h8s2320.c @@ -417,6 +417,8 @@ void h8s2320_device::internal_update(UINT64 current_time) add_event(event_time, sci0->internal_update(current_time)); add_event(event_time, sci1->internal_update(current_time)); add_event(event_time, sci2->internal_update(current_time)); + add_event(event_time, timer8_0->internal_update(current_time)); + add_event(event_time, timer8_1->internal_update(current_time)); add_event(event_time, timer16_0->internal_update(current_time)); add_event(event_time, timer16_1->internal_update(current_time)); add_event(event_time, timer16_2->internal_update(current_time)); diff --git a/src/emu/cpu/h8/h8s2357.c b/src/emu/cpu/h8/h8s2357.c index ceb04b7ebfa..b03e54a7916 100644 --- a/src/emu/cpu/h8/h8s2357.c +++ b/src/emu/cpu/h8/h8s2357.c @@ -389,6 +389,8 @@ void h8s2357_device::internal_update(UINT64 current_time) add_event(event_time, sci0->internal_update(current_time)); add_event(event_time, sci1->internal_update(current_time)); add_event(event_time, sci2->internal_update(current_time)); + add_event(event_time, timer8_0->internal_update(current_time)); + add_event(event_time, timer8_1->internal_update(current_time)); add_event(event_time, timer16_0->internal_update(current_time)); add_event(event_time, timer16_1->internal_update(current_time)); add_event(event_time, timer16_2->internal_update(current_time)); diff --git a/src/emu/cpu/h8/h8s2655.c b/src/emu/cpu/h8/h8s2655.c index 6f3e8778bb3..0d4d8c8bdb5 100644 --- a/src/emu/cpu/h8/h8s2655.c +++ b/src/emu/cpu/h8/h8s2655.c @@ -396,6 +396,8 @@ void h8s2655_device::internal_update(UINT64 current_time) add_event(event_time, sci0->internal_update(current_time)); add_event(event_time, sci1->internal_update(current_time)); add_event(event_time, sci2->internal_update(current_time)); + add_event(event_time, timer8_0->internal_update(current_time)); + add_event(event_time, timer8_1->internal_update(current_time)); add_event(event_time, timer16_0->internal_update(current_time)); add_event(event_time, timer16_1->internal_update(current_time)); add_event(event_time, timer16_2->internal_update(current_time));