diff options
author | Freya Murphy <freya@freyacat.org> | 2024-01-30 12:16:22 -0500 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2024-01-30 12:17:47 -0500 |
commit | e76cbbcb327e0966fff47a645cdbc26e27a4bc8a (patch) | |
tree | 8850bb6be51e5cedb9c7ff89e047d21deec84fdf /src/arch/amd64/fb.c | |
parent | added backtraces (diff) | |
download | corn-e76cbbcb327e0966fff47a645cdbc26e27a4bc8a.tar.gz corn-e76cbbcb327e0966fff47a645cdbc26e27a4bc8a.tar.bz2 corn-e76cbbcb327e0966fff47a645cdbc26e27a4bc8a.zip |
make paging more stable
Diffstat (limited to 'src/arch/amd64/fb.c')
-rw-r--r-- | src/arch/amd64/fb.c | 63 |
1 files changed, 37 insertions, 26 deletions
diff --git a/src/arch/amd64/fb.c b/src/arch/amd64/fb.c index 07847e5..0cd5b4f 100644 --- a/src/arch/amd64/fb.c +++ b/src/arch/amd64/fb.c @@ -1,11 +1,16 @@ -#include "bindings.h" - +#include <lib.h> +#include <memory.h> +#include <serial.h> #include <stdint.h> #include <stddef.h> +#include "bindings.h" + #define INDEX 0x1CE #define DATA 0x1CF #define FB_ADDR 0xE0000000 +#define FB_MAX 0xFF000000 +#define FB_LEN (FB_MAX - FB_ADDR) #define PREFERRED_VY 4096 #define PREFERRED_B 32 @@ -44,29 +49,35 @@ int fb_init(uint16_t res_x, uint16_t res_y) { outw(INDEX, 0x04); outw(DATA, 0x41); - uint32_t * text_vid_mem = (uint32_t *)0xA0000; - text_vid_mem[0] = 0xA5ADFACE; - - for (uintptr_t fb_offset = FB_ADDR; fb_offset < 0xFF000000; fb_offset += 0x01000000) { - /* Enable the higher memory */ - for (uintptr_t i = fb_offset; i < fb_offset; i += 0x1000) { - // todo ident map fb - } - - /* Go find it */ - for (uintptr_t x = fb_offset; x < fb_offset + 0xFF0000; x += 0x1000) { - if (((uintptr_t *)x)[0] == 0xA5ADFACE) { - fb_buffer = (uint8_t *) x; - goto mem_found; - } - } - } - -mem_found: - - fb_res_x = res_x; - fb_res_y = res_y; - fb_res_b = PREFERRED_B; - +// uint32_t * text_vid_mem = (uint32_t *)0xA0000; +// text_vid_mem[0] = 0xA5ADFACE; +// +// void *temp = mmap((void *) FB_ADDR, 0xFF1000); +// +// for (uintptr_t fb_offset = FB_ADDR; fb_offset < FB_MAX; fb_offset += 0x01000000) { +// /* Enable the higher memory */ +// remap(temp, (void *)fb_offset, 0xFF1000); +// +// /* Go find it */ +// for (uintptr_t offset = 0; offset < 0xFF0000; offset += 0x1000) { +// uintptr_t x = (uintptr_t)temp + offset; +// if (((uintptr_t *)x)[0] == 0xA5ADFACE) { +// fb_buffer = (uint8_t *) (fb_offset + offset); +// goto mem_found; +// } +// } +// } +// +// unmap(temp); +// +//mem_found: +// +// fb_res_x = res_x; +// fb_res_y = res_y; +// fb_res_b = PREFERRED_B; +// +// fb_buffer = mmap(fb_buffer, 0xFF0000); +// memset(fb_buffer, 7, 0xFF0000); +// return 0; } |