I'd like to give a couple updates/discoveries regarding the
NES.
The first doesn't exactly affect verification, so far as I've seen, but I still feel it's important to write here. The Everdrive N8 (idk if this applies to the Pro version), appears to have a bug of some kind where if all 8 buttons are pressed for any given frame, the execution of the game will pause for approx 12-13 frames. The time period is consistent down to only +/- 0.002ms, however it's hard to tell where in the frame the pause starts.
The pause causes the screen to render a solid color (so far I've only seen either black or white), while also producing zero controller latches/clock pulses, and stopping the audio. The pause will only occur on frames where the previous frame's input is anything except all 8 buttons. So any successive 8-button inputs do not cause successive pauses.
As far as I can tell, this is not a save state issue as that feature is disabled. Most importantly though, TASes will still consistently verify despite the pauses (though this perhaps may not apply to all games). It's something to be aware of while verifying TASes. I first discovered this from the
Mega Man 2 zipless movie where the author had some fun extra inputs during transition screens (
you can see here at about 10:03 what it looks like). The issue has been repeated using test movies on multiple other games. However, when the same test is run on a physical cartridge, the issue doesn't exist; indicating that the flash cart is at fault. Just in case, I also tested without the input display powered (even though it runs on an entirely separate power supply); which didn't change any results.
-----
The second thing is FCEUX. The newest version, 2.3.0, has a new feature that has helped me to better understand why many TASes will inconsistently desync, beyond just an educated guess. It allows you to randomize the initial system RAM each time you load a ROM (or re-load the same ROM). Testing a movie with this setting is a bit tricky but possible. With this feature, some movies that would normally sync consistently, now desync inconsistently. One obvious example is Mickey Mousecapade, where the enemies spawn in different locations. Before this, we had to just guess, based on repeating playback attempts alone, whether RNG was the cause for desyncs or not. With this, we can tell with a lot more certainty, whether uninitialized RAM and RNG play a factor in verifying any TAS made with FCEUX.
In order to use the feature with existing movies, you cannot load movies how you normally would; as it will reset the initial RAM setting to static default instead of random. This is similar to how the Old vs New PPU mode works when loading movies, whether through the File menu or TAS Editor.
First, set the RAM mode: Config > RAM Init > Random. Then open the ROM you want to test. I suggest opening the Hex Editor from the Debug menu at this point just to help identify RAM values.
At this point you can see the random values if you pause emulation (NES > Emulation Speed > Pause), and re-open the same ROM over and over. You should see different initial values in the hex editor each time.
There are three ways to play a movie. The normal way is to use the File > Movie menu, but this will reset the RAM Init option,
and reinitialize RAM with the default static value.
Instead, open the TAS Editor from the Tools menu. From here there's two ways. First is to use File > Open, and while this works, it will still reset the RAM Init option, but it won't reinitialize RAM. The safer way is to instead use File > Import Input. This imports only the input of the movie and doesn't touch emulator options at all. From here you can play the movie normally and see if it syncs or not. In order to reinitialize RAM again to new values, you need to close TAS Editor, and re-open the ROM. For whatever reason, you can't open the same or different ROM while the Editor is open. Again, check the Hex Editor to make sure the values have changed and redo the Import Input process.