Here's the current state of the PPU test results from NEStress.nes
It's really bad, and so many games clearly suffer as a result of it. I have to sort this out, I would would really appreciate your help.
I feel like I have implemented everything I need to get all the basic PPU reads and writes working correctly, here's a list of a few things which I think I have implemented correctly (or not as the case IS) to get these tests passing.
- *the first write/second write flip-flop is shared between $2005/6.
*reading $2002 resets this flip-flop
*first read from $2007 is always invalid, so one "junk" read must be made before reading from $2007. The first read does not increment the vram pointer.
*this invalid read only occures after a PPU reguster is written to, all contiguous reads of $2007 do not suffer from any "inavlid reads" (other than the first of course).
*the vram pointer wraps around 14 bits
*$2000 - $2007 are mirrored all the way to $3FFF (1023 times!). Every write or read from here is treated the same as it would be for $2000 - $2007. i.e. writing to $2008 would change $2000 and visa versa. (I haven't emulated this yet as very few games actually write to this address space)
*I have implemented pallete mirroring correctly (or atleast, i think), same with nametable mirroring.