[ram] Normalize memory access across memory devices

This commit is contained in:
2024-02-18 09:44:49 +05:30
parent 2f0e0b4730
commit 0221eeedaf
4 changed files with 8 additions and 6 deletions

View File

@@ -1,5 +1,5 @@
use crate::emu::iomem::MemoryMappedIO; use crate::emu::iomem::MemoryMappedIO;
use crate::emu::mem::RamMemory; use crate::emu::ram::RamMemory;
use crate::misc::emulator_error::DeviceType::MMU; use crate::misc::emulator_error::DeviceType::MMU;
use crate::misc::emulator_error::EmulatorError::UnreachableMemory; use crate::misc::emulator_error::EmulatorError::UnreachableMemory;
@@ -42,7 +42,8 @@ impl Memory for MappedMemory {
self.memory_mapped_io.try_get_byte(address) self.memory_mapped_io.try_get_byte(address)
} }
RAM_MEM_START..=RAM_MEM_END => { RAM_MEM_START..=RAM_MEM_END => {
self.ram_memory.try_get_byte(address) let memory_index = address - RAM_MEM_START;
self.ram_memory.try_get_byte(memory_index)
} }
_ => { Err(UnreachableMemory(MMU, address)) } _ => { Err(UnreachableMemory(MMU, address)) }
}?; }?;

View File

@@ -1,4 +1,4 @@
pub mod cpu; pub mod cpu;
pub mod mmu; pub mod mmu;
pub mod mem; pub mod ram;
pub mod iomem; pub mod iomem;

View File

@@ -4,7 +4,8 @@ use crate::misc::emulator_error::DeviceType::RAM;
use crate::misc::emulator_error::EmulatorError; use crate::misc::emulator_error::EmulatorError;
use crate::misc::result::EmulatorResult; use crate::misc::result::EmulatorResult;
const MEM_LENGTH: usize = 2 << 24; const MAPPED_MEMORY_NOT_REQUIRED: u8 = 8;
const MEM_LENGTH: usize = (2 << 24) - (MAPPED_MEMORY_NOT_REQUIRED as usize);
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct RamMemory { pub struct RamMemory {
@@ -45,7 +46,7 @@ impl Memory for RamMemory {
#[cfg(test)] #[cfg(test)]
mod tests{ mod tests{
use crate::emu::mem::RamMemory; use crate::emu::ram::RamMemory;
use crate::emu::mmu::Memory; use crate::emu::mmu::Memory;
const EXAMPLE_ADDRESS:u32=0x24; const EXAMPLE_ADDRESS:u32=0x24;

View File

@@ -1,6 +1,6 @@
use simple_logger::SimpleLogger; use simple_logger::SimpleLogger;
use crate::emu::iomem::MemoryMappedIO; use crate::emu::iomem::MemoryMappedIO;
use crate::emu::mem::RamMemory; use crate::emu::ram::RamMemory;
use crate::emu::mmu::{Memory, MappedMemory}; use crate::emu::mmu::{Memory, MappedMemory};
use crate::misc::emulator_error::EmulatorError; use crate::misc::emulator_error::EmulatorError;
use crate::misc::result::EmulatorResult; use crate::misc::result::EmulatorResult;