use std::collections::HashMap;
use super::Memory;
use crate::addr::Addr;
#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
pub struct Byte(u8);
#[derive(Debug)]
pub struct NaiveMemory {
bytes: HashMap<Addr, Byte>,
}
impl NaiveMemory {
pub fn new() -> Self {
NaiveMemory { bytes: HashMap::new() }
}
}
impl Memory for NaiveMemory {
fn load_byte(&self, addr: Addr) -> u8 {
let Byte(val) = *self.bytes.get(&addr).unwrap_or(&Byte(0));
val
}
fn store_byte(&mut self, addr: Addr, value: u8) {
if value != 0 {
self.bytes.insert(addr, Byte(value));
} else {
self.bytes.remove(&addr);
}
}
}