From 71396c5cd460890c52e348687e6e7c864e2dfeed Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Sun, 7 Aug 2022 16:39:28 +0200 Subject: types.h; libk and heap begining --- kernel/src/boot/multiboot2.c | 3 ++- kernel/src/cpu/io.c | 2 +- kernel/src/cpu/irq.c | 3 ++- kernel/src/devices/keyboard.c | 36 ++++++++++-------------------------- kernel/src/libk/math.c | 7 +++++++ kernel/src/libk/mem.c | 0 kernel/src/libk/string.c | 43 +++++++++++++++++++++++++++++++++++++++++++ kernel/src/main.c | 8 +++++++- kernel/src/mem/heap.c | 16 ++++++++++++++++ kernel/src/mem/paging.c | 3 ++- kernel/src/mem/paging_asm.S | 12 ++++++------ kernel/src/misc/debug.c | 2 -- kernel/src/misc/graphics.c | 18 ++++-------------- 13 files changed, 100 insertions(+), 53 deletions(-) create mode 100644 kernel/src/libk/math.c create mode 100644 kernel/src/libk/mem.c create mode 100644 kernel/src/libk/string.c create mode 100644 kernel/src/mem/heap.c (limited to 'kernel/src') diff --git a/kernel/src/boot/multiboot2.c b/kernel/src/boot/multiboot2.c index e228ce1..2badae9 100644 --- a/kernel/src/boot/multiboot2.c +++ b/kernel/src/boot/multiboot2.c @@ -1,4 +1,5 @@ -#include +#include + #include #include diff --git a/kernel/src/cpu/io.c b/kernel/src/cpu/io.c index 6bf67d0..a73c5b1 100644 --- a/kernel/src/cpu/io.c +++ b/kernel/src/cpu/io.c @@ -1,4 +1,4 @@ -#include +#include uint8_t inb(uint32_t port) { diff --git a/kernel/src/cpu/irq.c b/kernel/src/cpu/irq.c index 1e02f23..c81cc98 100644 --- a/kernel/src/cpu/irq.c +++ b/kernel/src/cpu/irq.c @@ -1,4 +1,5 @@ -#include +#include + #include #include #include diff --git a/kernel/src/devices/keyboard.c b/kernel/src/devices/keyboard.c index d4b06b9..f873a29 100644 --- a/kernel/src/devices/keyboard.c +++ b/kernel/src/devices/keyboard.c @@ -1,11 +1,11 @@ -#include -#include +#include #include #include #include #include #include +#include #define KEYBOARD_DATA_PORT 0x60 #define KEYBOARD_STATUS_PORT 0x64 @@ -14,29 +14,6 @@ static uint32_t x; static uint32_t y; bool is_pressed[128]; -uint32_t strlen(const char *s); - -uint32_t stoi(const char *s) -{ - static uint32_t num; - uint32_t s_len = strlen(s); - - for (int i = s_len - 1; i >= 0; i--) { - num += s[i] - '0'; - } - - return num; -} - -void itos(uint32_t num, char** s) -{ - uint32_t i; - for (i = 0; num; num/=10, i++) { - *s[i] = num%10 - '0'; - } - *s[i] = '\0'; -} - void print_char(char c) { @@ -59,11 +36,18 @@ void print_char(char c) void print_string(char* s) { - for (uint32_t i = 0; i < strlen(s); i++) { + for (size_t i = 0; i < strlen(s); i++) { print_char(s[i]); } } +void print_int(uint64_t num) +{ + char a[100]; + itos(num, a); + print_string(a); +} + void keyboard_handler(void) { uint8_t status = inb(KEYBOARD_STATUS_PORT); diff --git a/kernel/src/libk/math.c b/kernel/src/libk/math.c new file mode 100644 index 0000000..c2f9c5e --- /dev/null +++ b/kernel/src/libk/math.c @@ -0,0 +1,7 @@ +#include + +int64_t abs(int64_t val) +{ + if (val < 0) return -val; + return val; +} diff --git a/kernel/src/libk/mem.c b/kernel/src/libk/mem.c new file mode 100644 index 0000000..e69de29 diff --git a/kernel/src/libk/string.c b/kernel/src/libk/string.c new file mode 100644 index 0000000..a4d0191 --- /dev/null +++ b/kernel/src/libk/string.c @@ -0,0 +1,43 @@ +#include + +size_t strlen(const char* s) +{ + char *p = (char*)s; + while (*p) p++; + return p - s; +} + +uint64_t stoi(const char *s) +{ + uint64_t num = 0; + size_t n = strlen(s); + + for (size_t i = 0; i < n; i++) { + num *= 10; + num += s[i] - '0'; + } + + return num; +} + +void strrev(char *s) +{ + size_t n = strlen(s); + char a[100]; + for (size_t i = 0; i < n; i++) { + a[i] = s[n - 1 - i]; + } + for (size_t i = 0; i < n; i++) { + s[i] = a[i]; + } +} + +void itos(uint64_t num, char* s) +{ + size_t i; + for (i = 0; num; num/=10, i++) { + s[i] = '0' + num%10; + } + s[i] = '\0'; + strrev(s); +} diff --git a/kernel/src/main.c b/kernel/src/main.c index bea4ed2..8a57d45 100644 --- a/kernel/src/main.c +++ b/kernel/src/main.c @@ -1,16 +1,22 @@ -#include +#include + #include #include #include #include #include +#include +#include int kernel_main(mb2_tag_header* multiboot_bootinfo, uint32_t multiboot_magic) { init_paging(); + init_heap(HEAP_START_ADDR, HEAP_SIZE, HEAP_BLOCK_SIZE); init_idt(); init_fb(multiboot_bootinfo, multiboot_magic); + print_int(0x1000); + for(;;) { __asm__ volatile ("hlt;"); } diff --git a/kernel/src/mem/heap.c b/kernel/src/mem/heap.c new file mode 100644 index 0000000..545f6ea --- /dev/null +++ b/kernel/src/mem/heap.c @@ -0,0 +1,16 @@ +#include + +void init_heap(uint64_t addr, uint64_t size, uint64_t block_size) +{ + +} + +void* kmalloc(uint32_t size) +{ + return (uint64_t*)0x0; +} + +void kfree(void *addr) +{ + +} diff --git a/kernel/src/mem/paging.c b/kernel/src/mem/paging.c index aa7f91e..3f9e2f5 100644 --- a/kernel/src/mem/paging.c +++ b/kernel/src/mem/paging.c @@ -1,4 +1,5 @@ -#include +#include + #include void load_pt_lvl4(uint64_t*); diff --git a/kernel/src/mem/paging_asm.S b/kernel/src/mem/paging_asm.S index 5a1dcf7..508930f 100644 --- a/kernel/src/mem/paging_asm.S +++ b/kernel/src/mem/paging_asm.S @@ -2,11 +2,11 @@ .global load_pt_lvl4 load_pt_lvl4: - push %rbp - mov %rsp, %rbp + push %rbp + mov %rsp, %rbp - mov %rdi, %cr3 + mov %rdi, %cr3 - mov %rbp, %rsp - pop %rbp - ret + mov %rbp, %rsp + pop %rbp + ret diff --git a/kernel/src/misc/debug.c b/kernel/src/misc/debug.c index 5f3c327..2a940d3 100644 --- a/kernel/src/misc/debug.c +++ b/kernel/src/misc/debug.c @@ -1,5 +1,3 @@ -#include - void bochs_breakpoint(void) { __asm__ volatile ("xchgw %bx, %bx;"); diff --git a/kernel/src/misc/graphics.c b/kernel/src/misc/graphics.c index d4fc7c7..488e4fa 100644 --- a/kernel/src/misc/graphics.c +++ b/kernel/src/misc/graphics.c @@ -1,7 +1,10 @@ -#include +#include + #include #include #include +#include +#include uint64_t* pixel_offset(fb_t fb, uint32_t x, uint32_t y) { @@ -65,12 +68,6 @@ void fb_draw_line_high(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, } } -int32_t abs(int32_t val) -{ - if (val < 0) return -val; - return val; -} - void fb_draw_line(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t col) { if (abs(y1 - y0) < abs(x1 - x0)) { @@ -104,13 +101,6 @@ void fb_draw_character(fb_t fb, char c, uint32_t x, uint32_t y, uint32_t char_co } } -uint32_t strlen(const char* s) -{ - char *p = (char*)s; - while (*p) p++; - return p - s; -} - void fb_draw_string(fb_t fb, const char* s, uint32_t x, uint32_t y, uint32_t char_col, uint32_t bg_col) { for (uint32_t i = 0; i < strlen(s); i++) { -- cgit v1.2.3