From ce49dbd247aae0362b29547a4148b7a73d813558 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:27:16 +0100
Subject: [PATCH] feat: new instruction

---
 src/inst.rs | 97 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 81 insertions(+), 16 deletions(-)

diff --git a/src/inst.rs b/src/inst.rs
index 515ff523..2ddc8412 100644
--- a/src/inst.rs
+++ b/src/inst.rs
@@ -104,20 +104,20 @@ pub const INSTRUCTIONS: [(fn(&mut Cpu), u8, &'static str); 256] = [
     (ld_e_mhl, 8, "LD E, [HL]"),
     (ld_e_a, 4, "LD E, A"),
     // 0x6 opcodes
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
+    (ld_h_b, 4, "LD H, B"),
+    (ld_h_c, 4, "LD H, C"),
+    (ld_h_d, 4, "LD H, D"),
+    (ld_h_e, 4, "LD H, E"),
+    (ld_h_h, 4, "LD H, H"),
+    (ld_h_l, 4, "LD H, L"),
+    (ld_h_mhl, 8, "LD H, [HL]"),
     (ld_h_a, 4, "LD H, A"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
+    (ld_l_b, 4, "LD L, B"),
+    (ld_l_c, 4, "LD L, C"),
+    (ld_l_d, 4, "LD L, D"),
+    (ld_l_e, 4, "LD L, E"),
+    (ld_l_h, 4, "LD L, H"),
+    (ld_l_l, 4, "LD L, L"),
     (ld_l_mhl, 8, "LD L, [HL]"),
     (ld_l_a, 4, "LD L, A"),
     // 0x7 opcodes
@@ -125,8 +125,8 @@ pub const INSTRUCTIONS: [(fn(&mut Cpu), u8, &'static str); 256] = [
     (ld_mhl_c, 8, "LD [HL], C"),
     (ld_mhl_d, 8, "LD [HL], D"),
     (ld_mhl_e, 8, "LD [HL], E"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
+    (ld_mhl_h, 8, "LD [HL], H"),
+    (ld_mhl_l, 8, "LD [HL], L"),
     (halt, 4, "HALT"),
     (ld_mhl_a, 8, "LD [HL], A"),
     (ld_a_b, 4, "LD A, B"),
@@ -136,7 +136,7 @@ pub const INSTRUCTIONS: [(fn(&mut Cpu), u8, &'static str); 256] = [
     (ld_a_h, 4, "LD A, H"),
     (ld_a_l, 4, "LD A, L"),
     (ld_a_mhl, 8, "LD A, [HL]"),
-    (noimpl, 4, "! UNIMP !"),
+    (ld_a_a, 4, "LD A, A"),
     // 0x8 opcodes
     (add_a_b, 4, "ADD A, B"),
     (add_a_c, 4, "ADD A, C"),
@@ -1081,10 +1081,63 @@ fn ld_e_a(cpu: &mut Cpu) {
     cpu.e = cpu.a;
 }
 
+fn ld_h_b(cpu: &mut Cpu) {
+    cpu.h = cpu.b;
+}
+
+fn ld_h_c(cpu: &mut Cpu) {
+    cpu.h = cpu.c;
+}
+
+fn ld_h_d(cpu: &mut Cpu) {
+    cpu.h = cpu.d;
+}
+
+fn ld_h_e(cpu: &mut Cpu) {
+    cpu.h = cpu.e;
+}
+
+fn ld_h_h(cpu: &mut Cpu) {
+    cpu.h = cpu.h;
+}
+
+fn ld_h_l(cpu: &mut Cpu) {
+    cpu.h = cpu.l;
+}
+
+fn ld_h_mhl(cpu: &mut Cpu) {
+    let byte = cpu.mmu.read(cpu.hl());
+    cpu.h = byte;
+}
+
 fn ld_h_a(cpu: &mut Cpu) {
     cpu.h = cpu.a;
 }
 
+fn ld_l_b(cpu: &mut Cpu) {
+    cpu.l = cpu.b;
+}
+
+fn ld_l_c(cpu: &mut Cpu) {
+    cpu.l = cpu.c;
+}
+
+fn ld_l_d(cpu: &mut Cpu) {
+    cpu.l = cpu.d;
+}
+
+fn ld_l_e(cpu: &mut Cpu) {
+    cpu.l = cpu.e;
+}
+
+fn ld_l_h(cpu: &mut Cpu) {
+    cpu.l = cpu.h;
+}
+
+fn ld_l_l(cpu: &mut Cpu) {
+    cpu.l = cpu.l;
+}
+
 fn ld_l_mhl(cpu: &mut Cpu) {
     let byte = cpu.mmu.read(cpu.hl());
     cpu.l = byte;
@@ -1110,6 +1163,14 @@ fn ld_mhl_e(cpu: &mut Cpu) {
     cpu.mmu.write(cpu.hl(), cpu.e);
 }
 
+fn ld_mhl_h(cpu: &mut Cpu) {
+    cpu.mmu.write(cpu.hl(), cpu.h);
+}
+
+fn ld_mhl_l(cpu: &mut Cpu) {
+    cpu.mmu.write(cpu.hl(), cpu.l);
+}
+
 fn halt(cpu: &mut Cpu) {
     cpu.halt();
 }
@@ -1147,6 +1208,10 @@ fn ld_a_mhl(cpu: &mut Cpu) {
     cpu.a = byte;
 }
 
+fn ld_a_a(cpu: &mut Cpu) {
+    cpu.a = cpu.a;
+}
+
 fn add_a_b(cpu: &mut Cpu) {
     cpu.a = add_set_flags(cpu, cpu.a, cpu.b);
 }
-- 
GitLab