diff options
Diffstat (limited to 'src/mem.rs')
| -rw-r--r-- | src/mem.rs | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -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, |
