summaryrefslogtreecommitdiff
path: root/src/mem.rs
diff options
context:
space:
mode:
authortaitep <taitep@taitep.se>2025-09-28 21:13:29 +0200
committertaitep <taitep@taitep.se>2025-09-28 21:13:29 +0200
commitf5ac1a132f6c6eb2f330c7af377ecc4a441d6e94 (patch)
tree3d158c4761302e57de2e31ae38f6b1bdf1d1eedf /src/mem.rs
parent3163b43fa48f7db6f45075f5f24ff130d33b22b2 (diff)
Allow identification of the type of memory (ram or mmio) backing a specific page
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,