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); }
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])); }
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; }
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; }
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; }