Editing Project Nested

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 2: Line 2:
 
|logo =  
 
|logo =  
 
|logowidth =  
 
|logowidth =  
|screenshot = ProjectNested-Screenshot.PNG
+
|version = 1.3
|version = 1.8.1
+
|active = Yes
|active = No
+
|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 (Laurent Courville)
 
|developer = Myself086 (Laurent Courville)
Line 11: Line 10:
 
|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 GitHub]
+
|source = [https://github.com/Myself086/Project-Nested Git]
 
}}
 
}}
 
+
'''Project Nested''' is an open-source [[Nintendo Entertainment System emulators|Famicom (NES)]] emulator for the [[Super Nintendo emulators|Super Famicom (SNES)]] written in 65C816 assembly and 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 20: Line 18:
 
|-
 
|-
 
|align=center|{{Icon|SNES-big}}
 
|align=center|{{Icon|SNES-big}}
|'''[https://github.com/Myself086/Project-Nested/releases Official releases]'''
+
|'''[https://github.com/Myself086/Project-Nested/releases Official releases]'''<br/><small>GitHub releases</small>
 
|}
 
|}
  
 
==History==
 
==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.
+
The project began in 2015 as a NES emulator on PC. The emulator was running at full speed, and development was going "pretty well", but was not considered challenging, so it was decided to move it to the SNES. After three years of casual development and thinking about how to achieve 100% performance (otherwise it would have been considered pointless) until summer 2018, the emulator began official development.
  
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.
+
The current model has been improved since, but not by much. The speed was calculated by multiplying the average amount of times each instruction executed each frame and the overhead. However, the maths were 5 percent off on first implementation. Most implementations were made after approximately one month.
  
 
==Overview==
 
==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.
+
The emulator 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.
  
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.
+
Emulation works by converting NES ROMs into 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.
+
Save files are created after the software title runs for a while. These can then be added to the ROM, often improving performance, vastly with some titles, and not much with others.
  
 
The following are required:
 
The following are required:
 
* Up to 8MB of fast HiROM (slow HiROM support planned)
 
* Up to 8MB of fast HiROM (slow HiROM support planned)
* 8KB to 256KB of SRAM (16KB+ to create feedback for the EXE)
+
* 16KB of SRAM (support for anywhere up to 256KB of SRAM, depending on the software title and settings, planned)
* A battery if the software title requires it
+
* A battery if required by the software title
  
 
===Compatibility===
 
===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.
+
Emulation occurs at up to 60FPS (frames per second) with audio support, but occasional minor slowdown may occur. Software titles that use mappers 0-2 and 4 are playable, with mappers 1 and 4 having minor glitches, which may reduce compatibility levels with titles that use them, mappers 3, 5-8, 11, 12, 16, 18, 21-26, 32-34, 36-38, 40, 42 and 66 unplayable and mappers 9 and 10 unlikely to be supported due to it being declared impossible to accurately emulate CHR bank switching, performed by both mappers. 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:
+
Out of the 456 tested titles, 31 (6.80%) are fully playable, 93 (20.39%) are playable but need a full playthrough to test, 29 (8.73%) are mostly playable, 157 (34.43%) crash in the intro or early in-game, 128 (28.07%) are unplayable and 1 (0.22%) 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.
+
* Punch-Out!!! is unlikely to be supported due to using mapper 9/MMC2, as it hard to emulate because memory banks can be changed mid-scanline when it draws characters FE or FD, or sprites, the hardest to implement. This is not as problematic with the background, 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.
+
* 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.
* 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. The official compatibility list is available [https://docs.google.com/spreadsheets/d/1xKZIyNz1DSI3ZBdMfaTEaa_9b6IEABx-ZPwOb6XqcLQ/edit#gid=253005073 here].
  
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.
+
=== Future ===
 +
The following support is being worked on:
 +
* The graphics in Super Mario Bros. 2 display incorrectly and the American version resets after hitting a Shy Guy. The latter issue has been reverse engineered and figured out. Fixing this would also fix many other games that mistakenly reset.
 +
* Elite is being used as a model to "aggressively" optimize the EXE, specifically in AOT compilation, to make emulation run at the same speed, or faster if possible.
  
 
==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]]
 
[[Category:Inactive emulation software]]
 
[[Category:Inactive emulation software]]

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)