-
Notifications
You must be signed in to change notification settings - Fork 1
/
ben_mm.asm
65 lines (52 loc) · 2.07 KB
/
ben_mm.asm
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
57
58
59
60
61
62
63
64
65
; ==================================================================
; benOS Bootloader
; Copyright (C) 2018 Bench Computer, Inc. -- see ~/LICENSE
;
; The official bootloader for benOS and BenchX desktop/laptop products.
; The first bootloader built for a decentralized operating system.
; Many bootloaders were looked at and utilized in the creation of
; benOS's BenchX bootloader.
;
; Bootloaders we utilized: Ubuntu, MikeOS, Debian, Linux Mint, ReOS
; ==================================================================
; ------------------------------------------------------------------
; benOS Bootloader - Memory Mapping
; ------------------------------------------------------------------
SECTION .text
USE16
; ------------------------------------------------------------------
; benOS Bootloader - At 0x500 to 0x5000 We Generate A Memory Map
; /// BenchX Desktop will pull from available memory that hasn't been used.
; /// At this boot stage the benOS microkernel and bootloader are already utilizing
; memory from your BenchX Desktop, to startup benOS.
; ------------------------------------------------------------------
ben_mm:
.start equ 0x0500
.end equ 0x5000
.length equ .end - .start
xor eax, eax
mov di, .start
mov ecx, .length / 4 ; moving 4 Bytes at once
cld
rep stosd
mov di, .start
mov edx, 0x534D4150 ; Set EDX to the magic number 0x534D4150.
xor ebx, ebx
; ------------------------------------------------------------------
; benOS Bootloader - Memory Mapping Loop
; ------------------------------------------------------------------
.lp:
mov eax, 0xE820
mov ecx, 24
int 0x15
jc .done ; MM Loop either errors out or finishes.
cmp ebx, 0
je .done ; MM Loop finalizes its boot stage loop process.
add di, 24
cmp di, .end
jb .lp ; MM Loop has buffer space available and left over.
; ----------------------------------------------------------------------
; benOS Bootloader - Memory Mapping Complete, Returns Map > Next Stage
; ----------------------------------------------------------------------
.done:
ret