Example #1
0
/* Called on every get time. */
static void set_registers()
{
	int is24hour = (nvrram[0xB] & 2) ? 1 : 0;
	int isbcd = (nvrram[0xB] & 4) ? 0 : 1;

	uint8_t baknvr[10];

	memcpy(baknvr,nvrram,10);

	if (AMSTRAD)
	{
		is24hour = 1;
		isbcd = 1;
	}

	nvrram[0] = final_form(isbcd, second);
	nvrram[2] = final_form(isbcd, minute);
	nvrram[4] = is24hour ? final_form(isbcd, hour) : final_form(isbcd, to_12_hour(hour));
	nvrram[6] = week_day();
	nvrram[7] = final_form(isbcd, day);
	nvrram[8] = final_form(isbcd, month);
	nvrram[9] = final_form(isbcd, (year % 100));

        if (baknvr[0] != nvrram[0] ||
            baknvr[2] != nvrram[2] ||
            baknvr[4] != nvrram[4] ||
            baknvr[6] != nvrram[6] ||
            baknvr[7] != nvrram[7] ||
            baknvr[8] != nvrram[8] ||
            baknvr[9] != nvrram[9])
		nvrram[0xA]|=0x80;
}
Example #2
0
static void display_layer_update_callback(Layer *me, GContext* context) {
	time_t now			=	time(NULL);
	struct tm *t		=	localtime(&now);
	unsigned short hour	=	t->tm_hour;
	unsigned short hour_first_digit;
	unsigned short hour_second_digit;

	if(!clock_is_24h_style()) {
		unsigned short period;
		if(hour < 12) period = 0; // 0 for AM
		else period = 1; // 1 for PM
		hour = to_12_hour(hour);
		hour_first_digit = period;
		hour_second_digit = hour;
	}

	else {
		hour_first_digit = hour / 10;
		hour_second_digit = hour % 10;
	}


	draw_col(
		context,
		hour_first_digit,
		HOURS_FIRST_DIGIT_MAX_ROWS,
		HOURS_FIRST_DIGIT_COL
	);
	draw_col(context,
		hour_second_digit,
		DEFAULT_MAX_ROWS,
		HOURS_SECOND_DIGIT_COL
	);

	draw_col(context,
		t->tm_min / 10,
		MINUTES_FIRST_DIGIT_MAX_ROWS,
		MINUTES_FIRST_DIGIT_COL
	);
	draw_col(context,
		t->tm_min % 10,
		DEFAULT_MAX_ROWS,
		MINUTES_SECOND_DIGIT_COL
	);
}
Example #3
0
static void update_reg_0B(int val)
{
	int old_24 = (nvrram[0xB] & 2) ? 1 : 0;
	int new_24 = (val & 2) ? 1 : 0;
	int old_bcd = (nvrram[0xB] & 4) ? 0 : 1;
	int new_bcd = (val & 4) ? 0 : 1;

	uint8_t baknvr[10];

	if (AMSTRAD)  return;

	memcpy(baknvr,nvrram,10);

	/* First convert to regular form. */
	second = original_form(old_bcd, nvrram[0]);
	minute = original_form(old_bcd, nvrram[2]);
	hour = old_24 ? original_form(old_bcd, nvrram[4]) : from_12_hour(original_form(old_bcd, nvrram[4]));
	day = original_form(old_bcd, nvrram[7]);
	month = original_form(old_bcd, nvrram[8]);
	year = original_form(old_bcd, nvrram[9]) + 1900;

	/* Then convert to new form. */
	nvrram[0] = final_form(new_bcd, second);
	nvrram[2] = final_form(new_bcd, minute);
	nvrram[4] = new_24 ? final_form(new_bcd, hour) : final_form(new_bcd, to_12_hour(hour));
	nvrram[6] = week_day();
	nvrram[7] = final_form(new_bcd, day);
	nvrram[8] = final_form(new_bcd, month);
	nvrram[9] = final_form(new_bcd, (year % 100));

        if (baknvr[0] != nvrram[0] ||
            baknvr[2] != nvrram[2] ||
            baknvr[4] != nvrram[4] ||
            baknvr[6] != nvrram[6] ||
            baknvr[7] != nvrram[7] ||
            baknvr[8] != nvrram[8] ||
            baknvr[9] != nvrram[9])
		nvrram[0xA]|=0x80;
}