281 lines
8.5 KiB
Nim
281 lines
8.5 KiB
Nim
|
## multiboot.h - Multiboot header file.
|
||
|
## Copyright (C) 1999,2003,2007,2008,2009,2010 Free Software Foundation, Inc.
|
||
|
##
|
||
|
## Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
## of this software and associated documentation files (the "Software"), to
|
||
|
## deal in the Software without restriction, including without limitation the
|
||
|
## rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||
|
## sell copies of the Software, and to permit persons to whom the Software is
|
||
|
## furnished to do so, subject to the following conditions:
|
||
|
##
|
||
|
## The above copyright notice and this permission notice shall be included in
|
||
|
## all copies or substantial portions of the Software.
|
||
|
##
|
||
|
## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ANY
|
||
|
## DEVELOPER OR DISTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||
|
## WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
||
|
## IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
|
##
|
||
|
|
||
|
## How many bytes from the start of the file we search for the header.
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_SEARCH* = 8192
|
||
|
MULTIBOOT_HEADER_ALIGN* = 4
|
||
|
|
||
|
## The magic field should contain this.
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_HEADER_MAGIC* = 0x1BADB002
|
||
|
|
||
|
## This should be in %eax.
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_BOOTLOADER_MAGIC* = 0x2BADB002
|
||
|
|
||
|
## Alignment of multiboot modules.
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_MOD_ALIGN* = 0x00001000
|
||
|
|
||
|
## Alignment of the multiboot info structure.
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_INFO_ALIGN* = 0x00000004
|
||
|
|
||
|
## Flags set in the 'flags' member of the multiboot header.
|
||
|
## Align all boot modules on i386 page (4KB) boundaries.
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_PAGE_ALIGN* = 0x00000001
|
||
|
|
||
|
## Must pass memory information to OS.
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_MEMORY_INFO* = 0x00000002
|
||
|
|
||
|
## Must pass video information to OS.
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_VIDEO_MODE* = 0x00000004
|
||
|
|
||
|
## This flag indicates the use of the address fields in the header.
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_AOUT_KLUDGE* = 0x00010000
|
||
|
|
||
|
## Flags to be set in the 'flags' member of the multiboot info structure.
|
||
|
## is there basic lower/upper memory information?
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_INFO_MEMORY* = 0x00000001
|
||
|
|
||
|
## is there a boot device set?
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_INFO_BOOTDEV* = 0x00000002
|
||
|
|
||
|
## is the command-line defined?
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_INFO_CMDLINE* = 0x00000004
|
||
|
|
||
|
## are there modules to do something with?
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_INFO_MODS* = 0x00000008
|
||
|
|
||
|
## These next two are mutually exclusive
|
||
|
## is there a symbol table loaded?
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_INFO_AOUT_SYMS* = 0x00000010
|
||
|
|
||
|
## is there an ELF section header table?
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_INFO_ELF_SHDR* = 0x00000020
|
||
|
|
||
|
## is there a full memory map?
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_INFO_MEM_MAP* = 0x00000040
|
||
|
|
||
|
## Is there drive info?
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_INFO_DRIVE_INFO* = 0x00000080
|
||
|
|
||
|
## Is there a config table?
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_INFO_CONFIG_TABLE* = 0x00000100
|
||
|
|
||
|
## Is there a boot loader name?
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_INFO_BOOT_LOADER_NAME* = 0x00000200
|
||
|
|
||
|
## Is there a APM table?
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_INFO_APM_TABLE* = 0x00000400
|
||
|
|
||
|
## Is there video information?
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_INFO_VBE_INFO* = 0x00000800
|
||
|
MULTIBOOT_INFO_FRAMEBUFFER_INFO* = 0x00001000
|
||
|
|
||
|
when not defined(ASM_FILE):
|
||
|
type
|
||
|
multiboot_uint8_t* = cuchar
|
||
|
multiboot_uint16_t* = cushort
|
||
|
multiboot_uint32_t* = cuint
|
||
|
multiboot_uint64_t* = culonglong
|
||
|
type
|
||
|
multiboot_header* {.bycopy.} = object
|
||
|
magic*: multiboot_uint32_t ## Must be MULTIBOOT_MAGIC - see above.
|
||
|
## Feature flags.
|
||
|
flags*: multiboot_uint32_t ## The above fields plus this one must equal 0 mod 2^32.
|
||
|
checksum*: multiboot_uint32_t ## These are only valid if MULTIBOOT_AOUT_KLUDGE is set.
|
||
|
header_addr*: multiboot_uint32_t
|
||
|
load_addr*: multiboot_uint32_t
|
||
|
load_end_addr*: multiboot_uint32_t
|
||
|
bss_end_addr*: multiboot_uint32_t
|
||
|
entry_addr*: multiboot_uint32_t ## These are only valid if MULTIBOOT_VIDEO_MODE is set.
|
||
|
mode_type*: multiboot_uint32_t
|
||
|
width*: multiboot_uint32_t
|
||
|
height*: multiboot_uint32_t
|
||
|
depth*: multiboot_uint32_t
|
||
|
|
||
|
|
||
|
## The symbol table for a.out.
|
||
|
type
|
||
|
multiboot_aout_symbol_table* {.bycopy.} = object
|
||
|
tabsize*: multiboot_uint32_t
|
||
|
strsize*: multiboot_uint32_t
|
||
|
`addr`*: multiboot_uint32_t
|
||
|
reserved*: multiboot_uint32_t
|
||
|
|
||
|
type
|
||
|
multiboot_aout_symbol_table_t* = multiboot_aout_symbol_table
|
||
|
|
||
|
## The section header table for ELF.
|
||
|
type
|
||
|
multiboot_elf_section_header_table* {.bycopy.} = object
|
||
|
num*: multiboot_uint32_t
|
||
|
size*: multiboot_uint32_t
|
||
|
`addr`*: multiboot_uint32_t
|
||
|
shndx*: multiboot_uint32_t
|
||
|
|
||
|
type
|
||
|
multiboot_elf_section_header_table_t* = multiboot_elf_section_header_table
|
||
|
type
|
||
|
INNER_C_UNION_181031587* {.bycopy.} = object {.union.}
|
||
|
aout_sym*: multiboot_aout_symbol_table_t
|
||
|
elf_sec*: multiboot_elf_section_header_table_t
|
||
|
|
||
|
type
|
||
|
INNER_C_STRUCT_3866696476* {.bycopy.} = object
|
||
|
framebuffer_palette_addr*: multiboot_uint32_t
|
||
|
framebuffer_palette_num_colors*: multiboot_uint16_t
|
||
|
|
||
|
type
|
||
|
INNER_C_STRUCT_1103324769* {.bycopy.} = object
|
||
|
framebuffer_red_field_position*: multiboot_uint8_t
|
||
|
framebuffer_red_mask_size*: multiboot_uint8_t
|
||
|
framebuffer_green_field_position*: multiboot_uint8_t
|
||
|
framebuffer_green_mask_size*: multiboot_uint8_t
|
||
|
framebuffer_blue_field_position*: multiboot_uint8_t
|
||
|
framebuffer_blue_mask_size*: multiboot_uint8_t
|
||
|
|
||
|
type
|
||
|
INNER_C_UNION_2305456475* {.bycopy.} = object {.union.}
|
||
|
ano_2282080798*: INNER_C_STRUCT_3866696476
|
||
|
ano_3054406492*: INNER_C_STRUCT_1103324769
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED* = 0
|
||
|
MULTIBOOT_FRAMEBUFFER_TYPE_RGB* = 1
|
||
|
MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT* = 2
|
||
|
type
|
||
|
multiboot_info* {.bycopy.} = object
|
||
|
flags*: multiboot_uint32_t ## Multiboot info version number
|
||
|
## Available memory from BIOS
|
||
|
mem_lower*: multiboot_uint32_t
|
||
|
mem_upper*: multiboot_uint32_t ## "root" partition
|
||
|
boot_device*: multiboot_uint32_t ## Kernel command line
|
||
|
cmdline*: multiboot_uint32_t ## Boot-Module list
|
||
|
mods_count*: multiboot_uint32_t
|
||
|
mods_addr*: multiboot_uint32_t
|
||
|
u*: INNER_C_UNION_181031587 ## Memory Mapping buffer
|
||
|
mmap_length*: multiboot_uint32_t
|
||
|
mmap_addr*: multiboot_uint32_t ## Drive Info buffer
|
||
|
drives_length*: multiboot_uint32_t
|
||
|
drives_addr*: multiboot_uint32_t ## ROM configuration table
|
||
|
config_table*: multiboot_uint32_t ## Boot Loader Name
|
||
|
boot_loader_name*: multiboot_uint32_t ## APM table
|
||
|
apm_table*: multiboot_uint32_t ## Video
|
||
|
vbe_control_info*: multiboot_uint32_t
|
||
|
vbe_mode_info*: multiboot_uint32_t
|
||
|
vbe_mode*: multiboot_uint16_t
|
||
|
vbe_interface_seg*: multiboot_uint16_t
|
||
|
vbe_interface_off*: multiboot_uint16_t
|
||
|
vbe_interface_len*: multiboot_uint16_t
|
||
|
framebuffer_addr*: multiboot_uint64_t
|
||
|
framebuffer_pitch*: multiboot_uint32_t
|
||
|
framebuffer_width*: multiboot_uint32_t
|
||
|
framebuffer_height*: multiboot_uint32_t
|
||
|
framebuffer_bpp*: multiboot_uint8_t
|
||
|
framebuffer_type*: multiboot_uint8_t
|
||
|
ano_3062667995*: INNER_C_UNION_2305456475
|
||
|
|
||
|
type
|
||
|
multiboot_info_t* = multiboot_info
|
||
|
type
|
||
|
multiboot_color* {.bycopy.} = object
|
||
|
red*: multiboot_uint8_t
|
||
|
green*: multiboot_uint8_t
|
||
|
blue*: multiboot_uint8_t
|
||
|
|
||
|
const
|
||
|
MULTIBOOT_MEMORY_AVAILABLE* = 1
|
||
|
MULTIBOOT_MEMORY_RESERVED* = 2
|
||
|
MULTIBOOT_MEMORY_ACPI_RECLAIMABLE* = 3
|
||
|
MULTIBOOT_MEMORY_NVS* = 4
|
||
|
MULTIBOOT_MEMORY_BADRAM* = 5
|
||
|
type
|
||
|
multiboot_mmap_entry* {.bycopy,packed.} = object
|
||
|
size*: multiboot_uint32_t
|
||
|
`addr`*: multiboot_uint64_t
|
||
|
len*: multiboot_uint64_t
|
||
|
`type`*: multiboot_uint32_t
|
||
|
|
||
|
type
|
||
|
multiboot_memory_map_t* = multiboot_mmap_entry
|
||
|
type
|
||
|
multiboot_mod_list* {.bycopy.} = object
|
||
|
mod_start*: multiboot_uint32_t ## the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive
|
||
|
mod_end*: multiboot_uint32_t ## Module command line
|
||
|
cmdline*: multiboot_uint32_t ## padding to take it to 16 bytes (must be zero)
|
||
|
pad*: multiboot_uint32_t
|
||
|
|
||
|
type
|
||
|
multiboot_module_t* = multiboot_mod_list
|
||
|
|
||
|
## APM BIOS info.
|
||
|
type
|
||
|
multiboot_apm_info* {.bycopy.} = object
|
||
|
version*: multiboot_uint16_t
|
||
|
cseg*: multiboot_uint16_t
|
||
|
offset*: multiboot_uint32_t
|
||
|
cseg_16*: multiboot_uint16_t
|
||
|
dseg*: multiboot_uint16_t
|
||
|
flags*: multiboot_uint16_t
|
||
|
cseg_len*: multiboot_uint16_t
|
||
|
cseg_16_len*: multiboot_uint16_t
|
||
|
dseg_len*: multiboot_uint16_t
|