summaryrefslogtreecommitdiff
path: root/util/extensions/legacybios/arch/x86/mboot.S
blob: 679bfcbc72d2fc19695cd4a0c782f1aa80c42e6b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/* mboot.S 
 * legacybios assembler bootstrap for multiboot
 *
 * Copyright (C) 2003 Stefan Reinauer
 *
 * See the file "COPYING" for further information about
 * the copyright and warranty status of this work.
 */

#define ASM 1
#include <multiboot.h>
	
	.text

	.code32
	.globl	start, _start

	/* unused */
start:
_start:
	jmp	multiboot_entry

	/* Align 32 bits boundary.  */
	.align	4
	
	/* Multiboot header.  */
multiboot_header:
	.long	MULTIBOOT_HEADER_MAGIC /* magic */
	.long	MULTIBOOT_HEADER_FLAGS /* flags */
	.long	-(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) 
	        /* checksum */
	.long	multiboot_header /* header_addr */
	.long	_start /* load_addr */
	.long	_edata /* load_end_addr */
	.long	_end /* bss_end_addr */
	.long	multiboot_entry /* entry_addr */

multiboot_entry:
	/* Initialize stack pointer.  */
	movl	$(stack + STACK_SIZE), %esp

	/* Reset EFLAGS.  */
	pushl	$0
	popf

	/* pointer to multiboot information structure.  */
	pushl	%ebx
	/* magic value.  */
	pushl	%eax

	/* jump to C main function...  */
	call	EXT_C(cmain)

loop:	hlt
	jmp	loop

	.comm	stack, STACK_SIZE /* stack area.  */