MAGIC	equ  0x600db007			; jsix OS header magic number

section .header
align 4
global _header
_header:
	dd MAGIC			; Kernel header magic
	dw 1				; Header version 1
	dw 16				; Kernel header length
	db VERSION_MAJOR	; Kernel version
	db VERSION_MINOR
	dw VERSION_PATCH
	dd VERSION_GITSHA

section .text
align 16
global _kernel_start:function (_kernel_start.end - _kernel_start)
_kernel_start:
	cli

	mov rsp, idle_stack_end
	mov qword [rsp + 0x00], 0 ; signal end of stack with 0 return address
	mov qword [rsp + 0x08], 0 ; and a few extra entries in case of stack
	mov qword [rsp + 0x10], 0 ; problems
	mov qword [rsp + 0x18], 0

	mov rbp, rsp
	extern kernel_main
	call kernel_main

	; Kernel init is over, wait for the scheduler to
	; take over
.hang:
	hlt
	jmp .hang
.end:

global interrupts_enable
interrupts_enable:
	sti
	ret

global interrupts_disable
interrupts_disable:
	cli
	ret

section .bss
align 0x100
idle_stack_begin:
	resb 0x4000 ; 16KiB stack space

global idle_stack_end
idle_stack_end:
	resq 4
