use crate::memory::Result;
use super::BusLine;
#[derive(Default)]
pub struct MemoryControl1 {
data: [u32; 9],
}
impl BusLine for MemoryControl1 {
fn read_u32(&mut self, addr: u32) -> Result<u32> {
let addr = addr & 0xFF;
let index = (addr / 4) as usize;
Ok(self.data[index])
}
fn write_u32(&mut self, addr: u32, data: u32) -> Result<()> {
let addr = addr & 0xFF;
let index = (addr / 4) as usize;
log::trace!("mem_ctrl1: index={}, data=0x{:08X}", index, data);
self.data[index] = data;
Ok(())
}
}
#[derive(Default)]
pub struct MemoryControl2(u32);
impl BusLine for MemoryControl2 {
fn read_u32(&mut self, _addr: u32) -> Result<u32> {
Ok(self.0)
}
fn write_u32(&mut self, _addr: u32, data: u32) -> Result<()> {
assert!(
data == 0xB88 || data == 0x888,
"mem_ctrl2 value is wrong, should be 0xB88, got {:08X}",
data
);
self.0 = data;
Ok(())
}
}
#[derive(Default)]
pub struct CacheControl(u32);
impl BusLine for CacheControl {
fn read_u32(&mut self, _addr: u32) -> Result<u32> {
Ok(self.0)
}
fn write_u32(&mut self, _addr: u32, data: u32) -> Result<()> {
log::info!("LOG cache control written with {:08X}", data);
self.0 = data;
Ok(())
}
}