 
     step: ->
         @resolveInterrupt()
-        operation = @readOperation()
-        @emptyReadCycle = operation.emptyReadCycle
+
+        operation        = @readOperation()
+        instruction      = operation.instruction
+        addressingMode   = operation.addressingMode
+        @emptyReadCycle  = operation.emptyReadCycle
         @emptyWriteCycle = operation.emptyWriteCycle
-        addressingMode = operation.addressingMode
-        instruction = operation.instruction
-        address = @computeAddress addressingMode
-        @executeInstruction instruction address
+
+        instruction addressingMode()
 
     ###########################################################
     # Program execution

        prevValue = @programCounter
        @programCounter = (@programCounter + size) & 0xFFFF
        prevValue

    computeAddress: (addressingMode) ->
        @addressingModesTable[addressingMode]()

    executeInstruction: (instruction, address) ->
        @instructionsTable[instruction](address)

    ###########################################################
    # Interrupt handling

Bit5 = 1 << 5
Bit6 = 1 << 6
Bit7 = 1 << 7

###########################################################
# Interrupt types
