X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Farch%2Fx86%2Fmain.c;h=93470a443abbc361f55c5dabb4740d3c701f4341;hb=2cf950e5ea8ce43f45019db21b2b811cfa583e17;hp=8b85d06324715ade865b439bd9c29da092a22d31;hpb=82595a34a73b4667a98349cceeb17f618bd41282;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/arch/x86/main.c b/KernelLand/Kernel/arch/x86/main.c index 8b85d063..93470a44 100644 --- a/KernelLand/Kernel/arch/x86/main.c +++ b/KernelLand/Kernel/arch/x86/main.c @@ -9,6 +9,7 @@ #include #include #include +#include #define VGA_ERRORS 0 @@ -23,6 +24,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 +53,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; } @@ -72,7 +88,7 @@ int kmain(Uint MbMagic, void *MbInfoPtr) MbMagic, MULTIBOOT_MAGIC, MULTIBOOT2_MAGIC); return 0; } - + // Set up physical memory manager MM_Install(nPMemMapEnts, pmemmap);