From f94314ad0149ab58bbee355e5c132820879ffa25 Mon Sep 17 00:00:00 2001 From: Franco Colmenarez Date: Sat, 16 Oct 2021 14:17:28 -0500 Subject: [PATCH] Fix some bugs and implement a way to compare the logs --- .gitignore | 1 + src/console.rs | 3 ++- src/cpu.rs | 14 ++++++++------ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index ea8c4bf..1a4595e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +*.log diff --git a/src/console.rs b/src/console.rs index 454ba0e..5c5df44 100644 --- a/src/console.rs +++ b/src/console.rs @@ -24,7 +24,8 @@ impl Console { while !exit { self.cpu.run(&mut self.bus); - thread::sleep(time::Duration::from_millis(500)); + // thread::sleep(time::Duration::from_millis(100)); + exit = self.cpu.get_exec_calls_count() > 1258895; } } } diff --git a/src/cpu.rs b/src/cpu.rs index b9197af..6d7ffe6 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -90,7 +90,7 @@ impl Registers { a: 0x01, f: 0xB0, // The first 4 lower bits are always set to 0 b: 0x00, - c: 0x00, + c: 0x13, d: 0x00, e: 0xD8, h: 0x01, @@ -273,14 +273,15 @@ impl CPU { pub fn new() -> Self { Self { registers: Registers::new(), + exec_calls_count: 0, } } - pub fn get_exec_calls_count(&self) { + pub fn get_exec_calls_count(&self) -> usize { self.exec_calls_count } - pub fn increment_exec_calls_count(&mut self) { + fn increment_exec_calls_count(&mut self) { self.exec_calls_count += 1; } @@ -306,6 +307,7 @@ impl CPU { parameter_bytes.3, ); self.exec(opcode, bus); + self.increment_exec_calls_count(); } pub fn exec(&mut self, opcode: Opcode, bus: &mut Bus) { @@ -346,6 +348,7 @@ impl CPU { }, // Increment or decrement program counter by signed N Opcode::JR(params) => { + self.registers.increment(Register::PC, 2); let mut condition_met = false; let mut value = 0 as i16; match params { @@ -367,7 +370,6 @@ impl CPU { let pc = (self.registers.get(Register::PC) as i16) + (value as i16); self.registers.set(Register::PC, pc as u16); } - self.registers.increment(Register::PC, 2); }, // Load and increment Opcode::LDI(params) => match params { @@ -560,8 +562,8 @@ impl CPU { 0x36 => Opcode::LD(OpcodeParameter::Register_U8(Register::HL, params.1)), 0x0A => Opcode::LD(OpcodeParameter::Register_Register(Register::A, Register::BC)), 0x1A => Opcode::LD(OpcodeParameter::Register_Register(Register::A, Register::DE)), - 0xFA => Opcode::LD(OpcodeParameter::Register_U8(Register::A, params.1)), // Receives 16 bit value, but lower bit is ignored - 0x3E => Opcode::LD(OpcodeParameter::Register_U16(Register::A, two_byte_param)), + 0xFA => Opcode::LD(OpcodeParameter::Register_U16(Register::A, two_byte_param)), // Receives 16 bit value, but lower bit is ignored + 0x3E => Opcode::LD(OpcodeParameter::Register_U8(Register::A, params.1)), 0xEA => Opcode::LD(OpcodeParameter::U16_Register(two_byte_param, Register::A)), 0xF2 => Opcode::LD(OpcodeParameter::Register_FF00plusRegister(Register::A, Register::C)), 0xE2 => Opcode::LD(OpcodeParameter::FF00plusRegister_Register(Register::A, Register::C)),