Posts for Bigbass


1 2
6 7
Bigbass
He/Him
Experienced Forum User, Moderator
Joined: 2/2/2021
Posts: 156
Location: Midwest
Alyosha wrote:
Here are the two runs resynced and working in the most recent BizHawk: http://tasvideos.org/userfiles/info/36428673262038989 http://tasvideos.org/userfiles/info/70450743255778683
I'm sorry to say but these both desync inconsistently. Which means we could be looking at uninitialized system RAM being used for RNG or possibly some other unknown cause. Thanks for resyncing them in emulator anyways. I will note that they still require clearing cartridge save RAM before each attempt, or else it will likely pick the wrong main menu option.
TAS Verifications | Mastodon | Github | Discord: @bigbass
Bigbass
He/Him
Experienced Forum User, Moderator
Joined: 2/2/2021
Posts: 156
Location: Midwest
Bigbass
He/Him
Experienced Forum User, Moderator
Joined: 2/2/2021
Posts: 156
Location: Midwest
Alyosha wrote:
Thinking back to when I was briefly working on NES verifications with true, the biggest mystery seemed to be the Streemerz runs. They don't use the DMC channel, so it seemed like they really should work on console, but we could never get them to.
I just attempted the "Superb Joe mode" TAS (cuz it's short). It desyncs in a few different spots. Either it'll select the wrong option in the start menu (the wrong option can vary between attempts), or it'll desync on the second screen of the first level. First thing to note is that when I probe the controller port (using either a LA or scope), there are exactly four latches per frame. (DPCM is usually three latches). It could be DPCM, though it also could just be something that game is purposefully doing for debugging or it's own testing of some kind. I went back to FCEUX. I changed the PPU option to "New PPU", loaded the inputs into the TAS editor, and discovered that it desyncs exactly the same way as it does on console (when the console manages to get into the first level). Then went to bizhawk to dump the other TAS, and that desyncs on bizhawk 2.6.1, but syncs fine on 1.11.1. I dumped it anyways and tried to verify it... As I expected, it desynced on console. In particular, I had to clear cartridge save RAM for each attempt or it would desync by selecting the wrong mode. But then it would also, consistently, desync at 2:35 (encode time) by dying. Interestingly, this is vastly different than what the more recent version of bizhawk expected. TL;DR: The existing TASes for this game cannot be verified as they were created on inaccurate emulator versions.
TAS Verifications | Mastodon | Github | Discord: @bigbass
Bigbass
He/Him
Experienced Forum User, Moderator
Joined: 2/2/2021
Posts: 156
Location: Midwest
Alyosha wrote:
Please do Mike Tyson's Punch Out if you can.
I'm happy to report that I tried this, and it has verified! You can watch the recording here: https://www.youtube.com/watch?v=X2IU8S_CB_A
Alyosha wrote:
Also Bionic Commando would be a good one. This one didn't work previously due to bot limitations (interrupt fired mid polling routine and the bot timed out the request if I remember correctly) so it would be a good test case.
Unfortunately, this TAS consistently desyncs at the same spot each attempt. It's at about 8:52 of the movie's encode video, where the player is to move the menu cursor to the right, to select the "Transfer" option. On console however, the cursor doesn't move, thus selecting the wrong option. I don't know exactly what would cause this. Perhaps an emulator inaccuracy, or something wrong with my replay device (which is always a possibility).
TAS Verifications | Mastodon | Github | Discord: @bigbass
Bigbass
He/Him
Experienced Forum User, Moderator
Joined: 2/2/2021
Posts: 156
Location: Midwest
Oh also, for the GB/C/A, I believe it should be possible to verify these games without the GBI/GBP, using the on board clock used by the CPU. The TAS input dump scripts would likely (hopefully) be very similar to those used for GBI, but would forego the additional calculation to convert to audio PWM pulses. I plan to look into this further and try to verify using an actual GBA (SP). I'd like to look into the Genesis eventually as well. If there are any particular TASes for the NES that anyone feels are rather high profile, or any they simply are interested in seeing verified, please feel free to ask me here or on Discord.
TAS Verifications | Mastodon | Github | Discord: @bigbass
Bigbass
He/Him
Experienced Forum User, Moderator
Joined: 2/2/2021
Posts: 156
Location: Midwest
I'd like to provide some updates and additional information that I know of regarding some of the named consoles, as I've been working on my own replay device recently. NES: There's definitely a lot of NES games that are available to be verified. ViGreyTech and myself have very recently begun to grind out verifications for this console. Some games are much harder to verify than others, and it's not always easy to nail down what is causing a desync. The easiest games are those that don't employ DPCM (Delta PCM audio), don't have their reset vector point to the same location as power-on, don't use save files (aka SRAM), and don't base their RNG on uninitialized system RAM. Some of these hurdles can be overcome more easily than others. DPCM will cause the console to poll input multiple times in one frame. The replay device must be able to detect these extra latches, and repeat the inputs, instead of advancing a frame as it normally would. This is also known as "window filtering" or "latch windows". The typical period allotted to a window is about 8ms, which is about half a frame. Meaning any latch+clock polls from the beginning of the frame, over 8ms, will get the same input values. Games that use save files or save data of some kind, can be verified by either using a programmer to clear memory, using a flash cart, or maybe by removing the battery (if it is battery-backed). Some games may work by just deleting the save file normally in-game, but this doesn't always clear all necessary data. On some games, when you press the console reset button, it will reset to a point after the splash/intro screen(s), which usually desyncs the run. This is trickier to get around, and the solution depends on the replay device in use, and how you are loading the game (physical cart vs flash cart). On a real/repro cart, if the replay device supports it, you can start from console power-on. Flash carts are much trickier. I believe it's possible to start a run from the menu of a flash cart, if the right number of blank frames are inserted before the actual TAS, or otherwise detecting when the game actually starts (such as looking for long periods of no input polls). On the Everdrive N8 for example, I've noticed that a different amount of input frames will happen depending on which game you play. Uninitialized system RAM is the hardest difficulty. ViGreyTech has developed a ROM that can initialize RAM, and then hold the console in a loop so that the user can swap out that ROM with the real game cartridge, and reset from there. However, it hasn't been tested whether this would work when using a flash cart for the game. There may also be some way to change the flash cart's firmware/software to initialize RAM just before starting up a game. There is also a chance for random, extraneous, clock pulses during an input poll. This is fixed by using "clock filtering". Upon seeing a clock pulse, a replay device will ignore all new clock pulses for a set amount of time. The value needed can vary. Usually 2-4us is plenty. N64: Like Alyosha said, this console really boils down to inaccurate emulators. The only reason that SM64 and MK64 are reliably verifiable, is because of a rare way in which they handle inputs. While the N64 effectively uses a single clock source (though the CPU is scaled up from it), there are multiple components which can run different tasks at the same time as each other. But most importantly, the way laggy frames are handled can easily desync runs if emulators aren't accurate enough. According to fraser from the N64 homebrew community: The SDK used to create N64 games will use the Video Interface interrupt to trigger a request to get the input state of controllers. Ideally this would happen 60 times per second (60 FPS, or 16.66ms per frame), but in practice it turned out to be more like 20-30 FPS when lag frames are taken into account. The request will be sent to the Peripheral Interface (aka PIF), and returned to system RAM during a different interrupt. While the PIF does that task, the CPU and RCP will be at work with the rest of that frame's processing. If the frame takes too long to render (say, 17ms), the frame before that, will be rendered again. When this happens, the frame after that, will still poll for input again. At the end of the frame, the previous (17ms) frame's render will finally be displayed. However, because the 17ms frame used the input from when that frame first started, the following frame's input is essentially discarded. Certain games, like SM64 and MK64 will not poll multiple times after laggy frames, thus lag cannot cause discarded inputs. Bottom line is, either emulators must become far more cycle accurate, or we have to figure out some way to detect when these lag frames occur, and thus which inputs are discarded. The former is likely the most viable option. There are two emulators I know of that are in development, and could become accurate enough for TASing purposes (https://ares.dev/ and https://github.com/Dillonb/n64/). CEN64 is not, and will likely never be accurate enough for TASing. It claims to be cycle accurate, but it isn't. MAME is likely the most accurate emulator right now for the console, but to what extent I don't know, and it doesn't have TASing tools.
TAS Verifications | Mastodon | Github | Discord: @bigbass
1 2
6 7