diff options
Diffstat (limited to 'src/boot')
| -rw-r--r-- | src/boot/boot.S | 9 | ||||
| -rw-r--r-- | src/boot/multiboot2.cc | 9 | ||||
| -rw-r--r-- | src/boot/multiboot2.hpp | 19 |
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 |
