/* * time — текущие секунды Unix-эпохи из RTC (getdatetime / ESTEX * SYSTIME $21). * * SDCC-шная z80.lib кладёт time/localtime/mktime И _RtcRead в один * модуль time.rel, так что _RtcRead нельзя переопределить из * отдельного объектника — будет "multiple definition". Обходим это, * реализуя весь POSIX time API сами; тогда линкер никогда не тянет * SDCC-шный time.rel. * * Эпоха — Unix (1970-01-01 00:00:00). Без таймзон и DST. */ #include #include "_time.h" time_t time(time_t *t) { datetime_t dt; getdatetime(&dt); unsigned long days = _tm_year_days(dt.year) + _tm_month_days(dt.year, dt.month) + (dt.day - 1); time_t epoch = days * 86400UL + (unsigned long)dt.hour * 3600UL + (unsigned long)dt.minute * 60UL + dt.second; if (t) *t = epoch; return epoch; }