Emulating retro games and consoles on a computer is a well-established concept, with tools for playing almost anything you could want. This has freed up some community developers to focus on ensuring software emulation accurately re-creates the hardware experience. Other emulation engineers, meanwhile, are focused on eliminating latency and input lag. This has led to a breakthrough in the RetroArch emulation front-end software that almost eliminates the time between when you press a button and when something happens on the screen.
A lot of emulators have found ways to eliminate most lag. This means that if you have a fast enough computer and your settings are correct, you can put a command into a USB or Bluetooth controller on your PC, and the onscreen action will react as quickly as it did on original hardware. But RetroArch is notable because its newest feature goes even further and reduces input lag to a point that is “better than reality” — and it works.
Input lag was not a problem in the 1980s because controllers were wired and you connected your Nintendo Entertainment System to a CRT television (which can refresh thousands of times every second and doesn’t have an image processor as opposed to 60hz LCDs). Developers also built their games specifically for a set system, and trying to get an emulator to duplicate hardware precisely can often mean more latency. That’s why so many people just want to use the original hardware and games on legacy CRTs, or why something like the Super NT device that uses special chips to replicate Super Nintendo hardware is so attractive.
But RetroArch might reduce latency better than anything else. The new option is in Latency menu in the RetroArch interface. It is called “run-ahead,” and I’ll try to explain how it works. It’s a lot like time travel. If you hit the A button to jump in Super Mario Bros. on an actual Nintendo Entertainment System, they game processes that info and then displays the result at the next possible frame. For Mario jumping, that takes about two frames. With run-ahead turned on, the game is constantly running ahead 1 or 2 (or up to 6) frames for every rendered frame. So when you hit A to jump in RetroArch, the game instantly processes that info, runs the game in the background 1 or 2 frames ahead, and then saves the state. It then loads that future state on top of what you are seeing. The result is that you Mario’s jump now only takes one frame.
For a game that runs at 60 frames per second like Super Mario Bros., run-ahead can cut out 17ms of input lag that was baked into the original game. I tested this to see if it was noticeable, and it absolutely is. Mike Tyson’s Punch-Out for the NES is notorious for how tough it is when you add any input lag, that makes it tough to play even on a modern LCD TV — let alone an emulator. But forcing RetroArch to run two frames ahead changed the game for me. I went from getting caught by most haymakers from the enemy boxers to reliably dodging most attacks once I understood the patterns and tells.
I think this tech is also awesome because I sometimes stream my retro games from my PC to a Steam Link in another room. That streaming introduces latency that run-ahead could counteract. I don’t know what the potential is here. It’s possible that run-ahead is only viable with older games that are easy to run now, but I wonder if Netflix-like game streaming services could figure out a way to do this next to reduce latency in their services.
For now, however, I’m just gonna use this to enjoy some old games and see if I can finally beat Mike Tyson.