From 211a6e931805bfa4962de0dc4aaa40aebdb6b513 Mon Sep 17 00:00:00 2001 From: Ruslan Isaev Date: Sun, 16 Mar 2025 13:26:38 +0300 Subject: [PATCH] start implementing time utils --- include/utils.h | 2 ++ src/utils.c | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/include/utils.h b/include/utils.h index 9599006..e0c117e 100644 --- a/include/utils.h +++ b/include/utils.h @@ -4,6 +4,8 @@ uint8 inportb(uint16 _port); void outportb(uint16 _port, uint8 _data); +uint8_t get_rtc(uint8_t reg); +void get_fancy_datetime(); #define inb inportb #define outb outportb diff --git a/src/utils.c b/src/utils.c index 9294b01..05709bb 100644 --- a/src/utils.c +++ b/src/utils.c @@ -12,3 +12,24 @@ void outportb(uint16 _port, uint8 _data) { __asm__ __volatile__ ("outb %1, %0" : : "dN" (_port), "a" (_data)); } + +uint8_t get_rtc(uint8_t reg) +{ + uint8_t nmi_disable_bit = 0; + outb(0x70, (nmi_disable_bit << 7) | reg); + uint8_t result = inb(0x71); + + return result; +} + +void get_fancy_datetime() +{ + uint8_t century = get_rtc(0x32); + uint8_t year = get_rtc(0x09); + uint8_t month = get_rtc(0x08); + uint8_t day_of_month = get_rtc(0x07); + uint8_t hour = get_rtc(0x04); + uint8_t minute = get_rtc(0x02); + uint8_t second = get_rtc(0x00); + printf("%X-%X-%X%X %X:%X:%X\n", day_of_month, month, century, year, hour, minute, second); +}