From 678c6d00926e5380d17f37e9dbe7e1468982cbce Mon Sep 17 00:00:00 2001 From: Daniel Bauer Date: Fri, 27 Dec 2019 19:43:38 +0100 Subject: [PATCH] fixed a bug in BIT and correctly setting N,Z at some locations --- src/main.rs | 2 +- src/nes/cpu.rs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index 9f7a790..693d1eb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,7 +34,7 @@ lazy_static! { } fn main() -> Result<(), Error> { - simple_logger::init_with_level(Level::Debug).unwrap(); + simple_logger::init_with_level(Level::Info).unwrap(); let mut bus = MemoryBus::new(); let cartridge = Path::new("test_roms/nestest.nes"); diff --git a/src/nes/cpu.rs b/src/nes/cpu.rs index e7f245b..8715ceb 100644 --- a/src/nes/cpu.rs +++ b/src/nes/cpu.rs @@ -24,7 +24,7 @@ impl Registers { y: 0, sp: 0x00FD, pc: 0x0000, - flags: 0x0034, + flags: 0b00100100, } } } @@ -173,7 +173,7 @@ impl CPU { fn set_flag_nz(&mut self, val: Byte) { self.set_flag(ZERO, val == 0); - self.set_flag(NEGATIVE, (val & 0x80) == 0); + self.set_flag(NEGATIVE, (val & NEGATIVE) > 0); } pub fn get_flag(&self, flag: Byte) -> Byte { @@ -488,8 +488,8 @@ impl CPU { // the zeroflag is set to the result of operand AND accumulator. fn op_BIT(&mut self, bus: &T, addr: Word) -> bool { let val = self.readb(bus, addr); - self.set_flag(OVERFLOW, (val & OVERFLOW) == 1); - self.set_flag(NEGATIVE, (val & NEGATIVE) == 1); + self.set_flag(OVERFLOW, (val & OVERFLOW) > 1); + self.set_flag(NEGATIVE, (val & NEGATIVE) > 1); self.set_flag(ZERO, (val & self.regs.a) == 0); false }