summaryrefslogtreecommitdiff
path: root/src/mem.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem.rs')
-rw-r--r--src/mem.rs17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/mem.rs b/src/mem.rs
index 7458c67..2043aa1 100644
--- a/src/mem.rs
+++ b/src/mem.rs
@@ -38,10 +38,11 @@ impl Memory {
return Some(i);
}
}
+ eprintln!("tried to allocate {:X} but there are no more pages!", virtual_addr);
None
}
- pub fn lookup_page(&mut self, virtual_addr: usize, permission: usize) -> Option<usize> {
+ fn lookup_page(&mut self, virtual_addr: usize, permission: usize) -> Option<usize> {
for (i, page) in self.pages.iter().enumerate() {
if page.virtual_addr == virtual_addr
&& permission >= page.permission
@@ -50,7 +51,7 @@ impl Memory {
return Some(i);
}
}
- return self.create_page(virtual_addr, permission);
+ self.create_page(virtual_addr, permission)
}
pub fn ro_lookup(&self, virtual_addr: usize, permission: usize) -> Option<usize> {
@@ -62,6 +63,7 @@ impl Memory {
return Some(i);
}
}
+ println!("virtual_addr {:X} is not allocated", virtual_addr);
None
}
@@ -69,21 +71,22 @@ impl Memory {
let page = address & PAGE_MASK;
let offset = address - page;
- if let Some(page) = self.lookup_page(address, permission) {
+ if let Some(page) = self.lookup_page(page, permission) {
self.memory[self.pages[page].real_addr + offset] = value;
- Ok(())
- } else {
- Err(())
+ return Ok(());
}
+ Err(())
}
pub fn read(&self, address: usize, permission: usize) -> Result<u8, ()> {
let page = address & PAGE_MASK;
let offset = address - page;
- if let Some(page) = self.ro_lookup(address, permission) {
+ if let Some(page) = self.ro_lookup(page, permission) {
Ok(self.memory[self.pages[page].real_addr + offset])
} else {
+ println!("address {:X} is not allocated", address);
+
Err(())
}
}