From c7564b657e59010d77f2ff1be3b902a8188f169a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com> Date: Mon, 4 Jul 2022 00:46:02 +0100 Subject: [PATCH] feat: new cp instructions --- examples/sdl/src/main.rs | 6 +++--- src/inst.rs | 42 +++++++++++++++++++++++++++++++++------- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/examples/sdl/src/main.rs b/examples/sdl/src/main.rs index 576485d5..c6881f53 100644 --- a/examples/sdl/src/main.rs +++ b/examples/sdl/src/main.rs @@ -79,11 +79,11 @@ fn main() { .unwrap(); let mut game_boy = GameBoy::new(); - game_boy.load_boot_sgb(); + game_boy.load_boot_dmg(); //game_boy.load_rom_file("../../res/roms/firstwhite.gb"); //game_boy.load_rom_file("../../res/roms/opus5.gb"); - game_boy.load_rom_file("../../res/roms/ld_r_r.gb"); - //game_boy.load_rom_file("../../res/roms/opus5.gb"); + //game_boy.load_rom_file("../../res/roms/ld_r_r.gb"); + game_boy.load_rom_file("../../res/roms/special.gb"); let mut counter = 0; diff --git a/src/inst.rs b/src/inst.rs index 05c7735b..b4109886 100644 --- a/src/inst.rs +++ b/src/inst.rs @@ -197,14 +197,14 @@ pub const INSTRUCTIONS: [(fn(&mut Cpu), u8, &'static str); 256] = [ (noimpl, 4, "! UNIMP !"), (or_a_mhl, 8, "OR A, [HL]"), (or_a_a, 4, "OR A, A"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), + (cp_a_b, 4, "CP A, B"), + (cp_a_c, 4, "CP A, C"), + (cp_a_d, 4, "CP A, D"), + (cp_a_e, 4, "CP A, E"), + (cp_a_h, 4, "CP A, H"), + (cp_a_l, 4, "CP A, L"), (cp_a_mhl, 8, "CP A, [HL]"), - (noimpl, 4, "! UNIMP !"), + (cp_a_a, 4, "CP A, A"), // 0xc opcodes (ret_nz, 8, "RET NZ"), (pop_bc, 12, "POP BC"), @@ -1320,11 +1320,39 @@ fn or_a_a(cpu: &mut Cpu) { cpu.set_carry(false); } +fn cp_a_b(cpu: &mut Cpu) { + sub_set_flags(cpu, cpu.a, cpu.b); +} + +fn cp_a_c(cpu: &mut Cpu) { + sub_set_flags(cpu, cpu.a, cpu.c); +} + +fn cp_a_d(cpu: &mut Cpu) { + sub_set_flags(cpu, cpu.a, cpu.d); +} + +fn cp_a_e(cpu: &mut Cpu) { + sub_set_flags(cpu, cpu.a, cpu.e); +} + +fn cp_a_h(cpu: &mut Cpu) { + sub_set_flags(cpu, cpu.a, cpu.h); +} + +fn cp_a_l(cpu: &mut Cpu) { + sub_set_flags(cpu, cpu.a, cpu.l); +} + fn cp_a_mhl(cpu: &mut Cpu) { let byte = cpu.mmu.read(cpu.hl()); sub_set_flags(cpu, cpu.a, byte); } +fn cp_a_a(cpu: &mut Cpu) { + sub_set_flags(cpu, cpu.a, cpu.a); +} + fn ret_nz(cpu: &mut Cpu) { if cpu.get_zero() { return; -- GitLab