Sorry, that’s almost it but they don’t emulate hundreds or thousands of frames, you’re right in thinking that would be implausible. Basically what happens is retroarch makes a savestate every frame and keeps a running list of the last few. When you press a button, retroarch will load one of those states from a few frames ago, press the same button then, then disable video and re-emulate those “rewound” few frames in fast forward. Then once it’s caught up to the present it re-enable video rendering. The end result is that you see the effect of your input happening the frame after you press it, instead of the normal input delay of 2 or more frames. It’s pretty neat. But yea, this means that they’re only emulating an extra 3-5 frames or so not hundreds, and they only have to do it when you press a button, not all the time.
Sorry, that’s almost it but they don’t emulate hundreds or thousands of frames, you’re right in thinking that would be implausible. Basically what happens is retroarch makes a savestate every frame and keeps a running list of the last few. When you press a button, retroarch will load one of those states from a few frames ago, press the same button then, then disable video and re-emulate those “rewound” few frames in fast forward. Then once it’s caught up to the present it re-enable video rendering. The end result is that you see the effect of your input happening the frame after you press it, instead of the normal input delay of 2 or more frames. It’s pretty neat. But yea, this means that they’re only emulating an extra 3-5 frames or so not hundreds, and they only have to do it when you press a button, not all the time.
Ah, that makes much more sense. Thanks!