A poorly written OS for the x86 arch. (WIP)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
eOS/bootloader/bios/memory.asm

50 lines
867 B

; SRs to find memory size and leave it as a "note" for the kernel
3 years ago
mmap_probe: ; literally just test the memory boundaries
push eax
push ebx
push edx
push ebp
mov ebp, esi
add esi, 0x00000ff
and esi, ~0x00000ff
mmap_probe_addr:
mmap_probe_done:
mmap_e820:
mov di, 0x8004
mov ebx, 0 ; Must be 0
mov bp, 0 ; entry count
mov eax, 0xe820 ; function reg
mov edx, 'SMAP'
3 years ago
; TODO: update es:di to e820_dt
mov [es:di + 20], dword 1 ; fill
mov ecx, 24 ; ask for 24 bytes
int 0x15 ; Do the interupt
; carry flag = (un)supported function
3 years ago
jc mmap_e820_fail ; Try probing instead
3 years ago
cmp eax, edx ; eax should be = 'SMAP'
3 years ago
jne mmap_e820_fail ; if not then fail
test ebx, ebx
3 years ago
je mmap_e820_fail
mmap_e820_fail:
stc
ret
3 years ago
e820_dt_start:
e820_low: dd 0
e820_high: dd 0
e820_len_low: dd 0
e820_len_high: dd 0
e820_type: dd 0
e820_dt_end: