Difference between revisions of "Project Nested"

From Emulation General Wiki
Jump to navigation Jump to search
(Tags: Mobile edit, Mobile web edit)
(Compatibility: updated compatibility stats)
(17 intermediate revisions by 7 users not shown)
Line 2: Line 2:
 
|logo =  
 
|logo =  
 
|logowidth =  
 
|logowidth =  
|version = v1.2 (emulator)<br>v1.2 (converter)
+
|screenshot = ProjectNested-Screenshot.PNG
 +
|version = 1.6
 
|active = Yes
 
|active = Yes
|platform = [[Super Nintendo emulators|Super Famicom (SNES)]]
+
|platform = [[Emulators on SNES|Super Famicom (SNES)]]
 
|target = [[Nintendo Entertainment System emulators|NES]]
 
|target = [[Nintendo Entertainment System emulators|NES]]
|developer = Myself086
+
|developer = Myself086 (Laurent Courville)
|prog-lang = C#
+
|prog-lang = 65C816 assembly, C#
 
|website = [https://github.com/Myself086/Project-Nested GitHub page]
 
|website = [https://github.com/Myself086/Project-Nested GitHub page]
 
|license = MIT License
 
|license = MIT License
|source = [https://github.com/Myself086/Project-Nested Git]
+
|source = [https://github.com/Myself086/Project-Nested GitHub]
 
}}
 
}}
'''Project Nested''' is an open-source [[Nintendo Entertainment System emulators|Famicom (NES)]] emulator for the [[Super Nintendo emulators|Super Famicom (SNES)]] written in C#.
+
 
 +
'''Project Nested''' is an open-source [[Nintendo Entertainment System emulators|Famicom (NES)]] emulator for the [[Super Nintendo emulators|Super Famicom (SNES)]] written 3/4 in 65C816 assembly and 1/4 C#.
  
 
==Download==
 
==Download==
Line 18: Line 20:
 
|-
 
|-
 
|align=center|{{Icon|SNES-big}}
 
|align=center|{{Icon|SNES-big}}
|'''[https://github.com/Myself086/Project-Nested/releases Official releases]'''<br/><small>GitHub releases</small>
+
|'''[https://github.com/Myself086/Project-Nested/releases Official releases]'''
 
|}
 
|}
 +
 +
==History==
 +
Development of Project Nested started as a private SNES emulator on PC, of which its interpreter was replaced with a recompiler. It ran at full speed, but due to little challenge, a project to emulate the NES on the SNES was started. Official development began in summer 2018 after three years of casual design and coming up with a solution to full performance.
 +
 +
As of v1.3, the model has received minor improvements. The speed was calculated by multiplying the average amount of times each instruction executed per frame and the overhead. However, the maths were 5 percent off on their first implementation. It was mostly implemented after about one month.
  
 
==Overview==
 
==Overview==
Nested was inspired by the SNES originally being designed to be backwards-compatible with the NES and Myself086 wanting to code a JIT (Just-In-Time) compiler. Work on the emulator began in 2015, when math would be done on its potential performance for three years until one day in 2018, when the design could theoretically run games at full speed. Development started in 2018.
+
The emulator was inspired by the SNES originally being designed for backward compatibility with the NES and a desire to code a JIT (Just-In-Time) compiler.
  
A JIT (Just-In-Time) and AOT (Ahead-of-Time) compiler (available for Windows) is used to convert NES ROMs into SNES ROMs. This is used to allow software titles for the NES to run on SNES hardware.
+
NES ROMs are converted to SNES ROMs using a JIT (Just-In-Time) and AOT (Ahead-of-Time) compiler (with various options) for Windows, allowing them to run on SNES hardware.
  
The emulator does not use any enhancement chips, but requires the following to run on a flash cartridge or a reproduction cartridge:
+
Save files are created after the software title runs for a while. These can then be added to the ROM, often improving performance, varying from little to much, depending on the title.
* Up to 8MB of fast HiROM (additional support for slow HiROM planned)
+
 
* 16KB of SRAM (additional support for anywhere else from 0KB to 256KB of SRAM, depending on the software title and settings, planned)
+
The following are required:
 +
* Up to 8MB of fast HiROM (slow HiROM support planned)
 +
* 8KB to 256KB of SRAM (16KB+ to create feedback for the EXE)
 
* A battery if the software title requires it
 
* A battery if the software title requires it
  
 
===Compatibility===
 
===Compatibility===
The emulator can emulate the NES at a full 60FPS (frames per second), with support for audio. Software titles that use mappers 0-2 and 4 are playable (however, mappers 1 and 4 have minor glitches, which may reduce compatibility levels with titles that use them), with mappers 3, 5-8, 11, 12, 16, 18, 21-26, 32-34, 36-38, 40, 42 and 66 having unplayable support, and mappers 9 and 10 being unlikely to be supported due to it being declared impossible to accurately emulate CHR bank switching, which both mappers perform. Additionally, there is no support for iNES 2.0.
+
Emulation occurs at up to 60FPS (frames per second) with audio support, but occasional minor slowdown may occur. Software titles using mappers 0-4 and 7 are playable, with mappers 1 and 4 having minor glitches, which may reduce compatibility, mappers 5, 6, 8, 11, 12, 16, 18, 21-26, 32-34, 36-38, 40, 42 and 66 having potential for future compatibility, mappers 9 and 10 unlikely to be supported due to it being declared impossible to accurately emulate CHR bank switching, and 14 and 17 due to being "copier mappers", and the rest, up to 255, being unknown. Additionally, iNES 2.0 is not supported.
  
Out of the 332 tested titles, 11 (3.31%) are fully playable, 37 (11.14%) are playable but need a full playthrough to test, 29 (8.73%) are mostly playable, 95 (28.61%) crash in the intro or early in-game, and 160 (48.19%) are unplayable. The fully playable titles are Crystalis, Donkey Kong, Donkey Kong Jr., Donkey Kong 3, Mario Bros., Millipede, Popeye no Eigo Asobi, Super Mario Bros., Tennis, The Legend of Zelda and Volleyball (and formerly (as of v1.0.2) Battle City, which is now only mostly playable due to hanging after the game over screen with visual glitches), some of which run with minor glitches or require NMI mode "At vblank" to be turned off. The official compatibility list is available [https://docs.google.com/spreadsheets/d/1xKZIyNz1DSI3ZBdMfaTEaa_9b6IEABx-ZPwOb6XqcLQ/edit#gid=253005073 here].
+
Out of the 534 tested titles, 71 (13.27%) are fully playable, 178 (33.27%) are playable but need a full playthrough to test, 65 (12.15%) are mostly playable, 144 (26.92%) crash in the intro or early in-game, 76 (14.21%) are unplayable and 1 (0.19%) is unlikely to be supported. For example:
 +
* Punch-Out!!! is unlikely to be supported due to using mapper 9/MMC2, due to difficulties in implementing mid-scanline memory bank changes when drawing characters FE or FD, or the harder to implement sprites. The background is easier to implement, however, as the window can be used to draw and switch the characters.
 +
* The graphics in Super Mario Bros. 2 displayed incorrectly and the American version reset after hitting a Shy Guy until v1.4. Some time before the Sharopolis interview on July 10, 2021, the latter issue was reverse engineered and figured out, also fixing many other games that reset.
 +
* Elite is being used as a model to "aggressively" optimize the EXE in AOT compilation, making emulation run at the same speed, or faster if possible. The game runs slowly with flicker and does not support shooting as of v1.3.
 +
 
 +
Additionally, one fully playable title, Battle City, was mostly playable from v1.1 until v1.3, when it hung after the game over screen with visual glitches in [[Mesen]].
 +
 
 +
Others run with minor glitches or require certain options, such as NMI at vblank or stack native return, to be disabled. Overall, at least 50% of games are expected to run in the future.
  
 
==See also==
 
==See also==
 
* [[NeMul]]
 
* [[NeMul]]
 +
 +
==External links==
 +
* [https://discord.gg/RhjJ5wGggb Official Discord server]
 +
* [https://docs.google.com/spreadsheets/d/1xKZIyNz1DSI3ZBdMfaTEaa_9b6IEABx-ZPwOb6XqcLQ/edit?usp=sharing Compatibility list]
 +
* [https://www.youtube.com/watch?v=zUSTG--CkSA Sharopolis demonstration + interview]
  
 
{{Nes}}
 
{{Nes}}
  
 
[[Category:Emulators]]
 
[[Category:Emulators]]
 +
[[Category:Console emulators]]
 +
[[Category:Home console emulators]]
 
[[Category:Nintendo Entertainment System emulators]]
 
[[Category:Nintendo Entertainment System emulators]]
 
[[Category:Super Nintendo emulation software]]
 
[[Category:Super Nintendo emulation software]]

Revision as of 06:58, 1 August 2022

Project Nested
ProjectNested-Screenshot.PNG
Developer(s) Myself086 (Laurent Courville)
Latest version 1.6
Active Yes
Platform(s) Super Famicom (SNES)
Emulates NES
Website GitHub page
Programmed in 65C816 assembly, C#
License MIT License
Source code GitHub

Project Nested is an open-source Famicom (NES) emulator for the Super Famicom (SNES) written 3/4 in 65C816 assembly and 1/4 C#.

Download

Super Nintendo Official releases

History

Development of Project Nested started as a private SNES emulator on PC, of which its interpreter was replaced with a recompiler. It ran at full speed, but due to little challenge, a project to emulate the NES on the SNES was started. Official development began in summer 2018 after three years of casual design and coming up with a solution to full performance.

As of v1.3, the model has received minor improvements. The speed was calculated by multiplying the average amount of times each instruction executed per frame and the overhead. However, the maths were 5 percent off on their first implementation. It was mostly implemented after about one month.

Overview

The emulator was inspired by the SNES originally being designed for backward compatibility with the NES and a desire to code a JIT (Just-In-Time) compiler.

NES ROMs are converted to SNES ROMs using a JIT (Just-In-Time) and AOT (Ahead-of-Time) compiler (with various options) for Windows, allowing them to run on SNES hardware.

Save files are created after the software title runs for a while. These can then be added to the ROM, often improving performance, varying from little to much, depending on the title.

The following are required:

  • Up to 8MB of fast HiROM (slow HiROM support planned)
  • 8KB to 256KB of SRAM (16KB+ to create feedback for the EXE)
  • A battery if the software title requires it

Compatibility

Emulation occurs at up to 60FPS (frames per second) with audio support, but occasional minor slowdown may occur. Software titles using mappers 0-4 and 7 are playable, with mappers 1 and 4 having minor glitches, which may reduce compatibility, mappers 5, 6, 8, 11, 12, 16, 18, 21-26, 32-34, 36-38, 40, 42 and 66 having potential for future compatibility, mappers 9 and 10 unlikely to be supported due to it being declared impossible to accurately emulate CHR bank switching, and 14 and 17 due to being "copier mappers", and the rest, up to 255, being unknown. Additionally, iNES 2.0 is not supported.

Out of the 534 tested titles, 71 (13.27%) are fully playable, 178 (33.27%) are playable but need a full playthrough to test, 65 (12.15%) are mostly playable, 144 (26.92%) crash in the intro or early in-game, 76 (14.21%) are unplayable and 1 (0.19%) is unlikely to be supported. For example:

  • Punch-Out!!! is unlikely to be supported due to using mapper 9/MMC2, due to difficulties in implementing mid-scanline memory bank changes when drawing characters FE or FD, or the harder to implement sprites. The background is easier to implement, however, as the window can be used to draw and switch the characters.
  • The graphics in Super Mario Bros. 2 displayed incorrectly and the American version reset after hitting a Shy Guy until v1.4. Some time before the Sharopolis interview on July 10, 2021, the latter issue was reverse engineered and figured out, also fixing many other games that reset.
  • Elite is being used as a model to "aggressively" optimize the EXE in AOT compilation, making emulation run at the same speed, or faster if possible. The game runs slowly with flicker and does not support shooting as of v1.3.

Additionally, one fully playable title, Battle City, was mostly playable from v1.1 until v1.3, when it hung after the game over screen with visual glitches in Mesen.

Others run with minor glitches or require certain options, such as NMI at vblank or stack native return, to be disabled. Overall, at least 50% of games are expected to run in the future.

See also

External links