From f4f129a75208ccf5d6a19b1cb81c56d4d95fd61f Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Mon, 30 Sep 2024 12:28:24 +1300 Subject: Make Bedrock parametric over devices The core Bedrock struct is now parametric over individual Device structs, rather than over a single DeviceBus. This change was made so that devices can be implemented separately to one another. The implementation of the evaluate method has also been changed to make it potentially slightly more efficient, by replacing pop-then-push combinations with get operations. --- src/memory.rs | 62 ----------------------------------------------------------- 1 file changed, 62 deletions(-) delete mode 100644 src/memory.rs (limited to 'src/memory.rs') diff --git a/src/memory.rs b/src/memory.rs deleted file mode 100644 index 755c4bc..0000000 --- a/src/memory.rs +++ /dev/null @@ -1,62 +0,0 @@ -pub struct Memory { - pub mem: [u8; 65536], - pub pc: u16, -} - -impl Memory { - pub fn new() -> Self { - Self { - mem: [0; 65536], - pc: 0, - } - } - - pub fn load_program(&mut self, bytecode: &[u8]) { - self.mem[..bytecode.len()].copy_from_slice(bytecode) - } - - pub fn read_u8(&self, addr: u16) -> u8 { - self.mem[addr as usize] - } - - pub fn write_u8(&mut self, val: u8, addr: u16) { - self.mem[addr as usize] = val; - } - - pub fn read_u8_next(&mut self) -> u8 { - let byte = self.mem[self.pc as usize]; - self.pc = self.pc.wrapping_add(1); - byte - } - - pub fn read_u16(&self, addr: u16) -> u16 { - let byte_high = self.read_u8(addr); - let byte_low = self.read_u8(addr.wrapping_add(1)); - u16::from_be_bytes([byte_high, byte_low]) - } - - pub fn write_u16(&mut self, val: u16, addr: u16) { - let [byte_high, byte_low] = val.to_be_bytes(); - self.write_u8(byte_high, addr); - self.write_u8(byte_low, addr.wrapping_add(1)); - } - - pub fn read_u16_next(&mut self) -> u16 { - let byte_high = self.read_u8_next(); - let byte_low = self.read_u8_next(); - u16::from_be_bytes([byte_high, byte_low]) - } - - pub fn read_pc(&self) -> u16 { - self.pc - } - - pub fn write_pc(&mut self, val: u16) { - self.pc = val; - } - - pub fn reset(&mut self) { - self.mem.fill(0); - self.pc = 0; - } -} -- cgit v1.2.3-70-g09d2