예제 #1
0
time_t dvbdate_to_unixtime(dvbdate_t dvbdate)
{
	int k = 0;
	struct tm tm;
	double mjd;

	/* check for the undefined value */
	if ((dvbdate[0] == 0xff) &&
	    (dvbdate[1] == 0xff) &&
	    (dvbdate[2] == 0xff) &&
	    (dvbdate[3] == 0xff) &&
	    (dvbdate[4] == 0xff)) {
		return -1;
	}

	memset(&tm, 0, sizeof(tm));
	mjd = (dvbdate[0] << 8) | dvbdate[1];

	tm.tm_year = (int) ((mjd - 15078.2) / 365.25);
	tm.tm_mon = (int) (((mjd - 14956.1) - (int) (tm.tm_year * 365.25)) / 30.6001);
	tm.tm_mday = (int) mjd - 14956 - (int) (tm.tm_year * 365.25) - (int) (tm.tm_mon * 30.6001);
	if ((tm.tm_mon == 14) || (tm.tm_mon == 15)) k = 1;
	tm.tm_year += k;
	tm.tm_mon = tm.tm_mon - 2 - k * 12;
	tm.tm_sec = bcd_to_integer(dvbdate[4]);
	tm.tm_min = bcd_to_integer(dvbdate[3]);
	tm.tm_hour = bcd_to_integer(dvbdate[2]);

	return mktime(&tm);
}
예제 #2
0
파일: cdp1879.cpp 프로젝트: Dagarman/mame
void cdp1879_device::update_rtc()
{
	set_clock_register(RTC_SECOND, bcd_to_integer(m_regs[R_CNT_SECONDS]));
	set_clock_register(RTC_MINUTE, bcd_to_integer(m_regs[R_CNT_MINUTES]));
	set_clock_register(RTC_HOUR, bcd_to_integer(m_regs[R_CNT_HOURS]));
	set_clock_register(RTC_DAY, bcd_to_integer(m_regs[R_CNT_DAYOFMONTH]));
	set_clock_register(RTC_MONTH, bcd_to_integer(m_regs[R_CNT_MONTH]));
}
예제 #3
0
int dvbhhmm_to_seconds(dvbhhmm_t dvbhhmm)
{
	int seconds = 0;

	seconds += (bcd_to_integer(dvbhhmm[0]) * 60 * 60);
	seconds += (bcd_to_integer(dvbhhmm[1]) * 60);

	return seconds;
}
예제 #4
0
int dvbduration_to_seconds(dvbduration_t dvbduration)
{
	int seconds = 0;

	seconds += (bcd_to_integer(dvbduration[0]) * 60 * 60);
	seconds += (bcd_to_integer(dvbduration[1]) * 60);
	seconds += bcd_to_integer(dvbduration[2]);

	return seconds;
}
예제 #5
0
inline void upd1990a_device::advance_seconds()
{
	static const int days_per_month[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	int seconds = bcd_to_integer(m_time_counter[0]);
	int minutes = bcd_to_integer(m_time_counter[1]);
	int hours = bcd_to_integer(m_time_counter[2]);
	int days = bcd_to_integer(m_time_counter[3]);
	int day_of_week = m_time_counter[4] & 0x0f;
	int month = (m_time_counter[4] & 0xf0) >> 4;

	seconds++;

	if (seconds > 59)
	{
		seconds = 0;
		minutes++;
	}

	if (minutes > 59)
	{
		minutes = 0;
		hours++;
	}

	if (hours > 23)
	{
		hours = 0;
		days++;
		day_of_week++;
	}

	if (day_of_week > 6)
	{
		day_of_week++;
	}

	if (days > days_per_month[month - 1])
	{
		days = 1;
		month++;
	}

	if (month > 12)
	{
		month = 1;
	}

	m_time_counter[0] = convert_to_bcd(seconds);
	m_time_counter[1] = convert_to_bcd(minutes);
	m_time_counter[2] = convert_to_bcd(hours);
	m_time_counter[3] = convert_to_bcd(days);
	m_time_counter[4] = (month << 4) | day_of_week;
}