From 50ce162ea67917ea0c398e220e14f589ced63993 Mon Sep 17 00:00:00 2001 From: Franco Colmenarez Date: Sun, 20 Nov 2022 12:18:25 -0500 Subject: [PATCH] set_low_a function --- snes-core/src/cpu/instructions.rs | 4 ++-- snes-core/src/cpu/registers.rs | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/snes-core/src/cpu/instructions.rs b/snes-core/src/cpu/instructions.rs index c78f5c8..777d100 100644 --- a/snes-core/src/cpu/instructions.rs +++ b/snes-core/src/cpu/instructions.rs @@ -38,7 +38,7 @@ impl CPU { true => alu::adc8bcd(target as u8, value, carry_flag), false => alu::adc8bin(target as u8, value, carry_flag), }; - self.registers.a = (self.registers.a & 0xFF00) | (result as u16); + self.registers.set_low_a(result as u8); self.registers.set_carry_flag(is_carry); self.registers.set_negative_flag(is_negative); self.registers.set_zero_flag(is_zero); @@ -71,7 +71,7 @@ impl CPU { true => alu::sbc8bcd(target as u8, value, carry_flag), false => alu::sbc8bin(target as u8, value, carry_flag), }; - self.registers.a = (self.registers.a & 0xFF00) | (result as u16); + self.registers.set_low_a(result as u8); self.registers.set_carry_flag(is_carry); self.registers.set_negative_flag(is_negative); self.registers.set_zero_flag(is_zero); diff --git a/snes-core/src/cpu/registers.rs b/snes-core/src/cpu/registers.rs index 8509e74..cc0d66a 100644 --- a/snes-core/src/cpu/registers.rs +++ b/snes-core/src/cpu/registers.rs @@ -27,6 +27,10 @@ impl Registers { } } + pub fn set_low_a(&mut self, val: u8) { + self.a = (self.a & 0xFF00) | (val as u16); + } + pub fn get_carry_flag(&self) -> bool { (self.p & 0b0000_0001) == 1 } @@ -117,6 +121,14 @@ impl Registers { mod registers_tests { use super::*; + #[test] + fn test_set_low_a() { + let mut registers = Registers::new(); + registers.a = 0xA1A1; + registers.set_low_a(0xFF); + assert_eq!(registers.a, 0xA1FF); + } + #[test] fn test_get_pc_address() { let mut registers = Registers::new();