         value = @getStatus()
         @vblankFlag = 0     # Cleared by reading status
         @writeToogle = 0    # Cleared by reading status
-        @suppressVBlank = true            if @cycleFlags & F_VB_START  # Reading just before VBlank disables NMI generation and VBlank flag setting
-        @cpu.clearInterrupt Interrupt.NMI if @cycleFlags & F_VB_START2 # Reading at the start of VBlank disables only NMI generation
+        @suppressVBlank = true if @cycleFlags & F_VB_START  # Reading just before VBlank disables VBlank flag setting
+        @supressNMI = true     if @cycleFlags & F_VB_START2 # Reading just before VBlank and 2 cycles after VBlank disables NMI generation
         value
 
     getStatus: ->

    ###########################################################

    updateVBlank: ->
        if @cycleFlags & F_VB_START
            @$enterVBlank()
        else if @cycleFlags & F_VB_END
            @$leaveVBlank()

    enterVBlank: ->
        unless @suppressVBlank
            @vblankFlag = 1
            @cpu.activateInterrupt Interrupt.NMI if @nmiEnabled
        @vblankActive = 1
        @frameAvailable = true

    leaveVBlank: ->
        @vblankFlag = 0
        @vblankActive = 0
        @spriteZeroHit = 0
        @suppressVBlank = false

    generateDelayedNMI: ->
        @cpu.activateInterrupt Interrupt.NMI
        @delayedNMI = false

    ###########################################################
    # Scanline / cycle counters

        nmiEnabledOld = @nmiEnabled
        @setControl value
        @tempAddress = (@tempAddress & 0xF3FF) | (value & 0x03) << 10 # T[11,10] = C[1,0]
        if @vblankFlag and not nmiEnabledOld and @nmiEnabled and not (@cycleFlags & F_VB_END)
            @nmiDelay = 1  # Generate NMI after next instruction when its enabled (from 0 to 1) during VBlank
        value

    setControl: (value) ->
