hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/kernel/vmm.rv
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-10-09 11:08:09 +0200
committerhachem <im@hachem.wtf>2026-10-09 11:08:09 +0200
commite0572c37d970d601c17085bdb082cc6ef4356891 (patch)
treef0b4d71c92978e74d127d7090d3e11380378a8b3 /kernel/vmm.rv
parent8cb66100fe802c38d180ea29a11a902decf0fd8b (diff)
chore: fmt some revo code based on lung's example
Diffstat (limited to 'kernel/vmm.rv')
-rw-r--r--kernel/vmm.rv14
1 files changed, 10 insertions, 4 deletions
diff --git a/kernel/vmm.rv b/kernel/vmm.rv
index 0de5f33..54d1695 100644
--- a/kernel/vmm.rv
+++ b/kernel/vmm.rv
@@ -2,22 +2,28 @@
# everything here only writes small entries we construct, so its f64 safe
const PTE_ADDR = 0x000FFFFFFFFFF000
-fn pte_index(virtual_address, level) (virtual_address shr (12 + 9 * level)) band 0x1ff
+fn pte_index(virtual_address, level) -> num do
+ return (virtual_address shr (12 + 9 * level)) band 0x1ff
+end
-fn next_table(table, index) do
+fn next_table(table, index) -> num do
const slot = table + index * 8
const entry = mem_read(slot, 8)
- if (entry band 1) != 0 return entry band PTE_ADDR
+ if (entry band 1) != 0 do
+ return entry band PTE_ADDR
+ end
+
const frame = frame_alloc()
mem_zero(frame, 4096)
mem_write(slot, frame bor 7, 8) # present | write | user
- frame
+ return frame
end
fn as_map(pml4, virtual_address, physical_address, flags) do
const pdpt = next_table(pml4, pte_index(virtual_address, 3))
const pd = next_table(pdpt, pte_index(virtual_address, 2))
const pt = next_table(pd, pte_index(virtual_address, 1))
+
mem_write(pt + pte_index(virtual_address, 0) * 8, (physical_address band PTE_ADDR) bor flags bor 1, 8)
invlpg(virtual_address)
end