summaryrefslogtreecommitdiff
path: root/kernel/src/misc
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/misc')
-rw-r--r--kernel/src/misc/debug.c2
-rw-r--r--kernel/src/misc/graphics.c33
2 files changed, 20 insertions, 15 deletions
diff --git a/kernel/src/misc/debug.c b/kernel/src/misc/debug.c
index 2a940d3..d244d7a 100644
--- a/kernel/src/misc/debug.c
+++ b/kernel/src/misc/debug.c
@@ -1,3 +1,5 @@
+#include <debug.h>
+
void bochs_breakpoint(void)
{
__asm__ volatile ("xchgw %bx, %bx;");
diff --git a/kernel/src/misc/graphics.c b/kernel/src/misc/graphics.c
index 488e4fa..5cb11bf 100644
--- a/kernel/src/misc/graphics.c
+++ b/kernel/src/misc/graphics.c
@@ -1,19 +1,22 @@
#include <types.h>
+#include <graphics.h>
#include <multiboot2.h>
-#include <graphics.h>
#include <font.h>
#include <libk/string.h>
#include <libk/math.h>
-uint64_t* pixel_offset(fb_t fb, uint32_t x, uint32_t y)
+fb_t main_fb;
+
+uint64_t* pixel_offset(fb_t fb, int32_t x, int32_t y)
{
- return (uint64_t*)((char*)fb.addr + y * fb.pitch + x * fb.bpp / 8);
+ return (uint64_t*)((char*)fb.addr + y * (int32_t)fb.pitch + x * fb.bpp / 8);
}
-void fb_draw_pixel(fb_t fb, uint32_t x, uint32_t y, uint32_t col)
+void fb_draw_pixel(fb_t fb, int32_t x, int32_t y, uint32_t col)
{
- if (x >= fb.width || y >= fb.height) return;
+ if (x < 0 || y < 0) return;
+ if (x >= (int32_t)fb.width || y >= (int32_t)fb.height) return;
uint32_t* fb_offset = (uint32_t*)pixel_offset(fb, x, y);
*fb_offset = col;
@@ -21,7 +24,7 @@ void fb_draw_pixel(fb_t fb, uint32_t x, uint32_t y, uint32_t col)
/* https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm */
-void fb_draw_line_low(fb_t fb, uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, 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)
{
int32_t dx = x1 - x0;
int32_t dy = y1 - y0;
@@ -45,7 +48,7 @@ void fb_draw_line_low(fb_t fb, uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y
}
-void fb_draw_line_high(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_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)
{
int32_t dx = x1 - x0;
int32_t dy = y1 - y0;
@@ -68,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, int32_t col)
+void fb_draw_line(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)
@@ -83,14 +86,14 @@ void fb_draw_line(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32
}
}
-void fb_draw_character(fb_t fb, char c, uint32_t x, uint32_t y, uint32_t char_col, uint32_t bg_col)
+void fb_draw_character(fb_t fb, char c, int32_t x, int32_t y, uint32_t char_col, uint32_t bg_col)
{
if (c < 0) return;
- uint32_t offset = 32 + c * 16;
- for (uint32_t i = 0 ; i < 16; i++)
+ int32_t offset = 32 + c * 16;
+ for (int32_t i = 0 ; i < 16; i++)
{
- for (uint32_t j = 0 ; j < 8; j++)
+ for (int32_t j = 0 ; j < 8; j++)
{
if (font[offset + i] & (1 << (7 - j))) {
fb_draw_pixel(fb, x + j, y + i, char_col);
@@ -101,9 +104,9 @@ void fb_draw_character(fb_t fb, char c, uint32_t x, uint32_t y, uint32_t char_co
}
}
-void fb_draw_string(fb_t fb, const char* s, uint32_t x, uint32_t y, uint32_t char_col, uint32_t bg_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)
{
- for (uint32_t i = 0; i < strlen(s); i++) {
- fb_draw_character(fb, s[i], x + i * 8, y, char_col, 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);
}
}