             
             // LD_ST_V (Set the soundTimer to the value in register V)
             0xF018: { arg in
-                let registerX = Int(arg & 0x1)
+                let registerX = Int(arg)
                 self.soundTimer = self.V[registerX]
             },
             
             // ADD_I_V (I and the register are added and stored in I)
             0xF01E: { arg in
-                let registerX = Int(arg & 0x1)
+                let registerX = Int(arg)
                 self.I = self.I + UInt16(self.V[registerX])
             },
             
             // LD_F_V (I is set to the address of the corresponding font block representing the value in register V)
             0xF029: { arg in
-                // Todo:
+                let registerX = Int(arg)
+                let valueX = self.V[registerX]
+                
+                // Get the memory offset for this hex number (a single font consists of 5 bytes)
+                let memoryOffset = Chip8.FontMemoryLocation + UInt16(valueX * 5)
+                
+                // And point to the beginning of the font
+                self.I = memoryOffset
             },
             
             // LD_B_V (Stores the binary decimal representation of the value of register V in I)

        self.pc = 0
        self.delayTimer = 0
        self.soundTimer = 0
    }
    
    /**
     * Starts the main loop
     */

            
            // LD_V_DT (Set the register V to the value in dt)
            0xF007: { arg in
                let registerX = Int(arg & 0x10)
                self.V[registerX] = self.delayTimer
            },
            
