예제 #1
0
파일: dirtc.c 프로젝트: Ilgrim/MAMEHub
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();
	}
}
예제 #2
0
파일: msm6242.c 프로젝트: Ashura-X/mame
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();
}