63 lines
1.1 KiB
Rust
63 lines
1.1 KiB
Rust
#![feature(asm)]
|
|
|
|
pub use crate::{
|
|
arch::Arch,
|
|
arch::emulate::*,
|
|
page::{
|
|
PageEntry,
|
|
PageTable
|
|
},
|
|
};
|
|
|
|
mod arch;
|
|
mod page;
|
|
|
|
// Physical memory address
|
|
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
|
|
#[repr(transparent)]
|
|
pub struct PhysicalAddress(usize);
|
|
|
|
impl PhysicalAddress {
|
|
#[inline(always)]
|
|
pub const fn new(address: usize) -> Self {
|
|
Self(address)
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub fn data(&self) -> usize {
|
|
self.0
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub fn add(self, offset: usize) -> Self {
|
|
Self(self.0 + offset)
|
|
}
|
|
}
|
|
|
|
// Virtual memory address
|
|
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
|
|
#[repr(transparent)]
|
|
pub struct VirtualAddress(usize);
|
|
|
|
impl VirtualAddress {
|
|
#[inline(always)]
|
|
pub const fn new(address: usize) -> Self {
|
|
Self(address)
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub fn data(&self) -> usize {
|
|
self.0
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub fn add(self, offset: usize) -> Self {
|
|
Self(self.0 + offset)
|
|
}
|
|
}
|
|
|
|
pub struct MemoryArea {
|
|
pub base: PhysicalAddress,
|
|
pub size: usize,
|
|
}
|