From 8958b87f6517da9dd70b2c8177a91c74df0d1f84 Mon Sep 17 00:00:00 2001 From: starnakin Date: Tue, 10 Sep 2024 16:37:01 +0200 Subject: [PATCH 1/3] lib: add: inw, outw --- libbozo/headers/sys/io.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libbozo/headers/sys/io.h b/libbozo/headers/sys/io.h index c072f04..01fc098 100644 --- a/libbozo/headers/sys/io.h +++ b/libbozo/headers/sys/io.h @@ -13,3 +13,15 @@ static inline uint8_t inb(uint16_t port) __asm__ volatile("inb %w1, %b0" : "=a"(ret) : "Nd"(port) : "memory"); return ret; } + +static inline void outw(uint16_t port, uint16_t val) +{ + __asm__ volatile("outb %b0, %w1" : : "a"(val), "Nd"(port) : "memory"); +} + +static inline uint16_t inw(uint16_t port) +{ + uint8_t ret; + __asm__ volatile("inb %w1, %b0" : "=a"(ret) : "Nd"(port) : "memory"); + return ret; +} From 07ff7f60874ba9eec8d5bbb53588374567fef639 Mon Sep 17 00:00:00 2001 From: starnakin Date: Tue, 10 Sep 2024 16:37:18 +0200 Subject: [PATCH 2/3] lib: add: memcmp --- libbozo/headers/string.h | 1 + libbozo/src/string/memcmp.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 libbozo/src/string/memcmp.c diff --git a/libbozo/headers/string.h b/libbozo/headers/string.h index 0d3d83d..0c7686a 100644 --- a/libbozo/headers/string.h +++ b/libbozo/headers/string.h @@ -8,3 +8,4 @@ int strncmp(const char *s1, const char *s2, size_t n); size_t strlen(const char *str); char *strstr(const char *haystack, const char *needle); void *memcpy(void *dest, const void *src, size_t n); +int memcmp(const void *s1, const void *s2, size_t n); \ No newline at end of file diff --git a/libbozo/src/string/memcmp.c b/libbozo/src/string/memcmp.c new file mode 100644 index 0000000..4878061 --- /dev/null +++ b/libbozo/src/string/memcmp.c @@ -0,0 +1,13 @@ +#include + +int memcmp(const void *s1, const void *s2, size_t n) +{ + const char *str1 = s1; + const char *str2 = s2; + size_t i; + + if (n == 0) + return 0; + for (i = 0; str1[i] == str2[i] && i < n - 1; i++); + return str1[i] - str2[i]; +} \ No newline at end of file From cc9aca2595aa030859da56d2def1acb0dc4618c0 Mon Sep 17 00:00:00 2001 From: starnakin Date: Tue, 10 Sep 2024 16:37:30 +0200 Subject: [PATCH 3/3] fix: gdt add stack --- src/gdt/gdt.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/gdt/gdt.c b/src/gdt/gdt.c index 4e43bbf..e31dc79 100644 --- a/src/gdt/gdt.c +++ b/src/gdt/gdt.c @@ -50,9 +50,11 @@ void initGdt() .base = 0, .limit = 0xFFFFF, .access_byte = 0x92, .flags = 0xC}; encodeGdtEntry(gdt_entries[2], gdt_entry_kernel_mode_data_segment); - struct gdt_entry gdt_entry_kernel_mode_stack_segment = { - .base = 0x0, .limit = 0x0, .access_byte = 0x97, .flags = 0x0D}; - encodeGdtEntry(gdt_entries[3], gdt_entry_kernel_mode_data_segment); + struct gdt_entry gdt_entry_kernel_mode_stack_segment = { .base = 0x0, + .limit = 0x0, + .access_byte = 0x97, + .flags = 0x0D }; + encodeGdtEntry(gdt_entries[3], gdt_entry_kernel_mode_stack_segment); struct gdt_entry gdt_entry_user_mode_code_segment = { .base = 0, .limit = 0xFFFFF, .access_byte = 0xFA, .flags = 0xC}; @@ -62,9 +64,11 @@ void initGdt() .base = 0, .limit = 0xFFFFF, .access_byte = 0xF2, .flags = 0xC}; encodeGdtEntry(gdt_entries[5], gdt_entry_user_mode_data_segment); - struct gdt_entry gdt_entry_user_mode_stack_segment = { - .base = 0x0, .limit = 0x0, .access_byte = 0xF7, .flags = 0x0D}; - encodeGdtEntry(gdt_entries[6], gdt_entry_user_mode_data_segment); + struct gdt_entry gdt_entry_user_mode_stack_segment = { .base = 0x0, + .limit = 0x0, + .access_byte = 0xF7, + .flags = 0x0D }; + encodeGdtEntry(gdt_entries[6], gdt_entry_user_mode_stack_segment); memcpy((void *)gdtr.base, (void *)gdt_entries, (size_t)GDT_SIZE);