15 #define CURRENT_YEAR 2022
17 int32_t century_register = 0x00;
19 unsigned char cmos_second;
20 unsigned char cmos_minute;
21 unsigned char cmos_hour;
22 unsigned char cmos_day;
23 unsigned char cmos_month;
24 unsigned short cmos_year;
25 unsigned char cmos_century;
27 unsigned char last_second;
28 unsigned char last_minute;
29 unsigned char last_hour;
30 unsigned char last_day;
31 unsigned char last_month;
32 unsigned char last_year;
33 unsigned char last_century;
34 unsigned char registerB;
47 outb(cmos_address, 0x0A);
48 return (inb(cmos_data) & 0x80);
55 outb(cmos_address, reg);
56 return inb(cmos_data);
72 if(century_register != 0) {
77 last_second = cmos_second;
78 last_minute = cmos_minute;
79 last_hour = cmos_hour;
81 last_month = cmos_month;
82 last_year = cmos_year;
83 last_century = cmos_century;
93 if(century_register != 0) {
96 }
while( (last_second != cmos_second) || (last_minute != cmos_minute) || (last_hour != cmos_hour) ||
97 (last_day != cmos_day) || (last_month != cmos_month) || (last_year != cmos_year) ||
98 (last_century != cmos_century) );
104 if (!(registerB & 0x04)) {
105 cmos_second = (cmos_second & 0x0F) + ((cmos_second / 16) * 10);
106 cmos_minute = (cmos_minute & 0x0F) + ((cmos_minute / 16) * 10);
107 cmos_hour = ( (cmos_hour & 0x0F) + (((cmos_hour & 0x70) / 16) * 10) ) | (cmos_hour & 0x80);
108 cmos_day = (cmos_day & 0x0F) + ((cmos_day / 16) * 10);
109 cmos_month = (cmos_month & 0x0F) + ((cmos_month / 16) * 10);
110 cmos_year = (cmos_year & 0x0F) + ((cmos_year / 16) * 10);
111 if(century_register != 0) {
112 cmos_century = (cmos_century & 0x0F) + ((cmos_century / 16) * 10);
118 if (!(registerB & 0x02) && (cmos_hour & 0x80)) {
119 cmos_hour = ((cmos_hour & 0x7F) + 12) % 24;
124 if(century_register != 0) {
125 cmos_year += cmos_century * 100;
127 cmos_year += (CURRENT_YEAR / 100) * 100;
128 if(cmos_year < CURRENT_YEAR) cmos_year += 100;
138 return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
147 cmos_second, cmos_minute, cmos_hour, cmos_day, cmos_month, cmos_year, cmos_century
int isleap(int year)
Это високосный год?
void read_rtc()
Считывает время с CMOS.
unsigned char get_RTC_register(int32_t reg)
Получает регистр CMOS.
sayori_time_t get_time()
Считывает время и передает в удобной структуре
int32_t get_update_in_progress_flag()
Проверяет CMOS на обновление
Основные определения ядра