summaryrefslogtreecommitdiff
path: root/platform/boot.s
blob: d5bfda501465b2ab57abb7235068aeebdc07b616 (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
.set MAGIC, 0x1BADB002
.set FLAG_ALIGN,   1<<0 /* align modules on page boundaries */
.set FLAG_MEMINFO, 1<<1 /* memory map */
.set FLAGS,        FLAG_ALIGN | FLAG_MEMINFO
.set CHECKSUM, -(MAGIC + FLAGS)

.section .multiboot
.align 4
.long MAGIC
.long FLAGS
.long CHECKSUM

/* a lil stack */
.section .bss
.global stack_top
.type stack_top, @object
.align 16
stack_bottom:
.skip 16384
stack_top:


.section .text
.global _start
.type _start, @function
_start:
	mov $stack_top, %esp
	call kmain

.global halt_cpu
.type halt_cpu, @function
halt_cpu:
	cli
1:	hlt
	jmp 1b

// temporary, will be moved to another file soon
.global change_cs
.type change_cs, @function
change_cs:
	/* retf pops off the return address and code segment off the stack.
	 * it turns out that in the i386 cdecl calling convention they're in
	 * the correct place already.
	 */
	retf

.size _start, . - _start