diff options
| author | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-09-08 15:09:30 +0200 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-09-08 19:43:05 +0200 |
| commit | 1d673e7e628db462215abcec06641063a6165b9b (patch) | |
| tree | 07915d1bba39a39afe7cc9dcf9806caf833fc774 | |
| parent | 82e9f02aef1ea1a6588234ee58e3625e3561005f (diff) | |
fixed output glitches
| -rw-r--r-- | kernel/include/graphics.h | 16 | ||||
| -rw-r--r-- | kernel/include/libk/stdio.h | 4 | ||||
| -rw-r--r-- | kernel/src/boot/boot.S | 2 | ||||
| -rw-r--r-- | kernel/src/boot/multiboot2.c | 4 | ||||
| -rw-r--r-- | kernel/src/devices/disc.c | 5 | ||||
| -rw-r--r-- | kernel/src/fs/ext2.c | 2 | ||||
| -rw-r--r-- | kernel/src/libk/stdio.c | 10 | ||||
| -rw-r--r-- | kernel/src/mem/paging.c | 4 | ||||
| -rw-r--r-- | kernel/src/misc/graphics.c | 16 |
9 files changed, 31 insertions, 32 deletions
diff --git a/kernel/include/graphics.h b/kernel/include/graphics.h index e974781..4e4fc48 100644 --- a/kernel/include/graphics.h +++ b/kernel/include/graphics.h @@ -13,7 +13,7 @@ struct fb_t { } __attribute__((packed, aligned(8))); typedef struct fb_t fb_t; -extern fb_t main_fb; +extern volatile fb_t main_fb; #define RED 0x00ff0000 #define GREEN 0x0000ff00 @@ -23,12 +23,12 @@ extern fb_t main_fb; #define WHITE 0x00ffffff #define BLACK 0x00000000 -uint32_t* pixel_offset(fb_t fb, uint32_t x, uint32_t y); -void fb_draw_pixel(fb_t fb, int32_t x, int32_t y, uint32_t col); -void fb_draw_line_low(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col); -void fb_draw_line_high(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col); -void fb_draw_line(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col); -void fb_draw_character(fb_t fb, char c, int32_t x, int32_t y, uint32_t char_col, uint32_t bg_col); -void fb_draw_string(fb_t fb, const char* str, int32_t x, int32_t y, uint32_t char_col, uint32_t bg_col); +uint32_t* pixel_offset(volatile fb_t fb, uint32_t x, uint32_t y); +void fb_draw_pixel(volatile fb_t fb, int32_t x, int32_t y, uint32_t col); +void fb_draw_line_low(volatile fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col); +void fb_draw_line_high(volatile fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col); +void fb_draw_line(volatile fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col); +void fb_draw_character(volatile fb_t fb, char c, int32_t x, int32_t y, uint32_t char_col, uint32_t bg_col); +void fb_draw_string(volatile fb_t fb, const char* str, int32_t x, int32_t y, uint32_t char_col, uint32_t bg_col); #endif diff --git a/kernel/include/libk/stdio.h b/kernel/include/libk/stdio.h index 99064f9..fc7b8e8 100644 --- a/kernel/include/libk/stdio.h +++ b/kernel/include/libk/stdio.h @@ -6,6 +6,10 @@ extern uint32_t curr_x; extern uint32_t curr_y; +void print_char(char c); +void print_string(const char* s); +void print_int(uint64_t num); +void print_hex(uint64_t num); void printf(const char *s, ...); #endif diff --git a/kernel/src/boot/boot.S b/kernel/src/boot/boot.S index 704acbf..40ddf2b 100644 --- a/kernel/src/boot/boot.S +++ b/kernel/src/boot/boot.S @@ -124,5 +124,5 @@ pt_lvl2_hh: .skip 4096 stack_bottom: - .skip 4096*4 + .skip 4096*8 stack_top: diff --git a/kernel/src/boot/multiboot2.c b/kernel/src/boot/multiboot2.c index 12f3c38..cdc0ae4 100644 --- a/kernel/src/boot/multiboot2.c +++ b/kernel/src/boot/multiboot2.c @@ -23,8 +23,8 @@ void init_fb(mb2_tag_fb* tag_fb) main_fb.bpp = tag_fb->framebuffer_bpp; // identity map framebuffer address - map_addr(main_fb.addr, main_fb.addr, FLAG_PRESENT + FLAG_WRITABLE + FLAG_HUGE); - map_addr(main_fb.addr + PAGE_SIZE, main_fb.addr + PAGE_SIZE, FLAG_PRESENT + FLAG_WRITABLE + FLAG_HUGE); + map_addr(main_fb.addr, main_fb.addr, FLAG_PRESENT + FLAG_WRITABLE); + map_addr(main_fb.addr + PAGE_SIZE, main_fb.addr + PAGE_SIZE, FLAG_PRESENT + FLAG_WRITABLE); } void init_mmap(mb2_tag_mmap* tag_mmap) diff --git a/kernel/src/devices/disc.c b/kernel/src/devices/disc.c index 12ed62f..e97b7bf 100644 --- a/kernel/src/devices/disc.c +++ b/kernel/src/devices/disc.c @@ -13,11 +13,6 @@ void disc_init() if (disc == NULL) { printf("Error opening disc\n"); } - - uint32_t disc_size = ext2_module->mod_end - ext2_module->mod_start; - for (size_t i = 0; i < upper_div(disc_size, PAGE_SIZE) + 1; i++) { - map_addr((uint64_t)((char*)disc + i * PAGE_SIZE), (uint64_t)((char*)disc + i * PAGE_SIZE), FLAG_PRESENT | FLAG_WRITABLE | FLAG_HUGE); - } } void read_sector(size_t sector_num, disc_sector_t* disc_sector) diff --git a/kernel/src/fs/ext2.c b/kernel/src/fs/ext2.c index 5395dd0..df4a24a 100644 --- a/kernel/src/fs/ext2.c +++ b/kernel/src/fs/ext2.c @@ -231,7 +231,7 @@ void ls(uint32_t inode) for (list_t* tmp = dir; tmp != NULL; tmp = tmp->next) { ext2_dentry_t* ext2_dentry; ext2_dentry = tmp->data; - printf("inode: %d, name: %s\n", ext2_dentry->inode, ext2_dentry->name); + printf("inode: %d\n", ext2_dentry->inode); } } diff --git a/kernel/src/libk/stdio.c b/kernel/src/libk/stdio.c index 898f3c6..c5c8643 100644 --- a/kernel/src/libk/stdio.c +++ b/kernel/src/libk/stdio.c @@ -8,7 +8,7 @@ uint32_t curr_x; uint32_t curr_y; -inline void print_char(char c) +void print_char(char c) { if (curr_x * 8 >= main_fb.width) { curr_x = 0; @@ -30,27 +30,27 @@ inline void print_char(char c) } return; } -// fb_draw_character(main_fb, c, (int32_t)curr_x * 8, (int32_t)curr_y * 16, WHITE, BLACK); + fb_draw_character(main_fb, c, (int32_t)curr_x * 8, (int32_t)curr_y * 16, WHITE, BLACK); curr_x++; write_serial(c); } -inline void print_string(const char* s) +void print_string(const char* s) { for (size_t i = 0; i < strlen(s); i++) { print_char(s[i]); } } -inline void print_int(uint64_t num) +void print_int(uint64_t num) { char a[100]; itos(num, a); print_string(a); } -inline void print_hex(uint64_t num) +void print_hex(uint64_t num) { char a[100]; itoh(num, a); diff --git a/kernel/src/mem/paging.c b/kernel/src/mem/paging.c index f714f66..d84c983 100644 --- a/kernel/src/mem/paging.c +++ b/kernel/src/mem/paging.c @@ -35,10 +35,10 @@ void map_addr(uint64_t virt, uint64_t phys, uint32_t flags) pt_lvl2 = (uint64_t*)kalloc(4096); pt_lvl3[pt_lvl3_i] = ((uint64_t)pt_lvl2 - KERNEL_VMA) | flags; } else { - pt_lvl2 -= (uint64_t)pt_lvl2 % 4096; + pt_lvl2 = (uint64_t*)((uint64_t)pt_lvl2 - (uint64_t)pt_lvl2 % 4096); } - pt_lvl2[pt_lvl2_i] = virt | flags; + pt_lvl2[pt_lvl2_i] = phys | flags | FLAG_HUGE; } void init_paging(void) diff --git a/kernel/src/misc/graphics.c b/kernel/src/misc/graphics.c index c899978..9c8dc9a 100644 --- a/kernel/src/misc/graphics.c +++ b/kernel/src/misc/graphics.c @@ -6,14 +6,14 @@ #include <libk/string.h> #include <libk/math.h> -fb_t main_fb; +volatile fb_t main_fb; -uint32_t* pixel_offset(fb_t fb, uint32_t x, uint32_t y) +uint32_t* pixel_offset(volatile fb_t fb, uint32_t x, uint32_t y) { return (uint32_t*)((char*)fb.addr + y * fb.pitch + x * fb.bpp / 8); } -void fb_draw_pixel(fb_t fb, int32_t x, int32_t y, uint32_t col) +void fb_draw_pixel(volatile fb_t fb, int32_t x, int32_t y, uint32_t col) { if (x < 0 || y < 0) return; if (x >= (int32_t)fb.width || y >= (int32_t)fb.height) return; @@ -24,7 +24,7 @@ void fb_draw_pixel(fb_t fb, int32_t x, int32_t y, uint32_t col) /* https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm */ -void fb_draw_line_low(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col) +void fb_draw_line_low(volatile fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col) { int32_t dx = x1 - x0; int32_t dy = y1 - y0; @@ -48,7 +48,7 @@ void fb_draw_line_low(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, u } -void fb_draw_line_high(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col) +void fb_draw_line_high(volatile fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col) { int32_t dx = x1 - x0; int32_t dy = y1 - y0; @@ -71,7 +71,7 @@ void fb_draw_line_high(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, } } -void fb_draw_line(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col) +void fb_draw_line(volatile fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col) { if (abs(y1 - y0) < abs(x1 - x0)) { if (x0 > x1) @@ -86,7 +86,7 @@ void fb_draw_line(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint3 } } -void fb_draw_character(fb_t fb, char c, int32_t x, int32_t y, uint32_t char_col, uint32_t bg_col) +void fb_draw_character(volatile fb_t fb, char c, int32_t x, int32_t y, uint32_t char_col, uint32_t bg_col) { if (c < 0) return; @@ -104,7 +104,7 @@ void fb_draw_character(fb_t fb, char c, int32_t x, int32_t y, uint32_t char_col, } } -void fb_draw_string(fb_t fb, const char* s, int32_t x, int32_t y, uint32_t char_col, uint32_t bg_col) +void fb_draw_string(volatile fb_t fb, const char* s, int32_t x, int32_t y, uint32_t char_col, uint32_t bg_col) { for (size_t i = 0; i < strlen(s); i++) { fb_draw_character(fb, s[i], (x + (int32_t)i * 8), y, char_col, bg_col); |
