]> git.lizzy.rs Git - nyax.git/blob - stage2/main.asm
Force make to use bash (#1)
[nyax.git] / stage2 / main.asm
1 [org 0x7E00]
2
3 %define PAGETABLE 0x1000
4 %define VESAINFO  0x0500
5 %define VESAMODE VESAINFO+512
6 %define OWNMODE  VESAMODE+256
7 %define GFXINFO PAGETABLE-10
8 ;%define MEMMAPCNT GFXINFO-2
9 %define MEMMAP 0x500
10
11 setup:
12         ; print message
13         mov ebx, .msg
14         call print_str
15
16         ; setup VESA
17         call vesa
18
19         ; get extended memory map
20         call mmap
21
22         ; build page table
23         call paging
24
25         ; jump into long mode
26         jmp 0x0008:long_mode
27
28 .msg:
29         db 10, 13, "nyax stage2", 10, 13, 0
30
31 %include "stage2/vesa.asm"
32 %include "stage2/mmap.asm"
33 %include "stage2/paging.asm"
34 %include "stage1/print.asm"
35
36 ; modify eax, ebx, ecx, edx
37 print_hex:
38         mov ebx, 0x10
39         jmp print_num
40 print_dec:
41         mov ebx, 10
42 print_num:
43         xor ecx, ecx
44 .convert:
45         inc ecx
46         xor edx, edx
47         div ebx
48         cmp dl, 10
49         jb .digit
50         add dl, 'A'-10
51         jmp .next
52 .digit:
53         add dl, '0'
54 .next:
55         push dx
56         cmp eax, 0
57         jne .convert
58 .print:
59         cmp ecx, 0
60         je .return
61         dec ecx
62         pop ax
63         mov ah, 0x0E
64         int 0x10
65         jmp .print
66 .return:
67         ret
68
69 newline:
70         mov al, 10
71         call print_chr
72
73         mov al, 13
74         call print_chr
75
76         ret
77
78 print_chr:
79         mov ah, 0x0E
80         int 0x10
81         ret
82
83 [bits 64]
84
85 long_mode:
86         ; setup segment registers
87         mov ax, 0x0010
88         mov ds, ax
89         mov es, ax
90         mov fs, ax
91         mov gs, ax
92         mov ss, ax
93
94         ; kernel begins here