]> git.lizzy.rs Git - nyax.git/blob - boot.asm
Initial commit
[nyax.git] / boot.asm
1 [org 0x7C00]
2
3 boot:
4         xor ax, ax
5         mov ds, ax
6         mov es, ax
7         mov fs, ax
8         mov gs, ax
9         mov ss, ax
10
11         mov bp, 0x9000
12         mov sp, bp
13
14         mov ax, booting_msg
15         call print_str
16
17         mov bx, 0xD000
18         mov cl, 2
19         mov al, (MAIN_SIZE + 511) / 512
20         call load_disk
21
22         ;mov cl, 3
23         ;mov al, [es:bx]
24         ;call load_disk
25
26         mov di, 0x9000
27 .clr_buf:
28         mov byte[di], 0
29         inc di
30         cmp di, 0xD000
31         jne .clr_buf
32
33         mov dword[0x9000], 0xA003
34         mov dword[0xA000], 0xB003
35         mov dword[0xB000], 0xC003
36
37         mov eax, 3
38         mov di, 0xC000
39 .build_pt:
40         mov [di], eax
41         add eax, 0x1000
42         add di, 8
43         cmp eax, 0x100000
44         jb .build_pt
45
46         mov di, 0x9000
47
48         mov al, 0xFF
49         out 0xA1, al
50         out 0x21, al
51
52         nop
53         nop
54
55         lidt [IDT]
56
57         mov eax, 0b10100000
58         mov cr4, eax
59
60         mov edx, edi
61         mov cr3, edx
62
63         mov ecx, 0xC0000080
64         rdmsr
65
66         or eax, 0x00000100
67         wrmsr
68
69         mov ebx, cr0
70         or ebx, 0x80000001
71         mov cr0, ebx
72
73         lgdt [GDT.pointer]
74
75         jmp 0x0008:long_mode
76
77 load_disk:
78         push ax
79         mov ah, 0x02
80         xor ch, ch
81         xor dh, dh
82         int 0x13
83         jc disk_error
84         pop cx
85         cmp al, cl
86         jne disk_error
87         ret
88
89 disk_error:
90         mov ax, disk_error_msg
91         call print_str
92         jmp $
93
94 print_str:
95         push ax
96         push bx
97         mov bx, ax
98         mov ah, 0x0E
99 .print:
100         mov al, [bx]
101         cmp al, 0
102         je .return
103         int 0x10
104         inc bx
105         jmp .print
106 .return:
107         pop bx
108         pop ax
109         ret
110
111 booting_msg: db 10, 13, "Booting NyaX...", 10, 10, 13, 0
112 disk_error_msg: db "Disk is bwoken, cant boot ;-;", 10, 13, 0
113
114 GDT:
115         dq 0
116         dq 0x00209A0000000000
117         dq 0x0000920000000000
118         dw 0
119 .pointer:
120         dw $ - GDT - 1
121         dd GDT
122
123 IDT:
124         dw 0
125         dd 0
126
127 [bits 64]
128
129 long_mode:
130         mov ax, 0x0010
131         mov ds, ax
132         mov es, ax
133         mov fs, ax
134         mov gs, ax
135         mov ss, ax
136
137         jmp 0xD000
138
139 times 510-($-$$) db 0
140 dw 0xAA55