From 5e0e6240ab058c490304e0789552b45160f900be Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Sun, 20 Apr 2025 11:26:32 -0400 Subject: fix term/gpu memory OOB error, add dynamic kernel identity map with N_IDENT_PTS --- kernel/drivers/gpu.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'kernel/drivers/gpu.c') diff --git a/kernel/drivers/gpu.c b/kernel/drivers/gpu.c index 17e7e18..3d79b99 100644 --- a/kernel/drivers/gpu.c +++ b/kernel/drivers/gpu.c @@ -12,20 +12,27 @@ struct gpu *gpu_dev = NULL; int gpu_init(void) { // try to get a gpu device - if (!gpu_dev && gop_init(&gpu_dev) == SUCCESS) { - } - if (!gpu_dev && bochs_init(&gpu_dev) == SUCCESS) { - } + if (gpu_dev == NULL) + gop_init(&gpu_dev); + if (gpu_dev == NULL) + bochs_init(&gpu_dev); // if we did (yay!) resize terminal if (gpu_dev) - term_resize(gpu_dev->width, gpu_dev->height); + term_resize(gpu_dev->width / en_font.width, + gpu_dev->height / en_font.height); return gpu_dev != NULL; } void gpu_set_pixel(uint32_t x, uint32_t y, uint32_t r, uint32_t g, uint32_t b) { + if (gpu_dev == NULL) + return; + + x %= gpu_dev->width; + y %= gpu_dev->height; + // TODO: handle other bpp volatile uint32_t *fb = (volatile uint32_t *)gpu_dev->framebuffer; int offset = y * gpu_dev->width + x; -- cgit v1.2.3-freya