diff options
author | Ben Bridle <ben@derelict.engineering> | 2025-03-25 12:00:15 +1300 |
---|---|---|
committer | Ben Bridle <ben@derelict.engineering> | 2025-03-25 12:00:15 +1300 |
commit | c23c47325a7818c4df4097878f101cd80e2fe361 (patch) | |
tree | f7d591c90428d43064be10de660021c2cd6dc863 /src/program_memory.rs | |
parent | 179bd6a13d91f0a1137ee8ed6aebb7e226e99b5d (diff) | |
download | bedrock-core-c23c47325a7818c4df4097878f101cd80e2fe361.zip |
Partially restructure the library
This also changes bit-shifting semantics, shifting left and then right
instead of the other way around.
Diffstat (limited to 'src/program_memory.rs')
-rw-r--r-- | src/program_memory.rs | 56 |
1 files changed, 0 insertions, 56 deletions
diff --git a/src/program_memory.rs b/src/program_memory.rs deleted file mode 100644 index 7ffdb17..0000000 --- a/src/program_memory.rs +++ /dev/null @@ -1,56 +0,0 @@ -pub struct ProgramMemory { - pub mem: [u8; 65536], - pub pc: u16, -} - -impl ProgramMemory { - pub fn new() -> Self { - Self { - mem: [0; 65536], - pc: 0, - } - } - - pub fn reset(&mut self) { - self.mem.fill(0); - self.pc = 0; - } - - pub fn load_program(&mut self, bytecode: &[u8]) { - let length = std::cmp::min(bytecode.len(), 65536); - self.mem[..length].copy_from_slice(&bytecode[..length]); - self.mem[length..65536].fill(0); - } - - 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]) - } -} |