Exemple #1
0
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]));
}
Exemple #2
0
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;
}
Exemple #3
0
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();
	}
}
Exemple #4
0
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]);
	}
}
Exemple #5
0
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();
	}
}