[cpu] Implement some ALU instructions
This commit is contained in:
@@ -120,14 +120,37 @@ impl Device {
|
|||||||
Instruction::RandomOr(_, _) => {}
|
Instruction::RandomOr(_, _) => {}
|
||||||
Instruction::SkipIfKeyPressed(_) => {}
|
Instruction::SkipIfKeyPressed(_) => {}
|
||||||
Instruction::SkipIfKeyNotPressed(_) => {}
|
Instruction::SkipIfKeyNotPressed(_) => {}
|
||||||
Instruction::Set(_, _) => {}
|
Instruction::Set(x, y) => {
|
||||||
Instruction::Or(_, _) => {}
|
self.registers.v[x] = self.registers.v[y];
|
||||||
Instruction::And(_, _) => {}
|
}
|
||||||
Instruction::Xor(_, _) => {}
|
Instruction::Or(x, y) => {
|
||||||
Instruction::Add(_, _) => {}
|
self.registers.v[x] |= self.registers.v[y];
|
||||||
Instruction::Sub(_, _) => {}
|
}
|
||||||
|
Instruction::And(x,y) => {
|
||||||
|
self.registers.v[x] &= self.registers.v[y];
|
||||||
|
}
|
||||||
|
Instruction::Xor(x,y) => {
|
||||||
|
self.registers.v[x] ^= self.registers.v[y];
|
||||||
|
}
|
||||||
|
Instruction::Add(x,y) => {
|
||||||
|
let left = self.registers.v[x];
|
||||||
|
let (wrapped_addition_result, is_overflow) = left.overflowing_add(self.registers.v[y]);
|
||||||
|
self.registers.v[x] = wrapped_addition_result;
|
||||||
|
self.set_flag_register(is_overflow);
|
||||||
|
}
|
||||||
|
Instruction::Sub(x,y) => {
|
||||||
|
let left = self.registers.v[x];
|
||||||
|
let (wrapped_subtraction_result, is_overflow) = left.overflowing_sub(self.registers.v[y]);
|
||||||
|
self.registers.v[x] = wrapped_subtraction_result;
|
||||||
|
self.set_flag_register(is_overflow);
|
||||||
|
}
|
||||||
Instruction::RShift(_, _) => {}
|
Instruction::RShift(_, _) => {}
|
||||||
Instruction::RSub(_, _) => {}
|
Instruction::RSub(x, y) => {
|
||||||
|
let left = self.registers.v[y];
|
||||||
|
let (wrapped_subtraction_result, is_overflow) = left.overflowing_sub(self.registers.v[x]);
|
||||||
|
self.registers.v[x] = wrapped_subtraction_result;
|
||||||
|
self.set_flag_register(is_overflow);
|
||||||
|
}
|
||||||
Instruction::LShift(_, _) => {}
|
Instruction::LShift(_, _) => {}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user