     # Register transfer instructions
     ###########################################################
 
-    TAX: =>
+    TAX: ->
         @$storeValueIntoRegisterX @accumulator
 
-    TAY: =>
+    TAY: ->
         @$storeValueIntoRegisterY @accumulator
 
-    TXA: =>
+    TXA: ->
         @$storeValueIntoAccumulator @registerX
 
-    TYA: =>
+    TYA: ->
         @$storeValueIntoAccumulator @registerY
 
-    TSX: =>
+    TSX: ->
         @$storeValueIntoRegisterX @stackPointer
 
-    TXS: =>
+    TXS: ->
         @stackPointer = @registerX
 
     ###########################################################
     # Stack push instructions
     ###########################################################
 
-    PHA: =>
+    PHA: ->
         @$pushByte @accumulator
 
-    PHP: =>
+    PHP: ->
         @$pushByte @$getStatus() | 0x10 # It pushes status with bit 4 on (break command flag)
 
     ###########################################################
     # Stack pop instructions
     ###########################################################
 
-    PLA: =>
+    PLA: ->
         @$storeValueIntoAccumulator @$popByte()
 
-    PLP: =>
+    PLP: ->
         @$setStatus @$popByte()
 
     ###########################################################
     # Accumulator bitwise instructions
     ###########################################################
 
-    AND: (address) =>
+    AND: (address) ->
         @$storeValueIntoAccumulator @accumulator & @$readByte address
 
-    ORA: (address) =>
+    ORA: (address) ->
         @$storeValueIntoAccumulator @accumulator | @$readByte address
 
-    EOR: (address) =>
+    EOR: (address) ->
         @$storeValueIntoAccumulator @accumulator ^ @$readByte address
 
-    BIT: (address) =>
+    BIT: (address) ->
         value = @$readByte address
         @zeroFlag = (@accumulator & value) == 0
         @overflowFlag = (value >>> 6) & 1

    # Increment instructions
    ###########################################################

    INC: (address) =>
        @$storeValueIntoMemory address, ((@$readByte address) + 1) & 0xFF

    INX: =>
        @$storeValueIntoRegisterX (@registerX + 1) & 0xFF

    INY: =>
        @$storeValueIntoRegisterY (@registerY + 1) & 0xFF

    ###########################################################
    # Decrement instructions
    ###########################################################

    DEC: (address) =>
        @$storeValueIntoMemory address, ((@$readByte address) - 1) & 0xFF

    DEX: =>
        @$storeValueIntoRegisterX (@registerX - 1) & 0xFF

    DEY: =>
        @$storeValueIntoRegisterY (@registerY - 1) & 0xFF

    ###########################################################
    # Comparison instructions
    ###########################################################

    CMP: (address) =>
        @$compareRegisterAndMemory @accumulator, address

    CPX: (address) =>
        @$compareRegisterAndMemory @registerX, address

    CPY: (address) =>
        @$compareRegisterAndMemory @registerY, address

    ###########################################################
    # Branching instructions
    ###########################################################

    BCC: (address) =>
        @$branchIf not @carryFlag, address

    BCS: (address) =>
        @$branchIf @carryFlag, address

    BNE: (address) =>
        @$branchIf not @zeroFlag, address

    BEQ: (address) =>
        @$branchIf @zeroFlag, address

    BVC: (address) =>
        @$branchIf not @overflowFlag, address

    BVS: (address) =>
        @$branchIf @overflowFlag,  address

    BPL: (address) =>
        @$branchIf not @negativeFlag, address

    BMI: (address) =>
        @$branchIf @negativeFlag, address

    ###########################################################
    # Jump / subroutine instructions
    ###########################################################

    JMP: (address) =>
        @programCounter = address

    JSR: (address) =>
        @$pushWord (@programCounter - 1) & 0xFFFF # The pushed address must be the end of the current instruction
        @programCounter = address

    RTS: =>
        @programCounter = (@$popWord() + 1) & 0xFFFF # We decremented the address when pushing it during JSR
        @tick()


    # Basic addressing modes
    ###########################################################

    impliedMode: ->
        @tick()

    accumulatorMode: ->
        @tick()

    immediateMode: ->
        @$moveProgramCounter 1

    ###########################################################
    # Zero page addressing modes
    ###########################################################

    zeroPageMode: ->
        @$readNextProgramByte()

    zeroPageXMode: ->
        @$getIndexedAddressByte @$readNextProgramByte(), @registerX

    zeroPageYMode: ->
        @$getIndexedAddressByte @$readNextProgramByte(), @registerY

    ###########################################################
    # Absolute addressing modes
    ###########################################################

    absoluteMode: ->
        @$readNextProgramWord()

    absoluteXMode: ->
        @$getIndexedAddressWord @$readNextProgramWord(), @registerX

    absoluteYMode: ->
        @$getIndexedAddressWord @$readNextProgramWord(), @registerY

    ###########################################################
    # Relative addressing mode
    ###########################################################

    relativeMode: ->
        base = (@programCounter + 1) & 0xFFFF # We need to get address of the next instruction
        offset = @$getSignedByte @$readNextProgramByte()
        @$getIndexedAddressWord base, offset
