Allow identification of the type of memory (ram or mmio) backing a specific page

This commit is contained in:
2025-09-28 21:13:29 +02:00
parent 3163b43fa4
commit f5ac1a132f

View File

@@ -30,6 +30,15 @@ impl MemConfig {
None 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> { pub fn read_dword(&self, page: PageNum, offset: u16) -> Result<DWord, MemAccessFault> {
if page_in_range(page, self.ram_start, self.ram.pages) { if page_in_range(page, self.ram_start, self.ram.pages) {
self.ram.read_dword(page - self.ram_start, offset) 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 page >= start && page - start < pages
} }
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MemoryMappingType {
MMIO,
RAM,
}
pub struct Ram { pub struct Ram {
buf: MmapMut, buf: MmapMut,
pages: PageNum, pages: PageNum,