+ ; Multiboot macros to make a few lines later more readable
+ MULTIBOOT_PAGE_ALIGN equ 1<<0
+ MULTIBOOT_MEMORY_INFO equ 1<<1
+ MULTIBOOT_AOUT_KLUDGE equ 1<<16
+ MULTIBOOT_HEADER_MAGIC equ 0x1BADB002
+ MULTIBOOT_HEADER_FLAGS equ MULTIBOOT_PAGE_ALIGN | MULTIBOOT_MEMORY_INFO; | MULTIBOOT_AOUT_KLUDGE
+ MULTIBOOT_CHECKSUM equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
+
+ ; This is the GRUB Multiboot header. A boot signature
+ dd MULTIBOOT_HEADER_MAGIC
+ dd MULTIBOOT_HEADER_FLAGS
+ dd MULTIBOOT_CHECKSUM
+ [extern __load_addr]
+ [extern __bss_start]
+ [extern gKernelEnd]
+ ; a.out kludge
+ dd mboot ; Location of Multiboot Header
+ dd __load_addr ; Load address
+ dd __bss_start - KERNEL_BASE ; End of .data
+ dd gKernelEnd - KERNEL_BASE ; End of .bss (and kernel)
+ dd start - KERNEL_BASE ; Entrypoint