diff --git a/examples/sdl/src/main.rs b/examples/sdl/src/main.rs
index 2a5968850e8810d1f67262292f3f8df78626957b..bd1aa0c555a923e3bd2ab654ba3a1bab0b63b81a 100644
--- a/examples/sdl/src/main.rs
+++ b/examples/sdl/src/main.rs
@@ -4,7 +4,7 @@ fn main() {
     let mut game_boy = GameBoy::new();
     game_boy.load_boot_default();
 
-    for i in 0..24650 {
+    for i in 0..24700 {
         game_boy.clock();
         if game_boy.cpu().pc() >= 0x3032 {
             println!("{}", i);
diff --git a/src/cpu.rs b/src/cpu.rs
index e15cb36efa05a32cf2a215c49e08e2f6ff83b686..b16002dd59777e5f5e0273cb4d229f790ae837b5 100644
--- a/src/cpu.rs
+++ b/src/cpu.rs
@@ -14,457 +14,457 @@ pub const INSTRUCTIONS: [(fn(&mut Cpu), u8, &'static str); 256] = [
     (rlca, 4, "RLCA"),
     (ld_mu16_sp, 20, "LD [u16], SP"),
     (add_hl_bc, 8, "ADD HL, BC"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     (inc_c, 4, "INC C"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
     (ld_c_u8, 8, "LD C, u8"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
     // 0x1 opcodes
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
     (ld_de_u16, 12, "LD DE, u16"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (inc_de, 8, "INC DE"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     (rla, 4, "RLA"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     (ld_a_mde, 8, "LD A, [DE]"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x2 opcodes
     (jr_nz_i8, 8, "JR NZ, i8"),
     (ld_hl_u16, 12, "LD HL, u16"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (ld_mhli_a, 8, "LD [HL]+, A"),
+    (inc_hl, 8, "INC HL"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x3 opcodes
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
     (ld_sp_u16, 12, "LD SP, u16"),
     (ld_mhld_a, 8, "LD [HL]-, A"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     (ld_a_u8, 8, "LD A, u8"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
     // 0x4 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     (ld_c_a, 4, "LD C, A"),
     // 0x5 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x6 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x7 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x8 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x9 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0xa opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     (xor_a_a, 4, "XOR A, A"),
     // 0xb opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0xc opcodes
     (ret_nz, 8, "RET NZ"),
     (pop_bc, 12, "POP BC"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     (push_bc, 16, "PUSH BC"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (ret, 16, "RET"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     (call_u16, 24, "CALL u16"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0xd opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0xe opcodes
     (ld_mff00u8_a, 12, "LD [FF00+u8], A"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
     (ld_mff00c_a, 8, "LD [FF00+C], A"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0xf opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
 ];
 
 pub const BITWISE: [(fn(&mut Cpu), u8, &'static str); 176] = [
     // 0x0 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x1 opcodes
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
     (rl_c, 8, "RL C"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x2 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x3 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x4 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x5 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x6 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x7 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     (bit_7_h, 8, "BIT 7, H"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x8 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0x9 opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
     // 0xa opcodes
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
-    (nop, 4, "NOP"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
+    (nop, 4, "! UNIMP !"),
 ];
 
 pub struct Cpu {
@@ -765,6 +765,10 @@ fn ld_de_u16(cpu: &mut Cpu) {
     cpu.set_de(word);
 }
 
+fn inc_de(cpu: &mut Cpu) {
+    cpu.set_de(cpu.de().wrapping_add(1));
+}
+
 fn rla(cpu: &mut Cpu) {
     let carry = cpu.get_carry();
 
@@ -798,6 +802,15 @@ fn ld_hl_u16(cpu: &mut Cpu) {
     cpu.set_hl(word);
 }
 
+fn ld_mhli_a(cpu: &mut Cpu) {
+    cpu.mmu.write(cpu.hl(), cpu.a);
+    cpu.set_hl(cpu.hl().wrapping_add(1));
+}
+
+fn inc_hl(cpu: &mut Cpu) {
+    cpu.set_hl(cpu.hl().wrapping_add(1));
+}
+
 fn ld_sp_u16(cpu: &mut Cpu) {
     cpu.sp = cpu.read_u16();
 }
@@ -843,6 +856,10 @@ fn push_bc(cpu: &mut Cpu) {
     cpu.push_word(cpu.bc());
 }
 
+fn ret(cpu: &mut Cpu) {
+    cpu.pc = cpu.pop_word();
+}
+
 fn call_u16(cpu: &mut Cpu) {
     let word = cpu.read_u16();
     cpu.push_word(cpu.pc);