diff options
Diffstat (limited to 'src/devices')
-rw-r--r-- | src/devices/scratch.rs | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/devices/scratch.rs b/src/devices/scratch.rs index eea011b..950f87a 100644 --- a/src/devices/scratch.rs +++ b/src/devices/scratch.rs @@ -1,3 +1,10 @@ +macro_rules! then_inc { + ($v:expr) => {{ + $v = $v.wrapping_add(1); + $v as usize + }}; +} + pub struct ScratchDevice { memory: Vec<u8>, pub max_capacity: u32, @@ -17,38 +24,34 @@ impl ScratchDevice { } pub fn read_head_1(&mut self) -> u8 { - let value = self.read_byte(self.pointer_1); - self.pointer_1 += 1; - return value; + let i = then_inc!(self.pointer_1); + self.read_byte(i) } pub fn read_head_2(&mut self) -> u8 { - let value = self.read_byte(self.pointer_2); - self.pointer_2 += 1; - return value; + let i = then_inc!(self.pointer_2); + self.read_byte(i) } pub fn write_head_1(&mut self, value: u8) { - self.write_byte(self.pointer_1, value); - self.pointer_1 += 1; + let i = then_inc!(self.pointer_1); + self.write_byte(i, value); } pub fn write_head_2(&mut self, value: u8) { - self.write_byte(self.pointer_2, value); - self.pointer_2 += 1; + let i = then_inc!(self.pointer_2); + self.write_byte(i, value); } - fn read_byte(&self, pointer: u32) -> u8 { - let pointer = pointer as usize; - match self.memory.get(pointer) { + fn read_byte(&self, pointer: usize) -> u8 { + match self.memory.get(pointer as usize) { Some(value) => *value, None => 0, } } - fn write_byte(&mut self, pointer: u32, value: u8) { - if pointer < self.max_capacity { - let pointer = pointer as usize; + fn write_byte(&mut self, pointer: usize, value: u8) { + if pointer < self.max_capacity as usize { if pointer >= self.memory.len() { self.memory.resize(pointer + 1, 0); } |