code: function() {
  		var ppu = this.ppu;
  
  		if ( !ppu.enabled  ) {
  			return;
  		}
  
  		var value,
  			oam2Index = 0,
  			index = this.oamAddress;
  
  		for ( var n = 0; n < 64; n++ ) {
  			value = this.oam[ index ];
  
  			this.oam2[ oam2Index ] = value;
  
  			if ( ppu.scanline === value ) {
  				this.yCounters[ n ] = this.spriteSize;
  			}
  
  			if ( this.yCounters[ n ] ) {
  				// sprite is in range
  
  				if ( !this.scanlineOverflow ) {
  					// there's still space left in secondary OAM
  					this.oam2.set( this.oam.subarray(index, index + 4), oam2Index );
  
  					if ( n === 0 ) {
  						this.sprite0Next = true;
  					}
  
  					this.nextSpriteCount++;
  					oam2Index += 4;
  
  					if ( oam2Index === 32 ) {
  						this.scanlineOverflow = true;
  					}
  				} else {
  					// secondary OAM is full but sprite is in range. Trigger sprite overflow
  					this.spriteOverflow = true;
  
  					// TODO buggy 'm' overflow behavior
  				}
  
  				this.yCounters[ n ]--;
  			}
  
  			index += 4;
  		}
  
  		this.oamAddress = index;
  		this.oam2[ oam2Index ] = 0;
  	}
docs: Initialize secondary OAM ('sprite evaluation').