4 #include "rockmacros.h"
14 void rtc_latch(byte b
)
16 if ((rtc
.latch
^ b
) & b
& 1)
22 rtc
.regs
[4] = (rtc
.d
>>9) | (rtc
.stop
<<6) | (rtc
.carry
<<7);
30 void rtc_write(byte b
)
32 /* printf("write %02X: %02X (%d)\n", rtc.sel, b, b); */
33 if (!(rtc
.sel
& 8)) return;
37 rtc
.s
= rtc
.regs
[0] = b
;
38 while (rtc
.s
>= 60) rtc
.s
-= 60;
41 rtc
.m
= rtc
.regs
[1] = b
;
42 while (rtc
.m
>= 60) rtc
.m
-= 60;
45 rtc
.h
= rtc
.regs
[2] = b
;
46 while (rtc
.h
>= 24) rtc
.h
-= 24;
50 rtc
.d
= (rtc
.d
& 0x100) | b
;
54 rtc
.d
= (rtc
.d
& 0xff) | ((b
&1)<<9);
87 void rtc_save_internal(int fd
)
92 rt
= rb
->mktime(rb
->get_time());
94 fdprintf(fd
, "%d %d %d %d %d %d %d %d\n", rtc
.carry
, rtc
.stop
, rtc
.d
, rtc
.h
,
95 rtc
.m
, rtc
.s
, rtc
.t
, rt
);
98 void rtc_load_internal(int fd
)
103 rb
->read_line(fd
, buf
, sizeof(buf
));
104 sscanf(buf
, "%d %d %d %d %d %d %d %d\n", &rtc
.carry
, &rtc
.stop
, &rtc
.d
,
105 &rtc
.h
, &rtc
.m
, &rtc
.s
, &rtc
.t
, &rt
);
107 while (rtc
.t
>= 60) rtc
.t
-= 60;
108 while (rtc
.s
>= 60) rtc
.s
-= 60;
109 while (rtc
.m
>= 60) rtc
.m
-= 60;
110 while (rtc
.h
>= 24) rtc
.h
-= 24;
111 while (rtc
.d
>= 365) rtc
.d
-= 365;
116 if (rt
) rt
= (rb
->mktime(rb
->get_time()) - rt
) * 60;
118 while (rt
-- > 0) rtc_tick();