Editing High/Low level emulation

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:
'''High-level emulation''' ('''HLE''') and '''low-level emulation''' ('''LLE''') refer to methods used when emulating components or entire systems. They're used to differentiate approaches to system implementations by how each emulator handles a given component; a higher-level emulator abstracts the component with the goal of improving performance on the host, sacrificing the thorough measures needed to guarantee [[Emulation Accuracy|the correct behavior]]. The simplicity of most classic consoles allow low-level emulation to be feasible, but the exponential increase of processing power in newer consoles has necessitated the need for abstraction. Because high-level emulation can often be seen as a simulation, BIOS dumps and other machine-specific code that would normally enter the legal gray area of backups are usually not required.
+
'''High-level emulation''' (HLE) and '''Low-level emulation''' (LLE) are approaches to the construction of video game console emulators.  
  
As an example, a console has a 3D graphics chip called by the CPU to render games. An accurate low-level emulator would use a software renderer to ensure that the component's output is 1:1 with the original console. However, the software renderer runs on the host's CPU, which isn't designed for 3D applications; performance will be sluggish if the CPU isn't powerful enough to handle accurate 3D rendering in realtime. Fortunately, modern 3D APIs can alleviate this problem by redirecting 3D computations to the host's GPU, so a high-level emulator will make calls to the host's graphics chip in order to render the game faster. And HLE doesn't just speed up 3D rendering, it can also act like components that don't require accurate emulation for the original software to properly use it. As another example, a console has a system management interface separate from the rest of the hardware that programs will call to in order to interact with the system, ranging from save files to configuration settings. Accurately emulating this as a discrete component would slow down the emulation severely for no real benefit, because this data can easily be given to the software without having to jump through all the hurdles taken by the original hardware. These two respective examples are demonstrated by most graphics-accelerated [[Nintendo 64 emulators|Nintendo 64]] emulator plugins that target the Reality Display Processor, and [[Dolphin]]'s handling of the [[Wii emulators|Wii]]'s Starlet co-processor.
+
LLE just translates the native code and runs it and is the traditional way of emulating. HLE, in contrast, attempts to simulate the response of the system rather than accurately recreating its internal design. HLE rewrites the functions using native c/++ code, and then hooks into calls to that function, and runs the HLE version instead of the native code.  
  
Contrary to popular belief, the idea behind HLE has been around for longer than N64 emulator [[UltraHLE]] first premiered. Some systems of the past can only be simulated on computers today as they were not designed with conventional hardware (i.e. a CPU, memory bank, video chip, etc.), but instead [[Discrete Circuitry-Based Arcade Games|discrete circuits]]. UltraHLE did begin the discussion of whether or not HLE is a good approach for preserving hardware and how it responds. Today, the debate continues.
+
Instead of trying to accurately create or recreate the hardware gate by gate, in HLE a software platform is created on which the emulated code can be run in a host computer having different hardware and a different instruction set. The effort focuses on recreating the appropriate ''functionality'' provided by the system emulated. Thus, the emphasis is shifted from the most efficient ''method'' of processing data to getting the same (or comparable) ''results'' as if the native platform was used. By contrast, the traditional way of emulating is termed. HLE also does not require a console's BIOS file in order to run.  
  
 
The '''Hybrid''' emulation approach has gained significant traction in recent software emulators for newer systems. This popularity stems from its ability to combine two techniques: Low-Level Emulation (LLE) for critical operating system services and High-Level Emulation (HLE) for complex/demanding components.<ref>[https://fosdem.org/2024/events/attachments/fosdem-2024-1726-panda3ds-climbing-the-tree-of-3ds-emulation/slides/22561/Panda3DS_FOSDEM_o9U1196.pdf FOSDEM 2024: Panda3DS presentation Page 34~36]</ref> This "synergy" offers several benefits;
 
The '''Hybrid''' emulation approach has gained significant traction in recent software emulators for newer systems. This popularity stems from its ability to combine two techniques: Low-Level Emulation (LLE) for critical operating system services and High-Level Emulation (HLE) for complex/demanding components.<ref>[https://fosdem.org/2024/events/attachments/fosdem-2024-1726-panda3ds-climbing-the-tree-of-3ds-emulation/slides/22561/Panda3DS_FOSDEM_o9U1196.pdf FOSDEM 2024: Panda3DS presentation Page 34~36]</ref> This "synergy" offers several benefits;

Please note that all contributions to Emulation General Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Emulation General Wiki:Copyrights for details). Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)

Template used on this page: