void pit68230_device::update_tin(uint8_t state) { // Tick clock on falling edge. TODO: check what flank is correct if (state == CLEAR_LINE) { tick_clock(); } pc_update_bit(REG_PCDR_TIN_BIT, state == ASSERT_LINE ? 0 : 1); }
//------------------------------------------------- // device_timer - handler timer events //------------------------------------------------- void pit68230_device::device_timer (emu_timer &timer, device_timer_id id, int32_t param, void *ptr) { switch(id) { case TIMER_ID_PIT: tick_clock(); break; default: LOG("Unhandled Timer ID %d\n", id); break; } }
void load_clock() { time_t now = time(NULL); #ifdef PBL_SDK_2 struct tm *t = localtime(&now); #else struct tm *t = gmtime(&now); #endif tick_clock(t, true); if(persist_exists(SW_BUTT)) { sw_butt = persist_read_int(SW_BUTT); persist_read_data(SW_STOP, ®, sizeof(reg)); lap.tm_hour = t->tm_hour - reg.tm_hour + 960; lap.tm_hour += (t->tm_yday - reg.tm_yday) * 24;//days; if(reg.tm_year != t->tm_year) { lap.tm_hour += 365 * 24;//happy new year (close enough) if((reg.tm_year%4 == 0) && ((reg.tm_year%100 != 0) || (reg.tm_year%400 == 0))) lap.tm_hour += 24;//leap year day if(t->tm_year - reg.tm_year > 1) {//greater than 1 year reset_sw();//get a life!! return; } } lap.tm_min = t->tm_min - reg.tm_min + 60; lap.tm_sec = t->tm_sec - reg.tm_sec + 60; persist_read_data(SW_STORE, ®, sizeof(reg)); if((sw_butt&1)==1) {//add extra running time reg.tm_hour += lap.tm_hour; reg.tm_hour %= 960;//40 day timer reg.tm_min += lap.tm_min; reg.tm_min %= 60; reg.tm_sec += lap.tm_sec; reg.tm_sec %= 60; } persist_read_data(SW_LAP, &lap, sizeof(lap)); return; } reset_sw(); }