From aa38e1ecfb5f875d18df8d471b3d1f8694b3301e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com> Date: Tue, 5 Jul 2022 16:25:22 +0100 Subject: [PATCH] feat: more instructions --- examples/sdl/src/main.rs | 2 +- src/inst.rs | 60 ++++++++++++++++++++++++++++++++++------ 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/examples/sdl/src/main.rs b/examples/sdl/src/main.rs index ee72ba0b..44e078fa 100644 --- a/examples/sdl/src/main.rs +++ b/examples/sdl/src/main.rs @@ -81,7 +81,7 @@ fn main() { // creates a new Game Boy instance and loads both the boot ROM // and the initial game ROM to "start the engine" let mut game_boy = GameBoy::new(); - game_boy.load_boot_dmg_bootix(); + game_boy.load_boot_mgb_bootix(); //game_boy.load_rom_file("../../res/roms.prop/tetris.gb"); //game_boy.load_rom_file("../../res/roms.prop/alleyway.gb"); diff --git a/src/inst.rs b/src/inst.rs index 2d01dfa6..cdcceb6f 100644 --- a/src/inst.rs +++ b/src/inst.rs @@ -294,18 +294,18 @@ pub const EXTENDED: [(fn(&mut Cpu), u8, &'static str); 256] = [ (rrc_e, 8, "RRC E"), (rrc_h, 8, "RRC H"), (rrc_l, 8, "RRC L"), - (noimpl, 4, "! UNIMP !"), + (rrc_mhl, 16, "RRC [HL]"), (rrc_a, 8, "RRC A"), // 0x1 opcodes - (noimpl, 4, "! UNIMP !"), + (rl_b, 8, "RL B"), (rl_c, 8, "RL C"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), + (rl_d, 8, "RL D"), + (rl_e, 8, "RL E"), + (rl_h, 8, "RL H"), + (rl_l, 8, "RL L"), + (rl_mhl, 16, "RL [HL]"), + (rl_a, 8, "RL A"), + (rr_b, 8, "RR B"), (rr_c, 8, "RR C"), (rr_d, 8, "RR D"), (rr_e, 8, "RR E"), @@ -2087,14 +2087,56 @@ fn rrc_l(cpu: &mut Cpu) { cpu.l = rrc(cpu, cpu.l); } +fn rrc_mhl(cpu: &mut Cpu) { + let hl = cpu.hl(); + let byte = cpu.mmu.read(hl); + let result = rrc(cpu, byte); + cpu.mmu.write(hl, result); +} + fn rrc_a(cpu: &mut Cpu) { cpu.l = rrc(cpu, cpu.a); } +fn rl_b(cpu: &mut Cpu) { + cpu.b = rl(cpu, cpu.b); +} + fn rl_c(cpu: &mut Cpu) { cpu.c = rl(cpu, cpu.c); } +fn rl_d(cpu: &mut Cpu) { + cpu.d = rl(cpu, cpu.d); +} + +fn rl_e(cpu: &mut Cpu) { + cpu.e = rl(cpu, cpu.e); +} + +fn rl_h(cpu: &mut Cpu) { + cpu.h = rl(cpu, cpu.h); +} + +fn rl_l(cpu: &mut Cpu) { + cpu.l = rl(cpu, cpu.l); +} + +fn rl_mhl(cpu: &mut Cpu) { + let hl = cpu.hl(); + let byte = cpu.mmu.read(hl); + let result = rl(cpu, byte); + cpu.mmu.write(hl, result); +} + +fn rl_a(cpu: &mut Cpu) { + cpu.a = rl(cpu, cpu.a); +} + +fn rr_b(cpu: &mut Cpu) { + cpu.b = rr(cpu, cpu.b); +} + fn rr_c(cpu: &mut Cpu) { cpu.c = rr(cpu, cpu.c); } -- GitLab