rainwarrior wrote:
Like, maybe this has nothing at all to do with "PPU warm up", or any period of time really, but instead just what happens on the first frame with rendering on. Garbage left in the sprite system at power on that normally gets flushed out on the first rendered frame?
I'm not sure whether this can be the issue, in case I'm understanding you correctly.
Have a look:
Code:
; First thing to run: NMI
LDA #1
STA WaitForNmi
; NMI enabled
LDA #%10010000
STA $2000
; Game logic
@gameLogic:
LDA WaitForNmi
BNE @gameLogicEnd
Before enabling NMI, I set the boolean WaitForNmi to 1 (true). Then I enable the NMI.
As long as WaitForNmi is 1, the game logic (which includes the overflow check) is skipped completely.
I.e. the game logic doesn't start until NMI has actually run for the first time.
And in NMI, the PPUMASK is set and the sprites are always updated anyway:
Code:
; PPUMASK enabled
LDA #%00011110
STA $2001
; Sprite OAMDMA
LDA #$00
STA $2003
LDA #>Sprites
STA $4014
So, as far as I see, the overflow check cannot suffer from any garbage data because it is guaranteed that all sprites are written to OAMDMA before the overflow check is done.
NMI, not the game logic, is always the first thing that gets executed due to the WaitForNmi variable being initialized with 1 and the game logic checking:
if WaitForNmi != 0 then goto gameLogicEnd
Does this disprove your assumption or is there anything that I overlooked?
rainwarrior wrote:
If you can, get my variant ROM posted above tested on a system where it fails, and see if there's any visual indication of and of the 9 sprites missing?
I can ask my publisher to do this, sure.
Although I was hoping that someone on the forum has the equipment to do quick tests. The publisher always takes a while until he gets to it.