summaryrefslogtreecommitdiff
path: root/kernel/src
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksav013@gmail.com>2022-09-08 15:09:30 +0200
committerAleksa Vuckovic <aleksav013@gmail.com>2022-09-08 19:43:05 +0200
commit1d673e7e628db462215abcec06641063a6165b9b (patch)
tree07915d1bba39a39afe7cc9dcf9806caf833fc774 /kernel/src
parent82e9f02aef1ea1a6588234ee58e3625e3561005f (diff)
fixed output glitches
Diffstat (limited to 'kernel/src')
-rw-r--r--kernel/src/boot/boot.S2
-rw-r--r--kernel/src/boot/multiboot2.c4
-rw-r--r--kernel/src/devices/disc.c5
-rw-r--r--kernel/src/fs/ext2.c2
-rw-r--r--kernel/src/libk/stdio.c10
-rw-r--r--kernel/src/mem/paging.c4
-rw-r--r--kernel/src/misc/graphics.c16
7 files changed, 19 insertions, 24 deletions
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);