summaryrefslogtreecommitdiff
path: root/src/mem.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem.rs')
-rw-r--r--src/mem.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/mem.rs b/src/mem.rs
index bbaaf38..3ee2791 100644
--- a/src/mem.rs
+++ b/src/mem.rs
@@ -30,6 +30,15 @@ impl MemConfig {
None
}
+ pub fn memory_mapping_type(&self, page: PageNum) -> Option<MemoryMappingType> {
+ if page_in_range(page, self.ram_start, self.ram.pages) {
+ Some(MemoryMappingType::RAM)
+ } else {
+ self.find_device_by_page(page)
+ .map(|_x| MemoryMappingType::MMIO)
+ }
+ }
+
pub fn read_dword(&self, page: PageNum, offset: u16) -> Result<DWord, MemAccessFault> {
if page_in_range(page, self.ram_start, self.ram.pages) {
self.ram.read_dword(page - self.ram_start, offset)
@@ -168,6 +177,12 @@ fn page_in_range(page: PageNum, start: PageNum, pages: PageNum) -> bool {
page >= start && page - start < pages
}
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub enum MemoryMappingType {
+ MMIO,
+ RAM,
+}
+
pub struct Ram {
buf: MmapMut,
pages: PageNum,