faster memory impl

This commit is contained in:
2026-03-03 17:19:07 +00:00
parent ebb9489410
commit 1672732431
10 changed files with 1088 additions and 33 deletions
+32 -7
View File
@@ -1,6 +1,9 @@
use serde::{Deserialize, Serialize};
use crate::memory::mmu::MMU;
use crate::{
memory::{mainstore::RandomAccessMemory, mmu::MMU},
processor::processor::Emulator,
};
mod cache;
pub mod mainstore;
@@ -15,7 +18,7 @@ pub enum FaultInfo {
}
#[repr(u32)]
#[derive(Serialize, Deserialize, Clone, Copy)]
#[derive(Serialize, Deserialize, Clone, Copy, Debug)]
enum RegionType {
Reserved,
Bootloader,
@@ -25,14 +28,18 @@ enum RegionType {
MMIO,
}
#[derive(Serialize, Deserialize, Clone, Copy)]
#[derive(Serialize, Deserialize, Debug, Clone, Copy)]
pub struct Region {
base: PhysAddr,
size: usize,
size: u32,
region_type: RegionType,
// flags for the emulator
#[serde(default)]
identity_map_on_boot: bool,
}
#[derive(Serialize, Deserialize)]
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct MemoryMap {
table_addr: PhysAddr,
pub regions: Vec<Region>,
@@ -48,9 +55,27 @@ impl MemoryMap {
}
}
pub fn apply(&self, cpu: &mut Emulator<impl RandomAccessMemory>) {
for reg in &self.regions {
if reg.identity_map_on_boot {
Self::identity_map(cpu.mmu_mut(), reg);
}
}
let mem = cpu.memory_mut();
let mut offset = self.table_addr;
for region in &self.regions {
println!("Wrote entry: {region:?} to page table");
mem.write_word(offset, region.base);
mem.write_word(offset + 4, region.size);
mem.write_word(offset + 8, region.region_type as u32);
offset += 12;
}
}
pub fn identity_map(mmu: &mut MMU, region: &Region) {
let first_page = region.base >> 12;
let page_count = (region.size >> 12) as u32;
let page_count = (region.size >> 12);
for page in (first_page..first_page + page_count).map(|p| p << 12) {
mmu.create_mapping(page, page);
@@ -60,6 +85,6 @@ impl MemoryMap {
impl Default for MemoryMap {
fn default() -> Self {
ron::from_str(include_str!("../../config/dsa.mmap.ron")).unwrap()
ron::from_str(include_str!("../config/dsa.mmap.default.ron")).unwrap()
}
}