aboutsummaryrefslogtreecommitdiff
path: root/kernel/kernel-bootstrap.asm
blob: 8af356561bebb6ee867cbb70603d00042ca5dab6 (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
58
59
60
61
62
63
bits 32                   ; nasm 32-bit mode
section .text

                          ; multiboot header
align 4
dd 0x1BADB002
dd 0x00
dd - (0x1BADB002 + 0x00)  ; checksum

global flush_gdt
global read_port
global write_port
global load_idt
global keyboard_handler
global start

extern kernel_entrypoint
extern handle_keypress
extern gdt_pointer

flush_gdt:
	lgdt [gdt_pointer]
	mov ax, 0x10
	mov ds, ax
	mov es, ax
	mov fs, ax
	mov gs, ax
	mov ss, ax
	jmp 0x08:flush
flush:
  ret

read_port:
	mov edx, [esp + 4]
	in al, dx	
	ret

write_port:
	mov edx, [esp + 4]    
	mov al, [esp + 4 + 4]  
	out dx, al  
	ret

load_idt:
	mov edx, [esp + 4]
	lidt [edx]
	sti
	ret

keyboard_handler:                 
	call handle_keypress
	iretd


start:
  cli
  mov esp, stack_space
  call kernel_entrypoint
  hlt

section .bss
resb 8192
stack_space: