diff options
| author | taitep <taitep@taitep.se> | 2025-09-28 21:13:29 +0200 |
|---|---|---|
| committer | taitep <taitep@taitep.se> | 2025-09-28 21:13:29 +0200 |
| commit | f5ac1a132f6c6eb2f330c7af377ecc4a441d6e94 (patch) | |
| tree | 3d158c4761302e57de2e31ae38f6b1bdf1d1eedf | |
| parent | 3163b43fa48f7db6f45075f5f24ff130d33b22b2 (diff) | |
Allow identification of the type of memory (ram or mmio) backing a specific page
| -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, |
