|
@@ -0,0 +1,85 @@
|
|
|
+unit multiboot;
|
|
|
+
|
|
|
+interface
|
|
|
+
|
|
|
+type
|
|
|
+ PMBModule = ^TMBModule;
|
|
|
+ TMBModule = packed record
|
|
|
+ mod_start,
|
|
|
+ mod_end: PtrUInt;
|
|
|
+ name: pchar;
|
|
|
+ reserved: DWord;
|
|
|
+ end;
|
|
|
+
|
|
|
+ PMemoryMap = ^TMemoryMap;
|
|
|
+ TMemoryMap = packed record
|
|
|
+ size,
|
|
|
+ base_lower,
|
|
|
+ base_upper,
|
|
|
+ length_lower,
|
|
|
+ length_upper,
|
|
|
+ mtype: DWord;
|
|
|
+ end;
|
|
|
+
|
|
|
+ PElfSectionHeaderTable = ^TElfSectionHeaderTable;
|
|
|
+ TElfSectionHeaderTable = packed record
|
|
|
+ num,
|
|
|
+ size,
|
|
|
+ addr,
|
|
|
+ shndx: DWord;
|
|
|
+ end;
|
|
|
+
|
|
|
+ PMultibootinfo = ^TMultibootinfo;
|
|
|
+ TMultiBootInfo = packed record
|
|
|
+ Flags,
|
|
|
+ MemLower, MemUpper,
|
|
|
+ BootDevice,
|
|
|
+ CmdLine,
|
|
|
+ ModuleCount: DWord;
|
|
|
+ ModuleAddress: PMBModule;
|
|
|
+ ElfSection: TElfSectionHeaderTable;
|
|
|
+ MMapLength: longint;
|
|
|
+ MMapAddress: PMemoryMap;
|
|
|
+ end;
|
|
|
+
|
|
|
+var MultibootTable: PMultibootinfo;
|
|
|
+
|
|
|
+implementation
|
|
|
+
|
|
|
+{$asmmode att}
|
|
|
+
|
|
|
+procedure MultibootHeader; nostackframe; assembler;
|
|
|
+const
|
|
|
+ MULTIBOOT_PAGE_ALIGN = 1; // Align modules on a 4kB boundary
|
|
|
+ MULTIBOOT_MEMORY_INFO = 2; // Memory info table is valid
|
|
|
+ MULTIBOOT_AOUT_KLUDGE = 1 shl 16; // A.OUT kludge follows the header
|
|
|
+
|
|
|
+ MultibootSig = $1BADB002;
|
|
|
+ MultibootFlags = MULTIBOOT_MEMORY_INFO;
|
|
|
+ MultibootChksum = -(MultibootSig + MultibootFlags);
|
|
|
+asm
|
|
|
+ .init
|
|
|
+ .long MultibootSig
|
|
|
+ .long MultibootFlags
|
|
|
+ .long MultibootChksum
|
|
|
+ .text
|
|
|
+end;
|
|
|
+
|
|
|
+procedure haltproc; assembler; nostackframe; public name '_haltproc';
|
|
|
+asm
|
|
|
+.Lloop:
|
|
|
+ jmp .Lloop
|
|
|
+end;
|
|
|
+
|
|
|
+procedure PASCALMAIN; external name 'PASCALMAIN';
|
|
|
+
|
|
|
+procedure Start; assembler; nostackframe; public name '_START';
|
|
|
+asm
|
|
|
+ cli
|
|
|
+
|
|
|
+ movl %ebx, MultibootTable
|
|
|
+
|
|
|
+ jmp PASCALMAIN
|
|
|
+end;
|
|
|
+
|
|
|
+end.
|