use anyhow::Result;
pub struct MemoryMapper {
}
impl MemoryMapper {
pub fn new() -> Self {
Self {}
}
pub fn translate_address(&self, virtual_addr: u32) -> Result<MemoryRegion> {
match virtual_addr {
0x80000000..=0x817FFFFF => {
Ok(MemoryRegion::Ram((virtual_addr & 0x00FFFFFF) as u32))
}
0xCC000000..=0xCC1FFFFF => {
Ok(MemoryRegion::VRam((virtual_addr & 0x001FFFFF) as u32))
}
0x80000000..=0x80FFFFFF => {
Ok(MemoryRegion::ARam((virtual_addr & 0x00FFFFFF) as u32))
}
_ => {
Ok(MemoryRegion::IO(virtual_addr))
}
}
}
}
#[derive(Debug, Clone, Copy)]
pub enum MemoryRegion {
Ram(u32), VRam(u32), ARam(u32), IO(u32), }