MCPcopy
hub / github.com/fogleman/nes / evaluateSprites

Method evaluateSprites

nes/ppu.go:614–643  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

612}
613
614func (ppu *PPU) evaluateSprites() {
615 var h int
616 if ppu.flagSpriteSize == 0 {
617 h = 8
618 } else {
619 h = 16
620 }
621 count := 0
622 for i := 0; i < 64; i++ {
623 y := ppu.oamData[i*4+0]
624 a := ppu.oamData[i*4+2]
625 x := ppu.oamData[i*4+3]
626 row := ppu.ScanLine - int(y)
627 if row < 0 || row >= h {
628 continue
629 }
630 if count < 8 {
631 ppu.spritePatterns[count] = ppu.fetchSpritePattern(i, row)
632 ppu.spritePositions[count] = x
633 ppu.spritePriorities[count] = (a >> 5) & 1
634 ppu.spriteIndexes[count] = byte(i)
635 }
636 count++
637 }
638 if count > 8 {
639 count = 8
640 ppu.flagSpriteOverflow = 1
641 }
642 ppu.spriteCount = count
643}
644
645// tick updates Cycle, ScanLine and Frame counters
646func (ppu *PPU) tick() {

Callers 1

StepMethod · 0.95

Calls 1

fetchSpritePatternMethod · 0.95

Tested by

no test coverage detected