summaryrefslogtreecommitdiff
path: root/stage2/mmap.asm
blob: 72f188a96e75a5c910cdaea4415534917d209010 (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
%define MAPMAGIC 0x534D4150

mmap:
	mov ebx, .msg
	call print_str

	xor ebx, ebx    ; counter for interrupt
	mov di, MEMMAP

.loop:
	; issue an INT 0x15, EAX = 0xE820 interrupt
	mov eax, 0xE820
	mov ecx, 24
	mov edx, MAPMAGIC
	int 0x15

	cmp eax, MAPMAGIC ; detect failure
	jne .fail

	cmp dword[di+16], 1
	; jne .next

	cmp dword[di+4], 0
	jne .keep

	cmp dword[di+0], 0x100000
	jb .next

.keep:
	mov dword[di+20], 0
	add di, 24

.next:
	cmp ebx, 0
	jne .loop

	mov dword[di+0], 0
	mov dword[di+4], 0

	;mov ax, di
	;sub ax, MEMMAP
	;xor dx, dx
	;mov bx, 24
	;div bx
	;mov [MEMMAPCNT], ax

	ret

.fail:
	mov ebx, .fail_msg
	call print_str
	jmp $

.msg: db "getting extended memory map", 10, 13, 0
.fail_msg: db "memory map failure", 10, 13, 0