use std::fmt; use super::Peripheral; //-------------------------------------------------------------------------------------------------- pub struct Ram { pub buffer: [u8; SIZE], } impl fmt::Debug for Ram { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { for i in 0x100..=0x1FF { if i%0x10 == 0 { f.write_fmt(format_args!("\n {:0>4X}", i))?; } f.write_fmt(format_args!(" {:0>2X}", self.buffer[i]))? } Ok(()) } } impl Peripheral for Ram { fn read_addr(&self, addr: u16) -> u8 { self.buffer[addr as usize] } fn write_addr(&mut self, addr: u16, data: u8) { self.buffer[addr as usize] = data; } } impl Ram { pub fn new() -> Self { Ram { buffer: [0u8; SIZE], } } pub fn from_file(file: &str) -> Self { use std::{ fs::File, io::Read, }; let mut f = File::open(file).unwrap(); let mut buffer = [0u8; SIZE]; f.read_exact(&mut buffer).unwrap(); Ram { buffer, } } }