diff options
Diffstat (limited to 'morphos/morphos_timer.cpp')
-rw-r--r-- | morphos/morphos_timer.cpp | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/morphos/morphos_timer.cpp b/morphos/morphos_timer.cpp index ccec0b7468..d106b9a1a9 100644 --- a/morphos/morphos_timer.cpp +++ b/morphos/morphos_timer.cpp @@ -152,22 +152,24 @@ void Timer::TimerService(Timer *this_ptr) if (tmsg->tsm_Interval > 1000) unit = UNIT_VBLANK; - OSystem_MorphOS::OpenATimer(&timer_slots[timers].ts_Port, (IORequest **) &timer_slots[timers].ts_IORequest, unit); - timer_slots[timers].ts_Callback = tmsg->tsm_Callback; - timer_slots[timers].ts_Interval = tmsg->tsm_Interval; - timer_slots[timers].ts_SignalBit = 1 << timer_slots[timers].ts_Port->mp_SigBit; - - signal_mask |= timer_slots[timers].ts_SignalBit; - timer_bits |= timer_slots[timers].ts_SignalBit; - - timerequest *req = timer_slots[timers].ts_IORequest; - interval = timer_slots[timers].ts_Interval; - req->tr_node.io_Command = TR_ADDREQUEST; - req->tr_time.tv_secs = interval/1000; - req->tr_time.tv_micro = (interval%1000)*1000; - SendIO(req); - - timers++; + if (OSystem_MorphOS::OpenATimer(&timer_slots[timers].ts_Port, (IORequest **) &timer_slots[timers].ts_IORequest, unit)) + { + timer_slots[timers].ts_Callback = tmsg->tsm_Callback; + timer_slots[timers].ts_Interval = tmsg->tsm_Interval; + timer_slots[timers].ts_SignalBit = 1 << timer_slots[timers].ts_Port->mp_SigBit; + + signal_mask |= timer_slots[timers].ts_SignalBit; + timer_bits |= timer_slots[timers].ts_SignalBit; + + timerequest *req = timer_slots[timers].ts_IORequest; + interval = timer_slots[timers].ts_Interval; + req->tr_node.io_Command = TR_ADDREQUEST; + req->tr_time.tv_secs = interval/1000; + req->tr_time.tv_micro = (interval%1000)*1000; + SendIO(req); + + timers++; + } } break; @@ -216,7 +218,7 @@ void Timer::TimerService(Timer *this_ptr) (*timer_slots[t].ts_Callback)(interval); GetSysTime(&end_callback); SubTime(&end_callback, &start_callback); - interval -= end_callback.tv_sec*1000+end_callback.tv_micro/1000+20; + interval -= end_callback.tv_sec*1000+end_callback.tv_micro/1000+40; req->tr_node.io_Command = TR_ADDREQUEST; req->tr_time.tv_secs = interval/1000; |