From 3b7ea9f98f32f0ca3a38f1667e544f29bf52efea Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sat, 21 Dec 2013 15:36:52 +0800 Subject: [PATCH] Kernel/x86 - Hacky multiboot->VESA hook --- KernelLand/Kernel/arch/x86/main.c | 15 +++++++++++++++ KernelLand/Kernel/arch/x86/start.asm | 8 ++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/KernelLand/Kernel/arch/x86/main.c b/KernelLand/Kernel/arch/x86/main.c index 8b85d063..822bf70b 100644 --- a/KernelLand/Kernel/arch/x86/main.c +++ b/KernelLand/Kernel/arch/x86/main.c @@ -23,6 +23,8 @@ extern void MM_Install(int NPMemRanges, tPMemMapEnt *PMemRanges); extern void MM_InstallVirtual(void); extern int Time_Setup(void); extern int ACPICA_Initialise(void); +// - Modules/Display/VESA +extern void VBE_int_SetBootMode(Uint16 ModeID, const void *ModeInfo); // === PROTOTYPES === int kmain(Uint MbMagic, void *MbInfoPtr); @@ -50,13 +52,26 @@ int kmain(Uint MbMagic, void *MbInfoPtr) // Multiboot 1 case MULTIBOOT_MAGIC: { // TODO: Handle when this isn't in the mapped area + ASSERT( mbInfo->CommandLine < 4*1024*1024 ); gsBootCmdLine = (char*)(mbInfo->CommandLine + KERNEL_BASE); // Adjust Multiboot structure address mbInfo = (void*)( (tVAddr)MbInfoPtr + KERNEL_BASE ); + // Parse memory map + // - mbInfo->Flags is checked in this function nPMemMapEnts = Multiboot_LoadMemoryMap(mbInfo, KERNEL_BASE, pmemmap, MAX_PMEMMAP_ENTS, KERNEL_LOAD, (tVAddr)&gKernelEnd - KERNEL_BASE); + + + // Get video mode + Debug("mbInfo->Flags = 0x%x", mbInfo->Flags); + if( mbInfo->Flags & (1 << 11) ) + { + // TODO: Ensure address is in mapped area + ASSERT( mbInfo->vbe_mode_info < 4*1024*1024 ); + VBE_int_SetBootMode(mbInfo->vbe_mode, (void*)(mbInfo->vbe_mode_info + KERNEL_BASE)); + } break; } diff --git a/KernelLand/Kernel/arch/x86/start.asm b/KernelLand/Kernel/arch/x86/start.asm index 649c2217..18b9f5f8 100644 --- a/KernelLand/Kernel/arch/x86/start.asm +++ b/KernelLand/Kernel/arch/x86/start.asm @@ -30,10 +30,10 @@ mboot: dd 0 ; bss_end_addr dd 0 ; entry_addr -; dd 0 ; Mode type (0: LFB) -; dd 1024 ; Width -; dd 768 ; Height -; dd 0 ; Depth (no preference) + dd 0 ; Mode type (0: LFB) + dd 0 ; Width (no preference) + dd 0 ; Height (no preference) + dd 32 ; Depth (32-bit preferred) ; Multiboot 2 Header ;mboot2: -- 2.20.1