bootloader 0.2.0-alpha-001

An experimental pure-Rust x86 bootloader.
use core::slice;

use x86_64::VirtAddr;
use usize_conversions::usize_from;
use os_bootinfo::{MemoryMap, MemoryRegion, E820MemoryRegion};

pub(crate) fn create_from(memory_map_addr: VirtAddr, entry_count: u64) -> MemoryMap {
    let memory_map_start_ptr = usize_from(memory_map_addr.as_u64()) as *const E820MemoryRegion;
    let e820_memory_map = unsafe {
        slice::from_raw_parts(memory_map_start_ptr, usize_from(entry_count))
    };

    let mut memory_map = MemoryMap::new();
    for region in e820_memory_map {
        memory_map.add_region(MemoryRegion::from(*region));
    }

    memory_map
}