Changes

Jump to navigation Jump to search

Nintendo 64 emulators

2,746 bytes added, 23:27, 16 May 2022
no edit summary
The '''Nintendo 64''' is a 64-bit fifth-generation console released by Nintendo on September 29, 1996 for {{inflation|USD|199.99|1996}}.
Nintendo was the second company approached by Silicon Graphics Inc. (SGI), who wanted to roll out their previously enterprise-only technology in the consumer space. They originally pitched their idea to Sega, but it's assumed that Nintendo's offer was more appealing. With the NEC VR4300 CPU clocked at 93.75 MHz, 4MB of RAM,<ref group=N>Though a separate add-on was later released called the "Expansion Pak" that added an additional 4MB of RAM, totaling 8MB.</ref> and an SGI RCP GPU, Nintendo had finalized much of the hardware at least a year before launch, preventing video games from needing drastic rewrites as a result of architectural changes. The development workstations were often Unix-based, something that would later help reverse engineers in some projects.­­
==Emulators==
! scope="col"|Transfer Pak
! scope="col"|64DD
! scope="col"|Depth Output
! scope="col"|Texture Enhancement
! scope="col"|Netplay
! scope="col"|[[libretro|Libretro Core]]
! scope="col"|<abbr title="Free/Libre and Open-Source Software">FLOSS</abbr>
! scope="col"|[[Recommended Emulators|Recommended]]
|-
!colspan="1315"|PC / x86
|-
|[[m64p]] (ParaLLEl)
|{{✓}}
|{{✓}}
|{{✓}}
|{{✗}}
|{{✗}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{✗}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{✗}}
|{{✓}}
|-
|Mupen64Plus-Next
|{{✓}}
|{{✓}}
|{{✓}}
|{{✗}}
|{{~}}¹
|{{✓}}
|{{✓}}*
|{{✓}}
|{{~}}
|{{✓}}
|-
|[[RMG]]
|align=left|{{Icon|Windows|Linux}}
|[https://github.com/Rosalie241/RMG git/releases {{RMGVer}}]<br >[https://github.com/Rosalie241/RMG/actions Dev]|{{✓}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{~}}²
|{{✗}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{~}}²
|{{✗}}
|{{✓}}
|{{~}}
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{~}}²
|{{✓}}
|{{✓}}
|{{✗}}
|{{✓}}
|{{✗}}
|{{✗}}
|{{?}}
|{{✓}}*
|{{✓}}
|[[Project64 Netplay]]
|align=left|{{Icon|Windows}}
|[https://pj64netplay-emugithub.mlcom/download.html {{Project64NetplayVer}}Project64Netplay/Project64-Netplay-2x git]
|?
|{{✗}}
|{{✗}}
|{{✗}}
|{{✓}}
|{{✓}}
|{{✓}}
|{{✗}}
|{{✓}}
|{{✓}}
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✓}}
|{{✓}}
|{{}}
|-
|[[1964]]
|{{✓}}
|{{✗}}
|{{✓}}
|{{✓}}
|{{~}}²
|{{✗}}
|{{✓}}
|{{✗}}
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✓}}
|{{✗}}
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✗}}
|{{✗}}
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✗}}
|{{✗}}
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✗}}
|{{✗}}
|{{✓}}
|{{?}}
|{{?}}
|{{?}}
|{{✓}}
|{{✓}}
|{{✗}}
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✓}}
|{{✗}}
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✓}}
|{{✗}}
|-
!colspan="1315"|Mobile / ARM
|-
|[[Mupen64Plus]] FZ
|align=left|{{Icon|Android}}
|[https://play.google.com/store/apps/details?id=org.mupen64plusae.v3.fzurita 3.0.291 308 (beta)]
|?
|{{✓}}
|{{✓}}
|{{✗}}
|{{✗}}
|{{~}}¹
|{{✓}}
|{{✗}}
|{{✓}}
|?
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✓}}
|{{✓}}
|-
!colspan="1315"|Consoles
|-
|[[Virtual Console]]
|{{✗}}
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✗}}
|{{✗}}
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✓}}
|{{✗}}
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✓}}
|{{✗}}
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✓}}
|{{✗}}
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✓}}
|{{✗}}
|{{✗}}
|{{?}}
|{{?}}
|{{?}}
|{{✗}}
|{{✓}}
|}
*<nowiki>* Available exclusively as a libretro core</nowiki>*<nowiki>¹ Only supports texture packs, and not filtering or upscaling</nowiki>*<nowiki>² Requires replacing the input plugin to one with netplay support</nowiki>*<nowiki>³ Only recommended for Goldeneye 007 and Perfect Dark or their ROM hacks</nowiki>*<nowiki>⁴ Video plugin is outdated</nowiki>*<nowiki>⁵ Up to date for now, other than the video plugin which can be updated manually</nowiki>*<nowiki>⁶ If not using Netplay, use RMG</nowiki>
===Comparisons===
Although many Nintendo 64 emulators have been made and many games can be run between them, until recently complete compatibility and/or accuracy left a bit to be desired. For half a decade, Mupen64Plus and Project64 have vied for the most playable emulator, and which was more compatible often depended on when and in what configuration each emulator has been tested. As of August 2017, both emulators have roughly equal compatibility and accuracy when running with the same [[recommended N64 plugins]] setup, though both default to Glide64, a now relatively lackluster plugin.
;[[Mupen64Plus]]:A multi-platform emulator based on Hacktarux's Mupen64. It's about as accurate as Project64,<ref>loganmc10. [https://github.com/mupen64plus/mupen64plus-core/pull/336 ''Ignore TLB write if TLB entry is unmapping itself'']. "By the way, once this, along with the other PR's I have waiting are merged, we are at "compatibility parity" with Project64 as far as I can tell. I don't know of any game that doesn't boot with mupen64plus that works in PJ64."</ref> when both emulators are run with GLideN64. However, Mupen64Plus lacks a native GUI, instead being launched either from the command line or by dragging and dropping ROMs onto the executable and editing the config with a text editor. [[BizHawk]] and [[OpenEmu]] use forks of Mupen64Plus and its plugins for their N64 emulation, but they seem to be shallow. As of 2022 Project64-style overclocking for faster frame rates has been added under the option 'CountPerOpDenomPot'.
:;Mupen64Plus-Next and ParaLLEl-N64:Both are heavily-modified forks developed as [[libretro]] cores. They introduce many features and optimizations not present in mainline alongside [[RetroArch]]'s general features, including Project64-style overclocking for faster frame rates, 3-point texture filtering for Glide64, superior A/V sync and latency, and even an initially exclusive LLE Vulkan renderer based on Angrylion's pixel-perfect RDP plugin now known as ParaLLEl-RDP, making it a better alternative to the standalone version in some cases. ParaLLEl-RDP has a special "[https://www.youtube.com/watch?v=mzR93F9gPdc Super VI Mode]" option which, if used, can make the visuals of N64 games look less blurry with fairly mitigated jaggies even at their native resolutions. Although, it may need a [https://www.youtube.com/watch?v=z7_D_D419S0 powerful GPU]. It also offers native high-resolution rendering, only available in integer scales of the original N64 resolution.
::As for the difference between the two cores, ParaLLEl-N64 is actually the older of the two, as it is based off of the old Mupen64Plus-libretro core, having been renamed to ParaLLEl-N64 upon its initial integration of the ParaLLEl-RDP and RSP plugins. In addition to the ParaLLEl plugins, it also retains the older HLE plugins (glN64, Rice, and Glide64), as well as Angrylion Plus. Meanwhile, Mupen64Plus-Next is a new rebase off of bleeding-edge mainline, and as such is the more compatible of the two. It does away with the legacy plugins and replaces them with GLideN64 as a better HLE solution (though of course, the ParaLLEl plugins and Angrylion Plus stay), it considerably cleans up the Core Options menu for easier configuration, and it adds Transfer Pack support. Add to this the fact that going forward, all further improvements and new features will be to the Mupen64Plus-Next core, and Mupen64Plus-Next is now the more recommended of the two, thus ParaLLEl-N64 should now only be considered for performance reasons or perhaps for older ROM hacks that don't play well with the newer, more accurate plugins.
:;[[m64p]]:Probably the easiest "out of the box" solution for Nintendo 64 emulation. It comes In keeping with its theme of simplicity for the end user, it uses ParaLLEl-RDPand ParaLLEl-RSP for its video and RSP plugins, as well as its own custom GUI and input plugin, and unlike other emulators, it does not allow you to use anything else. If GLideN64 is desired instead, there is an older build that retains it- unfortunately lacking the texture enhancement suite required for use of texture packs and upscaling.
:;[[RMG]]:Rosalie's Mupen GUI is a project aiming to close the gap between Project64 and Mupen64Plus in terms of user experience. Its interface is about on par with m64p's in terms of cleanliness and ease of use, but unlike m64p, it allows you to use other plugins. The latest version comes bundled with GLideN64 and ParaLLEl-RDP for video plugins, and mupen64plus-hle-rsp and ParaLLEl-RSP for RSP plugins. However, for some reason it currently does not allow you access to ParaLLEl-RDP's options within its GUI, so if you wish to make use of features such as upscaling or downsampling, you must do so by editing the mupen64plus.cfg file, whereas m64p does expose these options in its GUI. However, if you prefer GLideN64, this is a superior alternative, as it does have access to its settings GUI, and the last version of m64p that uses GLideN64 is becoming increasingly outdated.
:;Wii64 and Not64:Both are based on Mupen64, with Not64 being a fork of Wii64. Not64 claims to be better optimized as well as having higher compatibility and more frequent updates. N64 emulation on Wii is not very good, and it is recommended to stick with the Virtual Console releases whenever possible.
;[[Project64]]:An open-source emulator for Windows, as well as one of the oldest. Its official release builds are more up-to-date than Mupen64Plus', and the current version, 3.0.1, is roughly as accurate as the development versions of Mupen64Plus when both are played with recommended plugins. It has a more user-friendly interface than the Mupen64Plus attempts and supports more features such as overclocking and Transfer Pak emulation. It does come with GLideN64 out-of-the-box, but the default audio plugin isn't even the best in the box. For the most part, it works well in [[Wine]], but, if you're on a different platform, use Mupen64Plus instead.
;[[CEN64]]:Aims for cycle accuracy while, at the same time, aiming to eventually be usable on modern PC hardware. It currently lacks many features and has spotty compatibility, but it's gradually improving. It can already emulate some well-known edge cases such as picture recognition in Pokemon Snap.
;[[1964]]:Along with its various versions and forks, it was once a decent, speedy open-source alternative to Project64 and Mupen64, though it usually lagged behind the two compatibility-wise. Nowadays it has completely fallen off the radar as development has halted, and there is no longer a central code repo to speak of. There is little reason to use it nowadays outside of historical purposes, very specific edge cases, or if your device is too slow to run Mupen64Plus or Project64. However, a fork named 1964 GEPD is regularly updated and remains the go-to choice for emulation of 007 Goldeneye and Perfect Dark. This is for a number of reasons, the most notable are a 60 FPS hack and a mouse injector plugin, which happens to include an FOV slider.
;Daedalus:is a Nintendo 64 emulator for PC which was ported to the PSP under the name of DaedalusX64. The PSP version later became the main version and got ported to platforms such as the Dreamcast, the PS2, the PS Vita, and the 3DS. On PSP, several games are able to reach full speed and most of them work with few emulation issues.
;[[Ryu64]]:is a Nintendo 64 emulator made in C#. The 'Ryu' word is named after the "RyuJIT" used in both Visual Basic & C#. But it might have been inspired by the lead author's sole (so far) [https://github.com/Ryujinx/Ryujinx/commits?author=Dudejoe870 commit] at Switch emulator, [[Ryujinx]]'s Git repository, and his depreciated [https://github.com/Dudejoe870/RyujinxAutoUpdate Ryujinx Auto Updater] tool. "86RYU", an x86 JIT compiler, is being developed alongside this emulator too.
 
;[[n64oid]]:An Android exclusive Nintendo 64 emulator. It is similar to Project 64 1.6 in terms of compatibility, although it is unknown who authored it, as the APK for n64oid circulates on many legally questionable APK sites. n64oid has the infamous problem in Mario Kart 64 of the screen in Wario Stadium not displaying properly, as it displays nothing but black. It upscales all games to widescreen, which works well most of time, but on many phones it will have performance issues. The emulator is relatively poor, but it is much easier to set up than other options. The emulator features a menu with many similarities to the mobile edition of Snes9x EX+, and the My Boy! family of Android emulators for Game Boy systems.
==Emulation issues==
{{Main|Recommended N64 plugins}}
The Nintendo 64 emulation scene can be described as a hot messis now decent. It got to that point because A lot of the overall major problems that N64 emulation scene's climate had in the early dayspast, which was to stub off certain components of the emulated hardware as plugins. (Other consoles weren't immune to this phenomenon; it also happened to [[PlayStation emulators|the first PlayStation]].) Developers underestimated the complexity of the system, and with little demand have been fixed for improvements beyond getting the popular titles working from beginning to end, most emulator developers stuck with the codebases they knew for as long as possible and never integrated any of the plugins that were needed to make up a full project, or merge their codebases into one projectquite some time now. And because almost no documentation The only catch is available for clean-room reverse engineers, figuring out how that the hardware actually functioned had to be done manually, which took longeraccurate emulators have higher system requirements. The unfortunate result of this is that many games require specific plugin arrangements and specific emulators in order to run well, and there main remaining problem is no viable alternative that isn't just an iteration on the existing plugin-based emulatorslack of accurate cycle counting.
===[[High/Low level emulation|High-level vs. low-level]] graphics===
One of the biggest hurdles to emulating the Nintendo 64 was the Reality Display Processor (RDP), which used a custom design that had to be fine-tuned to get more performance out of the system using microcode. To emulate the RDP accurately, one would have to execute said microcode the way the RDP did, which differed from PC graphics cards of the day. To complicate matters further, API standards that were available on PCs two decades ago were nowhere near as flexible as they are today. If you wanted to make an accurate GPU-accelerated RDP plugin in 2003, you simply couldn't with the APIs of the time (OpenGL 1.x and Direct3D 9). For the average user, hardware-accurate GPU acceleration would be out of reach for a long time.
[[UltraHLE]] offered a compromise. In contrast to earlier consoles, whose video chips in hindsight had been easy to render to the host CPU's framebuffer, performant RDP emulation had to take shortcuts, including programming around specific games' microcode to cleanly translate their graphics commands into API calls using Direct3D, OpenGL, and even Glide. With this, the theoretical system requirements plummeted, and the host graphics card could reproduce a functional equivalent rather than the exact method. This also gave way to prettier, higher resolution graphics, though whether or not this is an improvement is subjective and a common point of discussion. Unfortunately it proved to be hit and miss, owing to the nature of per-game microcode detection and having to tweak settings to prevent some games for from running into graphical glitches.
Low-level RDP emulation was continually improved in that time, most notably by [[MESS]] up until its merger with [[MAME]], where its RDP code was turned into a plugin by Angrylion. Compatibility-wise, Angrylion's RDP was considered flawless by the community, though reception wasn't as warm overall, since it ran only on the CPU and was thus painfully slow on mid-grade machines. A dozen forks attempted to bring the system requirements down and the current incarnation that does so is Angrylion RDP Plus, using multithreading. Accurate low-level emulation would only come to the GPU in 2020, when a new version of the Mupen64Plus-based ParaLLEl [[libretro]] core was released containing a rewritten RDP plugin using compute shaders in Vulkan. Though it isn't a direct fork of Angrylion, Themaister says the Angrylion code was the central point of reference for developing the plugin,<ref>[https://github.com/Themaister/parallel-rdp#disclaimer README] for parallel-rdp repository on GitHub. § Disclaimer. "While paraLLEl-RDP uses Angrylion-Plus as an implementation reference, it is not a port, and not a derived codebase of said project. It is written from scratch by studying Angrylion-Plus and trying to understand what is going on. The test suite uses Angrylion-Plus as a reference to validate implementation and cross-checking behavior."</ref> meaning ParaLLEl uses the same strategies that Angrylion does to emulate the RDP while running on the host GPU (as long as said GPU supports Vulkan).
Another issue lies with the appliance of texture filtering per quad on static images, text, and sprites. Because each quad is filtered separately, this can cause some visual inconsistencies. Text and UI elements often look as though their edges cut off abruptly, and static images, such as pre-rendered backgrounds or menu screens, may look as though they are separated into squares. Some plugins allow the user to turn off texture filtering to remedy this, but, unfortunately, this also applies to textures in the game world, exposing their oftentimes low resolutions.
RetroArch's Mupen64Plus core has taken some steps which help remedy these problems. It is the only emulator that implements N64-style three-point texture filtering, which results in a more faithful look. It is also capable of rendering at 320x240, which sidesteps the issues with filtered text, UI elements, and menu screens, while still retaining texture filtering. Pixel-accurate plugins do not have these problems at all. Note how the Quest Status screen appears to be divided into a grid.
<gallery widths="300" mode="packed">
Project64_2013-06-26_17-44-58-31.png|Conker's Bad Fur Day copyright screen, displaying issues with filtered text.
Mupen64plus_2013-08-18_20-35-50-08.png|Ocarina of Time's menu subscreen, displaying issues with filtering. Note how the Quest Status screen appears to be divided into a grid.</gallery>
==Peripherals==
==Virtual Console games in Dolphin==
Some A number of N64 games were released for the Wii's Virtual Console service throughout its lifespan. While the emulators at the heart of each Virtual Console title were of average accuracy (rather than using one generic emulator used for every game, each title had an emulator specifically tailored to that game), they were good enough to render the games in full playable capacity with few to no glaring errors. Many of these titles are emulated well on a Virtual Console game through Dolphin, and for a good while, due to persistent long-standing inaccuracies in N64 emulators and plugins, this was the best way to emulate certain N64 games, particularly Pokemon Snap and Mario Tennis. The system requirements are much higherthan running them on regular N64 emulators, but it's doable for many games. Today, regular N64 emulators and plugins have advanced to the degree that this has become unnecessary, relegating this method of N64 game emulation to little more than a curiosity, at least on PC. The following games are on the N64 Virtual Console for Wii:
{|width="100%"
369
edits

Navigation menu