void device_rtc_interface::advance_minutes() { m_register[RTC_MINUTE]++; if (m_register[RTC_MINUTE] == 60) { m_register[RTC_MINUTE] = 0; m_register[RTC_HOUR]++; } if (m_register[RTC_HOUR] == 24) { m_register[RTC_HOUR] = 0; advance_days(); } }
void msm6242_device::update_rtc_registers() { // get the absolute current time, in ticks UINT64 curtime = current_time(); // how long as it been since we last updated? UINT64 delta = curtime - m_last_update_time; // set current time m_last_update_time = curtime; // no delta? just return if (delta == 0) return; // ticks if ((m_tick % 200) != (int)((delta + m_tick) % 0x200)) irq(IRQ_64THSECOND); delta = bump(RTC_TICKS, delta, 0, 0x8000); if (delta == 0) return; // seconds irq(IRQ_SECOND); delta = bump(RTC_SECOND, delta, 0, 60); if (delta == 0) return; // minutes irq(IRQ_MINUTE); delta = bump(RTC_MINUTE, delta, 0, 60); if (delta == 0) return; // hours irq(IRQ_HOUR); delta = bump(RTC_HOUR, delta, 0, 24); if (delta == 0) return; // days while(delta--) advance_days(); }