diff --git a/include/sys.h b/include/sys.h new file mode 100644 index 0000000..a5f279b --- /dev/null +++ b/include/sys.h @@ -0,0 +1,44 @@ +#include + +typedef struct { + void (*fb_printf)(char *str, ...); +} env_t; + +typedef struct { + int reserved; +} framebuffer_t; + +typedef struct { + int reserved; +} sys_info_t; + +typedef struct { + char *name; + void *addr; +} module_func_t; + +typedef struct { + char *name; + char *message; + int err_code; + uint64_t func_count; + module_func_t *func[]; +} module_info_t; + +typedef struct { + int reserved; +} func_t; + +typedef struct { + uint8_t a[4]; + uint8_t b[4]; + uint8_t c[4]; + uint8_t d[4]; +} uid_t; + +typedef struct { + uint16_t year; + uint8_t month; + uint8_t day; + uint8_t second; +} time_t; diff --git a/include/version.h b/include/version.h index ed89816..6763c58 100644 --- a/include/version.h +++ b/include/version.h @@ -1,3 +1,3 @@ #define VERSION_MAJOR 0 #define VERSION_MINOR 1 -#define VERSION_BUILD 40 +#define VERSION_BUILD 61 diff --git a/kernel/fb.cpp b/kernel/fb.cpp index d41d741..f9e0af5 100644 --- a/kernel/fb.cpp +++ b/kernel/fb.cpp @@ -48,6 +48,8 @@ void init( ) { bpp = boot_framebuffer->bpp; for (uint64_t i = 0; i < width * height; i++) { fb_addr[i] = background; } + + fb::printf("0x%x %ux%u\n", fb_addr, width, height); } static inline void print_bits(size_t x, size_t y, uint8_t num) { diff --git a/kernel/mod.cpp b/kernel/mod.cpp index 9d6a4ed..a0a5a9b 100644 --- a/kernel/mod.cpp +++ b/kernel/mod.cpp @@ -1,6 +1,7 @@ #include #include #include +#include // Структуры соответствующие ELF заголовкам typedef struct { @@ -86,15 +87,16 @@ void init( ) { module_ptr->mbr_disk_id, module_ptr->tftp_ip, module_ptr->tftp_port); - long long (*module_init)(env_t * env) = (long long (*)(env_t * env)) - elf_entry(module_ptr->address, module_ptr->size); + module_info_t *(*module_init)(env_t * env) = + (module_info_t * (*)(env_t * env)) + elf_entry(module_ptr->address, module_ptr->size); fb::printf("\t->Точка входа: 0x%x\n", module_init); - int ret = module_init(&main_env); + module_info_t *ret = module_init(&main_env); - fb::printf("Инициализированно с кодом: %x\n", ret); - fb::printf("Сообщение из модуля: %s\n\n", (char *)ret); + fb::printf("Инициализированно с кодом: %u\n", ret->err_code); + fb::printf("Сообщение из модуля: %s\n\n", ret->message); } } } // namespace mod \ No newline at end of file diff --git a/kernel/sys.cpp b/kernel/sys.cpp index 7925c6d..88fedf8 100644 --- a/kernel/sys.cpp +++ b/kernel/sys.cpp @@ -1,34 +1,5 @@ #include - -typedef struct { - int reserved; -} framebuffer_t; - -typedef struct { - int reserved; -} sys_info_t; - -typedef struct { - int reserved; -} module_info_t; - -typedef struct { - int reserved; -} func_t; - -typedef struct { - uint8_t a[4]; - uint8_t b[4]; - uint8_t c[4]; - uint8_t d[4]; -} uid_t; - -typedef struct { - uint16_t year; - uint8_t month; - uint8_t day; - uint8_t second; -} time_t; +#include namespace sys { void init( ) {}