ttvm 0.4.1

tt64 emulator API for Rust
Documentation
use super::*;

#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct Mem {
    inner: Box<[u8]>,
    size: usize,
}

impl Mem {
    pub fn new(size: usize) -> Self {
        Mem {
            inner: vec![0x0; size].into_boxed_slice(),
            size,
        }
    }
}

impl IODev for Mem {
    fn read(&self, addr: usize) -> Result<&u8, IOError> {
        match self.inner.get(addr) {
            Some(some) => Ok(some),
            None => Err(IOError::new(format!("addr ({}) is out of bounds", addr))),
        }
    }

    fn read_mut(&mut self, addr: usize) -> Result<&mut u8, IOError> {
        match self.inner.get_mut(addr) {
            Some(some) => Ok(some),
            None => Err(IOError::new(format!("addr ({}) is out of bounds", addr))),
        }
    }

    fn write(&mut self, addr: usize, data: u8) -> Result<usize, IOError> {
        match self.inner.get_mut(addr) {
            Some(some) => {
                *some = data;

                Ok(data as usize)
            }
            None => Err(IOError::new(format!("addr ({}) is out of bounds", addr))),
        }
    }

    fn size(&self) -> usize {
        self.size
    }
}