From d41afb7999d7b65570c8a8d10173ff5416ee9f76 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:56:20 +0100
Subject: [PATCH] feat: more instructions

---
 examples/sdl/src/main.rs |   1 -
 res/roms/special.gb      | Bin 32768 -> 0 bytes
 src/inst.rs              |  66 +++++++++++++++++++++++++++++++++------
 3 files changed, 56 insertions(+), 11 deletions(-)
 delete mode 100644 res/roms/special.gb

diff --git a/examples/sdl/src/main.rs b/examples/sdl/src/main.rs
index 879ac9f4..584239cb 100644
--- a/examples/sdl/src/main.rs
+++ b/examples/sdl/src/main.rs
@@ -88,7 +88,6 @@ fn main() {
 
     //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/special.gb");
 
     //game_boy.load_rom_file("../../res/roms/paradius/cpu/01-special.gb"); // PASSED
     //game_boy.load_rom_file("../../res/roms/paradius/cpu/02-interrupts.gb"); // NO FINISH
diff --git a/res/roms/special.gb b/res/roms/special.gb
deleted file mode 100644
index ad3e9984f967b77b7ffdf768842ce3c04517d059..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 32768
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

diff --git a/src/inst.rs b/src/inst.rs
index 04a8bd7e..98a88bbb 100644
--- a/src/inst.rs
+++ b/src/inst.rs
@@ -309,18 +309,18 @@ pub const EXTENDED: [(fn(&mut Cpu), u8, &'static str); 256] = [
     (rr_c, 8, "RR C"),
     (rr_d, 8, "RR D"),
     (rr_e, 8, "RR E"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
+    (rr_h, 8, "RR H"),
+    (rr_l, 8, "RR L"),
+    (rr_mhl, 16, "RR [HL]"),
+    (rr_a, 8, "RR A"),
     // 0x2 opcodes
     (sla_b, 8, "SLA B"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
+    (sla_c, 8, "SLA C"),
+    (sla_d, 8, "SLA D"),
+    (sla_e, 8, "SLA E"),
+    (sla_h, 8, "SLA H"),
+    (sla_l, 8, "SLA L"),
+    (sla_mhl, 16, "SLA [HL]"),
     (sla_a, 8, "SLA A"),
     (noimpl, 4, "! UNIMP !"),
     (noimpl, 4, "! UNIMP !"),
@@ -2164,10 +2164,56 @@ fn rr_e(cpu: &mut Cpu) {
     cpu.e = rr(cpu, cpu.e);
 }
 
+fn rr_h(cpu: &mut Cpu) {
+    cpu.h = rr(cpu, cpu.h);
+}
+
+fn rr_l(cpu: &mut Cpu) {
+    cpu.l = rr(cpu, cpu.l);
+}
+
+fn rr_mhl(cpu: &mut Cpu) {
+    let hl = cpu.hl();
+    let byte = cpu.mmu.read(hl);
+    let result = rr(cpu, byte);
+    cpu.mmu.write(hl, result);
+}
+
+fn rr_a(cpu: &mut Cpu) {
+    cpu.l = rr(cpu, cpu.a);
+}
+
 fn sla_b(cpu: &mut Cpu) {
     cpu.b = sla(cpu, cpu.b);
 }
 
+fn sla_c(cpu: &mut Cpu) {
+    cpu.c = sla(cpu, cpu.c);
+}
+
+fn sla_d(cpu: &mut Cpu) {
+    cpu.d = sla(cpu, cpu.d);
+}
+
+fn sla_e(cpu: &mut Cpu) {
+    cpu.e = sla(cpu, cpu.e);
+}
+
+fn sla_h(cpu: &mut Cpu) {
+    cpu.h = sla(cpu, cpu.h);
+}
+
+fn sla_l(cpu: &mut Cpu) {
+    cpu.l = sla(cpu, cpu.l);
+}
+
+fn sla_mhl(cpu: &mut Cpu) {
+    let hl = cpu.hl();
+    let byte = cpu.mmu.read(hl);
+    let result = sla(cpu, byte);
+    cpu.mmu.write(hl, result);
+}
+
 fn sla_a(cpu: &mut Cpu) {
     cpu.a = sla(cpu, cpu.a);
 }
-- 
GitLab