     ###########################################################
 
     tick: ->
-        @startFrame() if @isFirstRenderingCycle()
         @updateFramePixel() if @isRenderingCycle()
         @updateScrolling() if @isRenderingInProgress()
         @incrementCycle()
-
-    isFirstRenderingCycle: ->
-        @scanline is 0 and @cycle is 1
 
     isRenderingCycle: ->
         0 <= @scanline <= 239 and 1 <= @cycle <= 256
     
     isRenderingInProgress: ->
-        not @isVBlank() and @isRenderingEnabled()
+        not @isVBlank() and (@spritesVisible or @backgroundVisible)
 
     isVBlank: ->
         241 <= @scanline <= 260
-
-    isRenderingEnabled: ->
-        @spritesVisible or @backgroundVisible
 
     isFrameAvailable: ->
         @frameAvailable

        else
            backgroundColor

    updateScrolling: ->
        @incrementFineYScroll() if @cycle is 256
        @incrementFineXScroll() if 1 <= @cycle <= 256
        @copyHorizontalScrollBits() if @cycle is 257
        @copyVerticalScrollBits() if @scanline is -1 and 280 <= @cycle <= 304

    incrementCycle: ->
        @cycle++

        topY = Math.max 0, bottomY - spriteHeight
        for spriteY, address in @primaryOAM by 4 when topY < spriteY <= bottomY
            @fetchSprite address, spriteHeight, bottomY - spriteY
            @spriteScalineOverflow = 1 if @secondaryOAM.length is 8 
            # We allow more than 8 sprites on scanline, otherwise it looks ugly in some games.

    fetchSprite: (address, height, rowNumber) ->
        patternNumber = @primaryOAM[++address]
