Why does retro video game emulation not feel good? Latency analysis
As a retro video game fan, I’ve heard a few times that emulation “doesn’t feel right”. There might be an argument to that effect – while older games being emulated typically run easily at 60FPS, I’ve had the nagging feeling that there was more input lag between my clicking a button and getting the response.
There is probably some truth to this idea. Dan Luu reports that the computer with the lowest input lag he found was the 1983 apple 2e, with 30ms input-to-screen time. A gaming pc in 2018 with a high refresh rate monitor is around 50ms, for comparison, though don’t be shocked if your computer is in the 80-150ms range [footnote]You can easily measure that with a modern smartphone with the slow-motion camera feature, by counting frames of the video at 120 or 240 fps[/footnote]
You read that right – while many gamers usually obsess on the difference between 16ms and 33ms frames (eg. 60 and 30 frames per second), your input lag is anywhere between 2x and 10x that!
I ran a few experiments to confirm this, using a high speed camera to measure input lag. Main findings are as follows:
-
Modern systems are bound by software used, monitor latency and input latency (in that order). Good emulators add very little latency, so by far the most common culprit is the screen used. Common large LCD TVs are the terrible for this-- often adding up to 100ms of latency by themselves! Old school CRT screens on the other hand are goddamn fast. NES games run on old TVs have 25-30ms response times. Bad USB input devices, like slow keyboards or controllers, can add up to 20-30ms.
-
Retro systems are generally bound by software and raw processing power. A Game Boy Advance I measured, for instance, had response times vary between 30ms and 90ms depending on the game and action used. Games pushing the gameboy to its absolute limit like Driver 3 had the worst response times.
-
Emulating an old console on a recent PC will not be significantly different if they output to the same slow LCD TV. I tested this on a N64, Gamecube and PS2. You might lose a few ms emulating, but the biggest culprit will be the refresh rate of the TV you run the game on. The experience will feel very similar to running the retro hardware here.
-
Gaming on android emulators is not close to feeling like old systems soon. Android touchscreen latency in emulators varying around 80-100ms. Bluetooth controllers makes this worse by adding around 60-80ms totaling 150ms (!!!) for gaming with a controller on a phone. Moreover, many emulators on android are poorly written, often adding up to 15ms latency by themselves.
High refresh rate displays like the 120hz screen on the Razer phone may help with this, especially on touchscreens, where the refresh rate improves both input polling time and rendering time. This remains to be tested.
- Gaming on a TV by chromecasting your android screen has a total latency of 400ms (chromecast adding 300ms). Not particularly useful, but I thought I’d mention it.
If you want to learn more on input latency, I recommend reading this post by Pavel Fatin.
Appendix:
The baseline measurement for emulators I used in different systems is using the sword in the original NES Legend of Zelda. To compare the Gamecube, PS2 and N64, I used the same games (mario kart and crash team racing) with the Dolphin, PCSX2 and project64 emulators. I tested many different android NES emulators on a Nexus 4, HTC One m7 and Essential phone. The processing time calculation in android emulators is the time between when the android OS shows a touch (a setting in the developer options) and when the touch is recognized on the touchscreen by the emulator (by highlighting the button).