diff --git a/examples/sdl/src/main.rs b/examples/sdl/src/main.rs
index 4722429573330ffa542c0261b450945c933aa03b..a847518700862c7b9c763d669dccce5d16297b4c 100644
--- a/examples/sdl/src/main.rs
+++ b/examples/sdl/src/main.rs
@@ -91,15 +91,16 @@ fn main() {
     //game_boy.load_rom_file("../../res/roms/opus5.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"); // FAILED #2
+    game_boy.load_rom_file("../../res/roms/paradius/cpu/02-interrupts.gb");
     //game_boy.load_rom_file("../../res/roms/paradius/cpu/03-op sp,hl.gb"); // PASSED
     //game_boy.load_rom_file("../../res/roms/paradius/cpu/04-op r,imm.gb"); // PASSED
     //game_boy.load_rom_file("../../res/roms/paradius/cpu/05-op rp.gb"); // PASSED
     //game_boy.load_rom_file("../../res/roms/paradius/cpu/06-ld r,r.gb"); // PASSED
     //game_boy.load_rom_file("../../res/roms/paradius/cpu/07-jr,jp,call,ret,rst.gb"); // PASSED
     //game_boy.load_rom_file("../../res/roms/paradius/cpu/08-misc instrs.gb");  // PASSED
-    game_boy.load_rom_file("../../res/roms/paradius/cpu/09-op r,r.gb"); // NO FINISH
-    //game_boy.load_rom_file("../../res/roms/paradius/cpu/11-op a,(hl).gb"); // NO FINISH
+    //game_boy.load_rom_file("../../res/roms/paradius/cpu/09-op r,r.gb"); // PASSED
+    //game_boy.load_rom_file("../../res/roms/paradius/cpu/10-bit ops.gb"); //
+    //game_boy.load_rom_file("../../res/roms/paradius/cpu/11-op a,(hl).gb"); // PASSED
 
     let mut counter = 0u32;
 
diff --git a/src/inst.rs b/src/inst.rs
index 0d2b6413a3460fecda6eece528d7e10ec256f8e2..4062d8d28e858d9d56e9b8e9760af52b9e4e8bca 100644
--- a/src/inst.rs
+++ b/src/inst.rs
@@ -331,22 +331,22 @@ pub const EXTENDED: [(fn(&mut Cpu), u8, &'static str); 256] = [
     (sra_mhl, 16, "SRA [HL]"),
     (sra_a, 8, "SRA A"),
     // 0x3 opcodes
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
+    (swap_b, 8, "SWAP B"),
+    (swap_c, 8, "SWAP C"),
+    (swap_d, 8, "SWAP D"),
+    (swap_e, 8, "SWAP E"),
+    (swap_h, 8, "SWAP H"),
+    (swap_l, 8, "SWAP L"),
+    (swap_mhl, 16, "SWAP [HL]"),
     (swap_a, 8, "SWAP A"),
     (srl_b, 8, "SRL B"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
+    (srl_c, 8, "SRL B"),
+    (srl_d, 8, "SRL D"),
+    (srl_e, 8, "SRL E"),
+    (srl_h, 8, "SRL H"),
+    (srl_l, 8, "SRL L"),
+    (srl_mhl, 16, "SRL [HL]"),
+    (srl_a, 8, "SRL A"),
     // 0x4 opcodes
     (bit_0_b, 8, "BIT 0, B"),
     (bit_0_c, 8, "BIT 0, C"),
@@ -2110,7 +2110,7 @@ fn rrc_mhl(cpu: &mut Cpu) {
 }
 
 fn rrc_a(cpu: &mut Cpu) {
-    cpu.l = rrc(cpu, cpu.a);
+    cpu.a = rrc(cpu, cpu.a);
 }
 
 fn rl_b(cpu: &mut Cpu) {
@@ -2180,7 +2180,7 @@ fn rr_mhl(cpu: &mut Cpu) {
 }
 
 fn rr_a(cpu: &mut Cpu) {
-    cpu.l = rr(cpu, cpu.a);
+    cpu.a = rr(cpu, cpu.a);
 }
 
 fn sla_b(cpu: &mut Cpu) {
@@ -2253,6 +2253,37 @@ fn sra_a(cpu: &mut Cpu) {
     cpu.a = sra(cpu, cpu.a);
 }
 
+fn swap_b(cpu: &mut Cpu) {
+    cpu.b = swap(cpu, cpu.b)
+}
+
+fn swap_c(cpu: &mut Cpu) {
+    cpu.c = swap(cpu, cpu.c)
+}
+
+fn swap_d(cpu: &mut Cpu) {
+    cpu.d = swap(cpu, cpu.d)
+}
+
+fn swap_e(cpu: &mut Cpu) {
+    cpu.e = swap(cpu, cpu.e)
+}
+
+fn swap_h(cpu: &mut Cpu) {
+    cpu.h = swap(cpu, cpu.h)
+}
+
+fn swap_l(cpu: &mut Cpu) {
+    cpu.l = swap(cpu, cpu.l)
+}
+
+fn swap_mhl(cpu: &mut Cpu) {
+    let hl = cpu.hl();
+    let byte = cpu.mmu.read(hl);
+    let result = swap(cpu, byte);
+    cpu.mmu.write(hl, result);
+}
+
 fn swap_a(cpu: &mut Cpu) {
     cpu.a = swap(cpu, cpu.a)
 }
@@ -2261,6 +2292,37 @@ fn srl_b(cpu: &mut Cpu) {
     cpu.b = srl(cpu, cpu.b);
 }
 
+fn srl_c(cpu: &mut Cpu) {
+    cpu.c = srl(cpu, cpu.c);
+}
+
+fn srl_d(cpu: &mut Cpu) {
+    cpu.d = srl(cpu, cpu.d);
+}
+
+fn srl_e(cpu: &mut Cpu) {
+    cpu.e = srl(cpu, cpu.e);
+}
+
+fn srl_h(cpu: &mut Cpu) {
+    cpu.h = srl(cpu, cpu.h);
+}
+
+fn srl_l(cpu: &mut Cpu) {
+    cpu.l = srl(cpu, cpu.l);
+}
+
+fn srl_mhl(cpu: &mut Cpu) {
+    let hl = cpu.hl();
+    let byte = cpu.mmu.read(hl);
+    let result = srl(cpu, byte);
+    cpu.mmu.write(hl, result);
+}
+
+fn srl_a(cpu: &mut Cpu) {
+    cpu.a = srl(cpu, cpu.a);
+}
+
 fn bit_0_b(cpu: &mut Cpu) {
     bit_b(cpu, 0);
 }
@@ -3193,7 +3255,7 @@ fn bit_l(cpu: &mut Cpu, bit: u8) {
 }
 
 fn bit_mhl(cpu: &mut Cpu, bit: u8) {
-    let byte = cpu.read_u8();
+    let byte = cpu.mmu.read(cpu.hl());
     cpu.set_sub(false);
     cpu.set_zero(bit_zero(byte, bit));
     cpu.set_half_carry(true);