--- xmil/calendar.c 2004/08/05 11:30:12 1.2 +++ xmil/calendar.c 2008/06/02 20:07:30 1.5 @@ -1,6 +1,8 @@ #include "compiler.h" #include "parts.h" #include "timemng.h" +#include "pccore.h" +#include "nevent.h" #include "calendar.h" @@ -36,7 +38,7 @@ static void secinc(_SYSTIME *dt) { if (month < 12) { daylimit = days[month]; if ((daylimit == 28) && (!(dt->year & 3))) { - daylimit++; // = 29; + daylimit++; /* = 29 */ } } else { @@ -60,54 +62,66 @@ secinc_exit: } -// ---- - -void calendar_initialize(void) { - - timemng_gettime(&cal.dt); -} - -void calendar_inc(void) { - - cal.steps++; - if (cal.steps >= 60) { - cal.steps = 0; - secinc(&cal.dt); - } -} +/* ---- */ void calendar_getdate(UINT8 *bcd) { - bcd[0] = AdjustAfterMultiply((UINT8)(cal.dt.year % 100)); + bcd[2] = AdjustAfterMultiply((UINT8)(cal.dt.year % 100)); bcd[1] = ((cal.dt.month << 4) + cal.dt.week); - bcd[2] = AdjustAfterMultiply((UINT8)cal.dt.day); + bcd[0] = AdjustAfterMultiply((UINT8)cal.dt.day); } void calendar_setdate(const UINT8 *bcd) { UINT year; - year = AdjustBeforeDivision(bcd[0]); + year = AdjustBeforeDivision(bcd[2]); if (year < 80) { year += 100; } cal.dt.year = (UINT16)(year + 1900); cal.dt.week = (UINT8)(bcd[1] & 0x0f); cal.dt.month = (UINT8)(bcd[1] >> 4); - cal.dt.day = AdjustBeforeDivision(bcd[2]); + cal.dt.day = AdjustBeforeDivision(bcd[0]); } void calendar_gettime(UINT8 *bcd) { - bcd[0] = AdjustAfterMultiply((UINT8)cal.dt.hour); + bcd[2] = AdjustAfterMultiply((UINT8)cal.dt.hour); bcd[1] = AdjustAfterMultiply((UINT8)cal.dt.minute); - bcd[2] = AdjustAfterMultiply((UINT8)cal.dt.second); + bcd[0] = AdjustAfterMultiply((UINT8)cal.dt.second); } void calendar_settime(const UINT8 *bcd) { - cal.dt.hour = AdjustBeforeDivision(bcd[0]); + cal.dt.hour = AdjustBeforeDivision(bcd[2]); cal.dt.minute = AdjustBeforeDivision(bcd[1]); - cal.dt.second = AdjustBeforeDivision(bcd[2]); + cal.dt.second = AdjustBeforeDivision(bcd[0]); +} + + +/* ---- */ + +void neitem_rtc(UINT id) { + + nevent_repeat(id); + cal.steps++; + if (cal.steps >= 5) { + cal.steps -= 5; + secinc(&cal.dt); + } +} + +void calendar_reset(void) { + + SINT32 clock; + + timemng_gettime(&cal.dt); +#if defined(FIX_Z80A) + clock = 2000000 * 2 / 5; +#else + clock = pccore.realclock / 5; +#endif + nevent_set(NEVENT_RTC, clock, neitem_rtc, NEVENT_RELATIVE); }