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])); }
UINT64 msm6242_device::bump(int rtc_register, UINT64 delta, UINT64 register_min, UINT64 register_range) { UINT64 carry = 0; if (delta > 0) { // get the register value UINT64 register_value = (rtc_register == RTC_TICKS) ? m_tick : get_clock_register(rtc_register); // increment the value UINT64 new_register_value = ((register_value - register_min + delta) % register_range) + register_min; // calculate the cary carry = ((register_value - register_min) + delta) / register_range; // store the new register value if (rtc_register == RTC_TICKS) m_tick = (UINT16) new_register_value; else set_clock_register(rtc_register, (int) new_register_value); } return carry; }
void device_rtc_interface::adjust_seconds() { int seconds = get_clock_register(RTC_SECOND); set_clock_register(RTC_SECOND, 0); if (seconds >= 30) { advance_minutes(); } else { clock_updated(); } }
void device_rtc_interface::set_time(bool update, int year, int month, int day, int day_of_week, int hour, int minute, int second) { if (!rtc_feature_y2k()) { year %= 100; } set_clock_register(RTC_YEAR, year); set_clock_register(RTC_MONTH, month); set_clock_register(RTC_DAY, day); set_clock_register(RTC_DAY_OF_WEEK, day_of_week); set_clock_register(RTC_HOUR, hour); set_clock_register(RTC_MINUTE, minute); set_clock_register(RTC_SECOND, second); if (update) { rtc_clock_updated(m_register[RTC_YEAR], m_register[RTC_MONTH], m_register[RTC_DAY], m_register[RTC_DAY_OF_WEEK], m_register[RTC_HOUR], m_register[RTC_MINUTE], m_register[RTC_SECOND]); } }
void hp98035_io_card::clock_short_press(void) { LOG(("Short press:%u\n" , m_clock_keys)); bool regen = false; int tmp; switch (m_clock_state) { case CLOCK_OFF: if (m_clock_keys == KEY_READ_MASK) { m_clock_state = CLOCK_HHMM; regen = true; } else if (m_clock_keys == KEY_SET_MASK) { m_clock_state = CLOCK_HH; regen = true; } break; case CLOCK_SS: if (m_clock_keys == KEY_SET_MASK) { m_clock_state = CLOCK_HH; regen = true; } else if (m_clock_keys == (KEY_CHG_MASK | KEY_READ_MASK)) { tmp = get_clock_register(RTC_SECOND); tmp++; if (tmp >= 60) { tmp = 0; } set_clock_register(RTC_SECOND , tmp); log_current_time(); //m_clock_1s_div = 0; regen = true; } break; case CLOCK_HH: if (m_clock_keys == KEY_SET_MASK) { m_clock_state = CLOCK_MIN; regen = true; } else if (m_clock_keys == (KEY_CHG_MASK | KEY_READ_MASK)) { tmp = get_clock_register(RTC_HOUR); tmp++; if (tmp >= 24) { tmp = 0; } set_clock_register(RTC_HOUR , tmp); log_current_time(); regen = true; } break; case CLOCK_MIN: if (m_clock_keys == KEY_SET_MASK) { m_clock_state = CLOCK_MON; regen = true; } else if (m_clock_keys == (KEY_CHG_MASK | KEY_READ_MASK)) { tmp = get_clock_register(RTC_MINUTE); tmp++; if (tmp >= 60) { tmp = 0; } set_clock_register(RTC_MINUTE , tmp); set_clock_register(RTC_SECOND , 0); //m_clock_1s_div = 0; log_current_time(); regen = true; } break; case CLOCK_MON: if (m_clock_keys == KEY_SET_MASK) { m_clock_state = CLOCK_DOM; regen = true; } else if (m_clock_keys == (KEY_CHG_MASK | KEY_READ_MASK)) { tmp = get_clock_register(RTC_MONTH); tmp++; if (tmp >= 13) { tmp = 1; } set_clock_register(RTC_MONTH , tmp); log_current_time(); regen = true; } break; case CLOCK_DOM: if (m_clock_keys == KEY_SET_MASK) { m_clock_state = CLOCK_OFF; regen = true; } else if (m_clock_keys == (KEY_CHG_MASK | KEY_READ_MASK)) { tmp = get_clock_register(RTC_DAY); tmp++; if (tmp > gregorian_days_in_month(get_clock_register(RTC_MONTH) , 0)) { tmp = 1; } set_clock_register(RTC_DAY , tmp); log_current_time(); regen = true; } break; default: break; } if (regen) { regen_clock_image(); } }