diff --git a/examples/sdl/src/main.rs b/examples/sdl/src/main.rs
index 576485d5c9b51dd501ba6975a610fdf736a138de..c6881f53687569f6f121272ba95c08e6046a3dbb 100644
--- a/examples/sdl/src/main.rs
+++ b/examples/sdl/src/main.rs
@@ -79,11 +79,11 @@ fn main() {
         .unwrap();
 
     let mut game_boy = GameBoy::new();
-    game_boy.load_boot_sgb();
+    game_boy.load_boot_dmg();
     //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/ld_r_r.gb");
-    //game_boy.load_rom_file("../../res/roms/opus5.gb");
+    //game_boy.load_rom_file("../../res/roms/ld_r_r.gb");
+    game_boy.load_rom_file("../../res/roms/special.gb");
 
     let mut counter = 0;
 
diff --git a/src/inst.rs b/src/inst.rs
index 05c7735bd51eb4eb24d443a29220d6af92163409..b4109886c133087a19d584cbc3bb95e9d0c7d039 100644
--- a/src/inst.rs
+++ b/src/inst.rs
@@ -197,14 +197,14 @@ pub const INSTRUCTIONS: [(fn(&mut Cpu), u8, &'static str); 256] = [
     (noimpl, 4, "! UNIMP !"),
     (or_a_mhl, 8, "OR A, [HL]"),
     (or_a_a, 4, "OR A, A"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
-    (noimpl, 4, "! UNIMP !"),
+    (cp_a_b, 4, "CP A, B"),
+    (cp_a_c, 4, "CP A, C"),
+    (cp_a_d, 4, "CP A, D"),
+    (cp_a_e, 4, "CP A, E"),
+    (cp_a_h, 4, "CP A, H"),
+    (cp_a_l, 4, "CP A, L"),
     (cp_a_mhl, 8, "CP A, [HL]"),
-    (noimpl, 4, "! UNIMP !"),
+    (cp_a_a, 4, "CP A, A"),
     // 0xc opcodes
     (ret_nz, 8, "RET NZ"),
     (pop_bc, 12, "POP BC"),
@@ -1320,11 +1320,39 @@ fn or_a_a(cpu: &mut Cpu) {
     cpu.set_carry(false);
 }
 
+fn cp_a_b(cpu: &mut Cpu) {
+    sub_set_flags(cpu, cpu.a, cpu.b);
+}
+
+fn cp_a_c(cpu: &mut Cpu) {
+    sub_set_flags(cpu, cpu.a, cpu.c);
+}
+
+fn cp_a_d(cpu: &mut Cpu) {
+    sub_set_flags(cpu, cpu.a, cpu.d);
+}
+
+fn cp_a_e(cpu: &mut Cpu) {
+    sub_set_flags(cpu, cpu.a, cpu.e);
+}
+
+fn cp_a_h(cpu: &mut Cpu) {
+    sub_set_flags(cpu, cpu.a, cpu.h);
+}
+
+fn cp_a_l(cpu: &mut Cpu) {
+    sub_set_flags(cpu, cpu.a, cpu.l);
+}
+
 fn cp_a_mhl(cpu: &mut Cpu) {
     let byte = cpu.mmu.read(cpu.hl());
     sub_set_flags(cpu, cpu.a, byte);
 }
 
+fn cp_a_a(cpu: &mut Cpu) {
+    sub_set_flags(cpu, cpu.a, cpu.a);
+}
+
 fn ret_nz(cpu: &mut Cpu) {
     if cpu.get_zero() {
         return;