diff options
Diffstat (limited to 'src/arch/amd64/fb.c')
-rw-r--r-- | src/arch/amd64/fb.c | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/src/arch/amd64/fb.c b/src/arch/amd64/fb.c index f27b890..07847e5 100644 --- a/src/arch/amd64/fb.c +++ b/src/arch/amd64/fb.c @@ -3,8 +3,12 @@ #include <stdint.h> #include <stddef.h> -#define PREFERRED_VY 4096 -#define PREFERRED_B 32 +#define INDEX 0x1CE +#define DATA 0x1CF +#define FB_ADDR 0xE0000000 + +#define PREFERRED_VY 4096 +#define PREFERRED_B 32 uint16_t fb_res_x = 0; uint16_t fb_res_y = 0; @@ -14,36 +18,36 @@ uint8_t *fb_buffer = NULL; int fb_init(uint16_t res_x, uint16_t res_y) { - outw(0x1CE, 0x00); - uint16_t i = inw(0x1CF); + outw(INDEX, 0x00); + uint16_t i = inw(DATA); if (i < 0xB0C0 || i > 0xB0C6) { return -1; } - outw(0x1CF, 0xB0C4); - i = inw(0x1CF); + outw(DATA, 0xB0C4); + i = inw(DATA); /* Disable VBE */ - outw(0x1CE, 0x04); - outw(0x1CF, 0x00); + outw(INDEX, 0x04); + outw(DATA, 0x00); /* Set X resolution to 1024 */ - outw(0x1CE, 0x01); - outw(0x1CF, res_x); + outw(INDEX, 0x01); + outw(DATA, res_x); /* Set Y resolution to 768 */ - outw(0x1CE, 0x02); - outw(0x1CF, res_y); + outw(INDEX, 0x02); + outw(DATA, res_y); /* Set bpp to 32 */ - outw(0x1CE, 0x03); - outw(0x1CF, PREFERRED_B); + outw(INDEX, 0x03); + outw(DATA, PREFERRED_B); /* Set Virtual Height to stuff */ - outw(0x1CE, 0x07); - outw(0x1CF, PREFERRED_VY); + outw(INDEX, 0x07); + outw(DATA, PREFERRED_VY); /* Re-enable VBE */ - outw(0x1CE, 0x04); - outw(0x1CF, 0x41); + outw(INDEX, 0x04); + outw(DATA, 0x41); uint32_t * text_vid_mem = (uint32_t *)0xA0000; text_vid_mem[0] = 0xA5ADFACE; - for (uintptr_t fb_offset = 0xE0000000; fb_offset < 0xFF000000; fb_offset += 0x01000000) { + 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 |