aboutsummaryrefslogtreecommitdiff
path: root/src/boot
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2021-04-26 12:37:34 +0200
committerLoic Guegan <manzerbredes@mailbox.org>2021-04-26 12:37:34 +0200
commit9dc527b3be9d493dcf8cf1baf78477373eb5990d (patch)
tree0b32c28e57fc5a6a3e6210d9a601dfdbfe246cd8 /src/boot
parent7db6db5ae64e7ab2626bbd898c63f58e053dc1a6 (diff)
Enable psf font for framebuffer display
Diffstat (limited to 'src/boot')
-rw-r--r--src/boot/boot.S9
-rw-r--r--src/boot/multiboot2.cc9
-rw-r--r--src/boot/multiboot2.hpp19
3 files changed, 36 insertions, 1 deletions
diff --git a/src/boot/boot.S b/src/boot/boot.S
index 029a67e..7f12eed 100644
--- a/src/boot/boot.S
+++ b/src/boot/boot.S
@@ -35,6 +35,15 @@ mb_header_start:
.int 12
.int _start
# ----------- End tag
+# ----------- Ask framebuffer tag
+.align 8
+.short 5
+.short 1
+.int 20
+.int 0
+.int 0
+.int 0
+# ----------- End framebuffer
.align 8
.int 0x0
.int 0x8
diff --git a/src/boot/multiboot2.cc b/src/boot/multiboot2.cc
index 1b661b8..d1a912d 100644
--- a/src/boot/multiboot2.cc
+++ b/src/boot/multiboot2.cc
@@ -52,4 +52,13 @@ char mb2_find_old_rsdp(u32* mb2_info_addr, u64 *return_addr, u32 *return_size){
return 1;
}
return 0;
+}
+
+char mb2_find_framebuffer(u32* mb2_info_addr, FRAMEBUFFER *fb){
+ u32* addr=mb2_find_tag(mb2_info_addr,8);
+ if(addr){
+ memcpy(addr, fb, sizeof(FRAMEBUFFER));
+ return 1;
+ }
+ return 0;
} \ No newline at end of file
diff --git a/src/boot/multiboot2.hpp b/src/boot/multiboot2.hpp
index da12e5f..cc28109 100644
--- a/src/boot/multiboot2.hpp
+++ b/src/boot/multiboot2.hpp
@@ -2,7 +2,24 @@
#include "core/types.hpp"
+typedef struct TAG_HEADER {
+ u32 type;
+ u32 size;
+}__attribute__((packed)) TAG_HEADER;
+
+typedef struct FRAMEBUFFER {
+ TAG_HEADER header;
+ u64 addr;
+ u32 pitch;
+ u32 width;
+ u32 height;
+ u8 bpp;
+ u8 type;
+ u64 color_info_addr;
+} __attribute__((packed)) FRAMEBUFFER;
+
u32* mb2_find_tag(u32 *mb2_info_addr, char type);
char mb2_find_bootloader_name(u32* mb2_info_addr, char *return_name);
char mb2_find_new_rsdp(u32* mb2_info_addr, u64 *return_addr, u32 *return_size);
-char mb2_find_old_rsdp(u32* mb2_info_addr, u64 *return_addr, u32 *return_size); \ No newline at end of file
+char mb2_find_old_rsdp(u32* mb2_info_addr, u64 *return_addr, u32 *return_size);
+char mb2_find_framebuffer(u32* mb2_info_addr, FRAMEBUFFER *fb); \ No newline at end of file