aboutsummaryrefslogblamecommitdiff
path: root/src/memory.rs
blob: 386e85992cba21e6cbeb2c49996966933e4ad2bb (plain) (tree)






































                                                                   
pub trait VMem {
    fn read(&self, addr: u16) -> u8;
    fn write(&mut self, addr: u16, data: u8);
}

pub struct CPUMemory {
    internal: [u8; 2048]
}

impl CPUMemory {
    pub fn new() -> Self {
        CPUMemory{internal: [0; 2048]}
    }
}

impl VMem for CPUMemory {
    fn read(&self, addr: u16) -> u8 {
        if addr < 0x2000 {
            self.internal[(addr & 0x07ff) as usize]
        } else if addr < 0x4000 {
            match addr & 0x7 {
                _ => 0
            }
        } else {
            panic!("invalid memory read access at 0x{:04x}", addr)
        }
    }
    fn write(&mut self, addr: u16, data: u8) {
        if addr < 0x2000 {
            self.internal[(addr & 0x07ff) as usize] = data;
        } else if addr < 0x4000 {
            match addr & 0x7 {
                _ => ()
            }
        } else {
            panic!("invalid memory write access at 0x{:04x}", addr)
        }
    }
}