]> git.lizzy.rs Git - nyax.git/blob - stage2/mmap.asm
Page calculation
[nyax.git] / stage2 / mmap.asm
1 %define MAPMAGIC 0x534D4150
2
3 mmap:
4         mov ebx, .msg
5         call print_str
6
7         xor ebx, ebx    ; counter for interrupt
8         mov di, MEMMAP
9
10 .loop:
11         ; issue an INT 0x15, EAX = 0xE820 interrupt
12         mov eax, 0xE820
13         mov ecx, 24
14         mov edx, MAPMAGIC
15         int 0x15
16
17         cmp eax, MAPMAGIC ; detect failure
18         jne .fail
19
20         mov eax, [di+16]
21         cmp eax, 2
22         ja .next
23
24         mov eax, [di+4]
25         cmp eax, 0
26         jne .keep
27
28         mov eax, [di+0]
29         cmp eax, 0x100000
30         jb .next
31
32 .keep:
33         add di, 24
34
35 .next:
36         cmp ebx, 0
37         jne .loop
38
39         mov ax, di
40         sub ax, MEMMAP
41         xor dx, dx
42         mov bx, 24
43         div bx
44         mov [MEMMAPCNT], ax
45
46         mov eax, MEMMAPCNT
47         call print_dec
48         call newline
49         ;jmp $
50
51         ret
52
53 .fail:
54         mov ebx, .fail_msg
55         call print_str
56         jmp $
57
58 .msg: db "getting extended memory map", 10, 13, 0
59 .fail_msg: db "memory map failure", 10, 13, 0
60