{ 
	Include->Multiboot - Multiboot Structures & Access.
	
	@author(Kieron Morris <kjm@kieronmorris.me>)
}
unit multiboot;
 
interface

const
        KERNEL_STACKSIZE = $4000;
        MULTIBOOT_BOOTLOADER_MAGIC = $2BADB002;
 
type
        Pelf_section_header_table_t = ^elf_section_header_table_t;
        elf_section_header_table_t = packed record
          num: uint32;
          size: uint32;
          addr: uint32;
          shndx: uint32;
        end;
 
        Pmultiboot_info_t = ^multiboot_info_t;
        multiboot_info_t = packed record
          flags: uint32;
          mem_lower: uint32;
          mem_upper: uint32;
          boot_device: uint32;
          cmdline: uint32;
          mods_count: uint32;
          mods_addr: uint32;
          elf_sec: elf_section_header_table_t;
          mmap_length: uint32;
          mmap_addr: uint32;
          drives_legnth : uint32;
          drives_addr: uint32;
          config_table : uint32;
          boot_loader_name : uint32;
          apm_table: uint32;
          vbe_control_info : uint32;
          vbe_mode_info : uint32;
          vbe_mode : uint16;
          vbe_interface_seg : uint16;
          vbe_interface_off : uint16;
          vbe_interface_len : uint16;
          framebuffer_addr : uint64;
          framebuffer_pitch : uint32;
          framebuffer_width : uint32;
          framebuffer_height: uint32;
          framebuffer_bpp : uint8;
        end;
 
        Pmodule_t = ^module_t;
        module_t = packed record
          mod_start: uint32;
          mod_end: uint32;
          name: uint32;
          reserved: uint32;
        end;
 
        Pmemory_map_t = ^memory_map_t;
        memory_map_t = packed record
          size: uint32;
		      base_addr : uint64;
		      length : uint64;          
		      mtype: uint32;
        end;
 
var
   multibootinfo  : Pmultiboot_info_t = nil;
   multibootmagic : uint32;

implementation
 
end.
