nesdev.com
http://forums.nesdev.com/

PAL NES, sprite evaluation and $2004 reads/writes
http://forums.nesdev.com/viewtopic.php?f=3&t=15763
Page 2 of 2

Author:  thefox [ Mon Apr 17, 2017 12:19 am ]
Post subject:  Re: PAL NES, sprite evaluation and $2004 reads/writes

I adapted a new notation below, hopefully it's self explanatory. Basically, 24-, * = "24 -, rest *".

PalRendOff1_v3.nes
- 24-, *
- I'm quite sure I got a 24-, 46*, - pattern when the first few times I tried this, but after the 24-, * first appeared it always appeared, over MANY tries (powerons/resets). (I may have been running a wrong test by accident the first few times, who knows.)

PalRendOff2_v3.nes
- 80-, *
- Not really consistent with results from PalRendOff1_v3.

PalRendOn1_v3.nes
- This worked as expected: 24-, *

PalRendOn2_v3.nes
- *
- Certainly not expected, looks like something goes wrong while it tries to read during VBL.

Good news is that the results were consistent across resets/powerons (discounting the first test, but that could've been my mistake). Unfortunately they don't line up with previous results.

Author:  Sour [ Mon Apr 17, 2017 3:46 pm ]
Post subject:  Re: PAL NES, sprite evaluation and $2004 reads/writes

Well, that's... confusing. I'm not really quite sure what to make of those results.

blargg's framework is able to print the values of registers on the screen, so I'll try to come up with a slightly different test that displays the values actually read from OAM - maybe it'll help figure out what's actually going on.

Author:  dougeff [ Thu Mar 15, 2018 3:11 pm ]
Post subject:  Re: PAL NES, sprite evaluation and $2004 reads/writes

Sorry for reviving a dead topic.

Question. Reading from 2004 and Micro Machines?

why?

And could it be used as a second "sprite zero" style midscreen hit?

Author:  lidnariq [ Thu Mar 15, 2018 3:19 pm ]
Post subject:  Re: PAL NES, sprite evaluation and $2004 reads/writes

See - viewtopic.php?p=142001#p142001

If you can guarantee that a specific byte occurs exactly once in OAM, and not as the Y coordinate, and the value is not the $FF "empty" value, then ... I think you might be able to poll reads from $2004 to find out when that sprite is being drawn?

Or maybe not; the rate at which the CPU can poll may well just be simply too slow to catch the exact moment that the right byte shows up in OAM evaluation.

Author:  thefox [ Thu Mar 15, 2018 3:33 pm ]
Post subject:  Re: PAL NES, sprite evaluation and $2004 reads/writes

What Micro Machines does: viewtopic.php?p=67668#p67668

It's just a simple +1/+0 CPU cycle adjustment based on what value is returned by PPU. I actually did the exact same thing in a demo I did once (before I knew what Micro Machines did...), although I don't think I ever released it in any form.

Author:  tokumaru [ Thu Mar 15, 2018 5:06 pm ]
Post subject:  Re: PAL NES, sprite evaluation and $2004 reads/writes

What about Super Cars? It's definitely trying to time a border at the top of the screen via $2004 reads.

Author:  thefox [ Fri Mar 16, 2018 12:44 am ]
Post subject:  Re: PAL NES, sprite evaluation and $2004 reads/writes

tokumaru wrote:
What about Super Cars? It's definitely trying to time a border at the top of the screen via $2004 reads.

As far as I can tell, it's polling $2004 to wait for the start of pre-render line, then uses a timed loop to go the rest of the way. (They could have polled for sprite 0 hit flag to be cleared instead, had they known about that.)

Author:  tokumaru [ Fri Mar 16, 2018 9:09 pm ]
Post subject:  Re: PAL NES, sprite evaluation and $2004 reads/writes

Well that's disappointing.

Page 2 of 2 All times are UTC - 7 hours
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/