diff --git a/examples/sdl/src/main.rs b/examples/sdl/src/main.rs
index 879ac9f4d116b6e8ae4618358e432f6be4d4df84..584239cb788ae2206d9d2c51ca1fc50e1199a912 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
Binary files a/res/roms/special.gb and /dev/null differ
diff --git a/src/inst.rs b/src/inst.rs
index 04a8bd7e053d815afa4dd0f00b10b6de56f07324..98a88bbb0eba6e8e894233baed5bd89dd4aff59f 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);
 }