From eb5c3f3c2aedba14ee45363e4c26c0f2fb189a56 Mon Sep 17 00:00:00 2001 From: Andrew Keeton Date: Thu, 6 Nov 2014 19:38:56 -0500 Subject: [PATCH 1/3] Add branch_if_carry_set_test(). --- src/machine.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/machine.rs b/src/machine.rs index 357b01b..5fbc7c1 100644 --- a/src/machine.rs +++ b/src/machine.rs @@ -886,6 +886,19 @@ fn branch_if_carry_clear_test() { assert_eq!(machine.registers.program_counter, Address(0xABCD)); } +#[test] +fn branch_if_carry_set_test() { + let mut machine = Machine::new(); + + machine.execute_instruction((instruction::CLC, instruction::UseImplied)); + machine.branch_if_carry_set(Address(0xABCD)); + assert_eq!(machine.registers.program_counter, Address(0)); + + machine.execute_instruction((instruction::SEC, instruction::UseImplied)); + machine.branch_if_carry_set(Address(0xABCD)); + assert_eq!(machine.registers.program_counter, Address(0xABCD)); +} + #[test] fn branch_if_minus_test() { { From da6a28f63912b63c22780c6ec20bbefee1ba8dfa Mon Sep 17 00:00:00 2001 From: Andrew Keeton Date: Thu, 6 Nov 2014 19:39:46 -0500 Subject: [PATCH 2/3] Add branch_if_carry_set(). --- src/machine.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/machine.rs b/src/machine.rs index 5fbc7c1..039fa6f 100644 --- a/src/machine.rs +++ b/src/machine.rs @@ -554,6 +554,12 @@ impl Machine { } } + fn branch_if_carry_set(&mut self, addr: Address) { + if self.registers.status.contains(PS_CARRY) { + self.registers.program_counter = addr; + } + } + fn branch_if_minus(&mut self, addr: Address) { if self.registers.status.contains(PS_NEGATIVE) { self.registers.program_counter = addr; From 59168cbbe449dec96b369f075569c69f7912f533 Mon Sep 17 00:00:00 2001 From: Andrew Keeton Date: Thu, 6 Nov 2014 19:42:08 -0500 Subject: [PATCH 3/3] Add BCS to execute_instruction(). --- src/machine.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/machine.rs b/src/machine.rs index 039fa6f..1b90a47 100644 --- a/src/machine.rs +++ b/src/machine.rs @@ -116,6 +116,11 @@ impl Machine { self.branch_if_carry_clear(addr); } + (instruction::BCS, instruction::UseRelative(rel)) => { + let addr = self.registers.program_counter + + AddressDiff(rel as i32); + self.branch_if_carry_set(addr); + } (instruction::BIT, instruction::UseAddress(addr)) => { let a: u8 = self.registers.accumulator as u8;