A computer running a native game is like an English speaker reading an English book.
A computer running an emulator is like an English speaker reading a French book using a French-to-English dictionary.
Consoles usually have different processors with different instruction sets than a PC. This means the emulator needs to translate the instructions in runtime, which makes it significantly slower.
Well, in the case of, say, Far Cry 3, it was never coded to run easily on the computer, and that can be attributed to mainly spaghetti code. Just publishers making a game for console, and pumping out the pc port quickly and leaving it. And emulation sometimes has to run a whole bunch of code to port it in real time to pc.
Emulators on a basic level make the game think it’s running on different hardware. Emulators can be made to take advantage of modern hardware but that’s more complex and often unecessary. Older games, especially console games, cannot be easily optimised or updated so what’s left is that you have a game that thinks it’s running on a system that is far weaker than the actual system it’s on. It can’t even take advantage of extra ram or more processing cores because it doesn’t know they’re there, it’s not programmed to use those resources.
That can mean a wide variety of things depending on the emulator and game from the game not taking advantage of all the processor has to offer to even running exclusively on part of the processor despite the system having a graphics card. This again is owed due to the differences in architecture between consoles and computers.
This can also be seen on old computer games that may not require an emulator at all, but they still are not optimised to take advantage of newer hardware. However with pc games it’s often the case that this can be modded into the game through community made patches.
Another factor to performance is the accuracy of the emulation. Looking at older consoles, a lot of them had very unique hardware architectures which don’t resemble modern PCs in any way.
“High level emulation” or HLE, essentially looks at the code running and says “oh, you want to do X, on this system that means I should do Y to achieve the same thing”, which is a fast, but not very accurate way of handling things since you can’t always directly translate an action on one system to another. The emulation will have subtle differences to the original.
The alternative is “low level emulation” or LLE which doesn’t just try to translate instructions, but actually attempts to fully simulate part or all of the original hardware. This is far more intensive, because in some cases you’re trying to simulate things like voltages, hardware timings, data transfer rates, the electron beam in an old TV and so on. This is why “cycle-accurate emulators” like bSnes have hardware requirements hundreds of times higher than the original system had.
Why do we bother with such complex, low level emulation? Well, it’s a question of accuracy and faithfulness to the original experience. A game running natively on a console may actually play quite differently on a high-level emulator. Where the real system might crash, the emulator might play fine or with some visual glitches. Where the player can successfully make a jump in an emulator, it might have been impossible on the original system.
How low level you go is partly a philosophical question, whether you want to replicate the broad experience of the original game, or replicate it exactly as it was all those years ago.
Latest Answers