summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/devices/scratch.rs35
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);
}