Editing Emulation accuracy
Jump to navigation
Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
− | + | An emulator is '''accurate''' when an instruction given to both the program and the hardware results in both outputting the same result. That means accurate emulators produce much fewer audio and video glitches, usually at the cost of more processing power needed. It's often achieved by using tighter synchronization. | |
− | + | Notable accuracy-centric emulators include [[Nintendo_Entertainment_System_emulators#Emulators|Mesen2]] (NES), [[ares]] (SNES, N64, NGP, WonderSwan), and [[BlastEm]] (Sega Mega Drive) among others. | |
− | + | The more accurate an emulator is, the lesser deviations there is from real hardware behavior but the more demanding it is. Ironically, that aspect might at times be at odds with how authentic the experience is, when it introduces [[Input lag]]. A similar debate surrounds CRT shaders as well. Not to mention the hardware intensive nature of very accurate emulators for later consoles may be at odds with the emulator's usability, especially with the recent collapse of Moore's Law (in layman's terms, you can't just "buy a better PC" if semiconductor technology does not catch up fast enough with what it takes for accurate emulation that makes zero compromises for optimizing speed) | |
− | + | As a result, accuracy and emulator authenticity continue to be controversial subjects and highly a matter of opinion depending on what aspect of the experience the user values more. | |
==Types== | ==Types== | ||
− | + | ===Low accuracy=== | |
+ | An emulator isn't accurate when it has a large amount of visual and audio glitches and favors performance as much as possible. To work around these glitches, emulator developers typically include game-specific hacks (and prioritize popular games) to skip over problems, such as compatibility issues that can cause games to break. Many times, these emulators will be deemed incompatible with the less popular (obscure) games. As Near (then known as byuu) explains in a 2011 Ars Technica article linked below, ''Speedy Gonzales: Los Gatos Bandidos'' will soft lock towards the end due to a specific hardware edge case that isn't emulated in [[ZSNES]] or [[Snes9x]], but is properly dealt with in his own emulator [[higan]] due to his documentation of the system. This can also become very problematic when ROM hacks abuse software errors (aka. emulator oversights) to create otherwise impossible behaviors to achieve what they can. When a ROM hack can only be used in that one specific emulator, he explains, it becomes incompatible with real hardware (either through a flash cart or printed), and that such an issue has occurred with [[ZSNES]] before and continues to occur with Nintendo 64 ROM hacks. | ||
− | + | Newer emulators tend to favor High-Level Emulation (HLE) as opposed to Low-Level Emulation (LLE), which results in lower accuracy because as supposed to mimicking the hardware these games were released on, High-Level emulators mimic how the games themselves behaved on the desired system. While emulators like [[Dolphin]] favor accuracy but still retain HLE for performance and have successfully used it to an advantage, these types of exceptions are uncommon and [[High/Low level emulation|it can still hinder accuracy]]. | |
− | |||
===Medium accuracy=== | ===Medium accuracy=== | ||
− | + | Most emulators headed by multiple developers tend to have fewer glitches but still, have many problems. | |
− | |||
− | |||
===High accuracy=== | ===High accuracy=== | ||
− | High accuracy is a level of precision that emulator developers strive for when achieving | + | High emulation accuracy is a level of precision that emulator developers strive for when achieving cycle accuracy is not practical or necessary. In this approach, the emulator replicates the components of the original system as closely as possible, aiming for a faithful reproduction of the system's behavior. The pursuit of high accuracy often results in the need for more processing power, leading to fewer audio and visual glitches and improved handling of edge cases used by creative game programmers. Emulators with high accuracy may or may not be cycle-accurate, but they generally exhibit a notable level of fidelity to the original hardware. Achieving 100% compatibility with commercially released games is a common goal for emulators with high accuracy. |
− | === | + | ===Very high accuracy=== |
− | + | Very high emulation accuracy represents an even more meticulous level of precision in replicating the original system. Emulators with very high accuracy go beyond the standard high-accuracy level, aiming to achieve an even closer match to the behavior of the original hardware. This heightened level of accuracy often involves more sophisticated techniques, demanding increased computational resources. The distinction between high and very high accuracy lies in the finer details and nuances that very high accuracy seeks to capture, resulting in an emulation experience that minimizes any discrepancies or artifacts compared to the original system. Emulators with very high accuracy may be especially appealing to users seeking an unparalleled level of authenticity and completeness in their emulation experience. | |
− | + | ===Cycle-based accuracy=== | |
+ | By emulating the components in a cycle-per-cycle fashion, we get cycle-based accuracy. This type of emulation accuracy aims to reproduce the system's functional behavior within a specified cycle without necessarily adhering to the exact timing of each cycle. Since this method doesn't go out of its way to mimic the precise timing and execution of each cycle, it may not be able to handle all hardware edge cases. | ||
− | + | An example of a cycle-based emulator is jgnes with its cycle-based emulation of the Ricoh 2A03 and PPU. | |
− | === | + | ===Cycle accuracy=== |
− | + | Unlike cycle-based accuracy, cycle accuracy is a more stringent form of emulation accuracy that seeks to precisely replicate the timing and execution of each individual cycle of the original hardware. This type of emulation accuracy aims to match the appropriate timing and execution of each cycle. The authenticity and performance of the emulator in question depends in how cycle accuracy is implemented. Typically, emulators with this level of accuracy ensure that situations where precise timing is required are properly dealt with. | |
− | |||
− | + | Examples of cycle-accurate emulators are Mesen2 with its NES and SNES emulation, CEN64, and BlastEm. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===Subcycle accuracy=== | ===Subcycle accuracy=== | ||
Line 51: | Line 42: | ||
Impinging upon chip accuracy, some chips, such as the Commodore 64's [[wikipedia:MOS_Technology_SID|SID]] are part digital and part analog. The analog part can be emulated in a discrete fashion, but it is often desirable to take those discrete steps at a multiple of the clock rate. However, the difference is usually not observable to other components in the emulated machine so although this is subcycle accuracy as some part of the state of the chip is known as a precision of greater than one cycle, it doesn't tend to affect the design of the emulator as a whole. | Impinging upon chip accuracy, some chips, such as the Commodore 64's [[wikipedia:MOS_Technology_SID|SID]] are part digital and part analog. The analog part can be emulated in a discrete fashion, but it is often desirable to take those discrete steps at a multiple of the clock rate. However, the difference is usually not observable to other components in the emulated machine so although this is subcycle accuracy as some part of the state of the chip is known as a precision of greater than one cycle, it doesn't tend to affect the design of the emulator as a whole. | ||
− | |||
− | |||
===Gate-level accuracy=== | ===Gate-level accuracy=== | ||
Line 60: | Line 49: | ||
===Transistor-level accuracy=== | ===Transistor-level accuracy=== | ||
− | Transistor-level accuracy represents a more granular emulation accuracy level that delves into the behavior of individual transistors within a digital circuit. This approach aims to replicate the electrical characteristics and interactions of transistors, offering a higher degree of accuracy at the cost of increased computational complexity, way more than that of gate-level accuracy. This method is the most accurate representation of the electrical characteristics and interactions within a machine's circuit, but | + | Transistor-level accuracy represents a more granular emulation accuracy level that delves into the behavior of individual transistors within a digital circuit. This approach aims to replicate the electrical characteristics and interactions of transistors, offering a higher degree of accuracy at the cost of increased computational complexity, way more than that of gate-level accuracy. This method is probably the most accurate representation of the electrical characteristics and interactions within a machine's circuit, but because of its extremely demanding nature, it should not be recommended for most people looking to play their childhood video games not only because of its abysmal performance, but also because it requires way too much computational power to execute. This type of hardware emulation is great for hardware enthusiasts and homebrew developers who want to get a deep understanding of the functionality and behavior of the hardware in question at a very detailed level. |
Examples of transistor-level emulators are MetalNES and Visualnes. | Examples of transistor-level emulators are MetalNES and Visualnes. | ||
Line 68: | Line 57: | ||
==Perfection?== | ==Perfection?== | ||
− | While it may be theoretically possible to have a 100% perfect emulator, that feat is very rare (if not nearly impossible), even for some highly regarded emulators such as [[higan]] or kevtris's work on the various FPGA-based consoles by Analogue. Just because an emulator claims to be "cycle accurate" or "100% compatible" does not mean that said emulator is flawless. This even includes situations in which all emulator accuracy tests ( | + | While it may be theoretically possible to have a 100% perfect emulator, that feat is very rare (if not nearly impossible), even for some highly regarded emulators such as [[higan]] or kevtris's work on the various FPGA-based consoles by Analogue. Just because an emulator claims to be "cycle accurate" or "100% compatible" does not mean that said emulator is flawless. This even includes situations in which all emulator accuracy tests (ie. [[PS1 Tests]]) are passed, as these tests cannot cover every single edge case, and some of these tests may even fail on real hardware, leading to even more confusion. Some things are nearly impossible to perfectly emulate, such as some of the illegal opcodes of the [[wikipedia:MOS_Technology_6502|6502]], where the results are completely unpredictable on hardware, and different hardware revisions have different results and different illegal opcodes. The closest one could get to writing a perfect emulator would be if someone were to exactly copy an original ASIC map or a decap onto an FPGA, and even then, that isn't always a magic bullet. |
While any given emulator may not be perfect, that does not mean that the emulator is bad by any means. Writing an accurate emulator is extremely hard work, and while perfection may be nearly impossible at the moment, that doesn't mean that games can't be enjoyed. Work on archival via emulation has come a very long way since the emulators of the 1990s, and things are only getting better from here, with excellent emulators such as the previously mentioned [[higan]] and kevtris's [[FPGA]] cores being available to use right now. In other words, "good enough" goes a long way. | While any given emulator may not be perfect, that does not mean that the emulator is bad by any means. Writing an accurate emulator is extremely hard work, and while perfection may be nearly impossible at the moment, that doesn't mean that games can't be enjoyed. Work on archival via emulation has come a very long way since the emulators of the 1990s, and things are only getting better from here, with excellent emulators such as the previously mentioned [[higan]] and kevtris's [[FPGA]] cores being available to use right now. In other words, "good enough" goes a long way. | ||
Line 75: | Line 64: | ||
The accuracy debate has very clearly split into two sides. | The accuracy debate has very clearly split into two sides. | ||
− | The ones that don't favor accuracy argue that emulators do not need to be as accurate as possible if it can play all the games they need. And because these games tend to be the most recognized alongside the console, there shouldn't really be an interest in making more games work since those do. A more compelling point is that as long as an emulator plays the majority of games at full speed on most computers and devices without too many obvious glitches, it doesn't matter how accurately it replicates the original hardware and its many quirks and functions. The faithfulness of the emulator to the console it's emulating comes second to its overall ability to play games. | + | The ones that don't favor accuracy argue that emulators do not need to be as accurate as possible if it can play all the games they need. And because these games tend to be the most recognized alongside the console, there shouldn't really be an interest in making more games work since those ones do. A more compelling point is that as long as an emulator plays the majority of games at full speed on most computers and devices without too many obvious glitches, it doesn't matter how accurately it replicates the original hardware and its many quirks and functions. The faithfulness of the emulator to the console it's emulating comes second to its overall ability to play games. |
The ones that favor accuracy explain their view in that when playing a game with inaccurate emulation the experience may sometimes be quite different to the real thing, particularly with games focused on split-second reactions. There is also an entirely different reason: archival. Emulator projects should ultimately strive to recreate the hardware as much as possible; that's the only way for it to be compatible, and that's the only way to preserve the hardware. Speed and scalability to most devices is a lower priority to accuracy to the real console, both for purposes of compatibility and preservation. | The ones that favor accuracy explain their view in that when playing a game with inaccurate emulation the experience may sometimes be quite different to the real thing, particularly with games focused on split-second reactions. There is also an entirely different reason: archival. Emulator projects should ultimately strive to recreate the hardware as much as possible; that's the only way for it to be compatible, and that's the only way to preserve the hardware. Speed and scalability to most devices is a lower priority to accuracy to the real console, both for purposes of compatibility and preservation. |