12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- 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.
|