forked from MeloNX/MeloNX
# Conflicts: # .gitignore # Directory.Packages.props # README.md # src/ARMeilleure/Instructions/InstEmitMemoryHelper.cs # src/ARMeilleure/Memory/MemoryManagerType.cs # src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs # src/ARMeilleure/Signal/UnixSignalHandlerRegistration.cs # src/ARMeilleure/Translation/PTC/Ptc.cs # src/ARMeilleure/Translation/Translator.cs # src/Ryujinx.Ava/Ryujinx.Ava.csproj # src/Ryujinx.Ava/UI/Models/InputConfiguration.cs # src/Ryujinx.Ava/UI/Views/Input/ControllerInputView.axaml.cs # src/Ryujinx.Common/Configuration/AppDataManager.cs # src/Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs # src/Ryujinx.Common/ReleaseInformation.cs # src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs # src/Ryujinx.Cpu/Jit/JitCpuContext.cs # src/Ryujinx.Cpu/Jit/JitMemoryAllocator.cs # src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs # src/Ryujinx.Cpu/LightningJit/Arm32/Block.cs # src/Ryujinx.Cpu/LightningJit/Arm32/Decoder.cs # src/Ryujinx.Cpu/LightningJit/Arm32/MultiBlock.cs # src/Ryujinx.Cpu/LightningJit/Arm32/RegisterAllocator.cs # src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/Compiler.cs # src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs # src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitMemory.cs # src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitMove.cs # src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitNeonMemory.cs # src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitSaturate.cs # src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitSystem.cs # src/Ryujinx.Cpu/LightningJit/Arm64/InstName.cs # src/Ryujinx.Cpu/LightningJit/Arm64/RegisterAllocator.cs # src/Ryujinx.Cpu/LightningJit/Arm64/RegisterUtils.cs # src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/Compiler.cs # src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/Decoder.cs # src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitMemory.cs # src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs # src/Ryujinx.Cpu/LightningJit/Cache/CacheEntry.cs # src/Ryujinx.Cpu/LightningJit/Cache/NoWxCache.cs # src/Ryujinx.Cpu/LightningJit/LightningJitCpuContext.cs # src/Ryujinx.Cpu/LightningJit/LightningJitEngine.cs # src/Ryujinx.Cpu/LightningJit/Translator.cs # src/Ryujinx.Cpu/MemoryEhMeilleure.cs # src/Ryujinx.Graphics.Device/DeviceState.cs # src/Ryujinx.Graphics.GAL/ITexture.cs # src/Ryujinx.Graphics.GAL/Multithreading/Commands/Texture/TextureSetDataCommand.cs # src/Ryujinx.Graphics.GAL/Multithreading/Commands/Texture/TextureSetDataSliceCommand.cs # src/Ryujinx.Graphics.GAL/Multithreading/Commands/Texture/TextureSetDataSliceRegionCommand.cs # src/Ryujinx.Graphics.GAL/Multithreading/Resources/ThreadedTexture.cs # src/Ryujinx.Graphics.Gpu/Engine/InlineToMemory/InlineToMemoryClass.cs # src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdateTracker.cs # src/Ryujinx.Graphics.Gpu/Image/Texture.cs # src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs # src/Ryujinx.Graphics.OpenGL/Image/TextureBuffer.cs # src/Ryujinx.Graphics.OpenGL/Image/TextureView.cs # src/Ryujinx.Graphics.Texture/Astc/AstcDecoder.cs # src/Ryujinx.Graphics.Texture/BCnDecoder.cs # src/Ryujinx.Graphics.Texture/BCnEncoder.cs # src/Ryujinx.Graphics.Texture/ETC2Decoder.cs # src/Ryujinx.Graphics.Texture/LayoutConverter.cs # src/Ryujinx.Graphics.Texture/PixelConverter.cs # src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs # src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs # src/Ryujinx.Graphics.Vulkan/DescriptorSetManager.cs # src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs # src/Ryujinx.Graphics.Vulkan/PipelineState.cs # src/Ryujinx.Graphics.Vulkan/TextureBuffer.cs # src/Ryujinx.Graphics.Vulkan/TextureView.cs # src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs # src/Ryujinx.Gtk3/UI/Applet/GtkHostUIHandler.cs # src/Ryujinx.HLE.Generators/CodeGenerator.cs # src/Ryujinx.HLE.Generators/IpcServiceGenerator.cs # src/Ryujinx.HLE.Generators/ServiceSyntaxReceiver.cs # src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs # src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRendererBase.cs # src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs # src/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/IpAddressSetting.cs # src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs # src/Ryujinx.HLE/Ryujinx.HLE.csproj # src/Ryujinx.HLE/UI/IHostUIHandler.cs # src/Ryujinx.Headless.SDL2/Program.cs # src/Ryujinx.Headless.SDL2/WindowBase.cs # src/Ryujinx.Memory/MemoryBlock.cs # src/Ryujinx.Memory/MemoryManagement.cs # src/Ryujinx.Memory/MemoryManagementUnix.cs # src/Ryujinx.SDL2.Common/SDL2Driver.cs # src/Ryujinx.Ui.Common/App/ApplicationLibrary.cs # src/Ryujinx/Assets/Styles/Styles.xaml # src/Ryujinx/UI/Applet/AvaHostUIHandler.cs # src/Ryujinx/UI/ViewModels/GamePadInputViewModel.cs # src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs # src/Ryujinx/UI/ViewModels/InputViewModel.cs # src/Ryujinx/UI/ViewModels/KeyboardInputViewModel.cs # src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs # src/Ryujinx/UI/Views/Input/ControllerInputView.axaml # src/Ryujinx/UI/Views/Input/GamePadInputView.axaml # src/Ryujinx/UI/Views/Input/GamePadInputView.axaml.cs # src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml # src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs # src/Ryujinx/UI/Views/Input/MotionInputView.axaml.cs # src/Ryujinx/UI/Views/Input/RumbleInputView.axaml.cs # src/Ryujinx/UI/Windows/IconColorPicker.cs # src/Ryujinx/rd.xml
128 lines
5.7 KiB
Markdown
128 lines
5.7 KiB
Markdown
<p align="center">
|
|
<a href="https://melonx.org">
|
|
<img src="https://melonx.org/static/imgs/MeloNX.svg" alt="MeloNX Logo" width="120">
|
|
</a>
|
|
</p>
|
|
|
|
<h1 align="center">MeloNX</h1>
|
|
|
|
## Documentation
|
|
|
|
If you are planning to contribute or just want to learn more about this project please read through our [documentation](docs/README.md).
|
|
|
|
|
|
<p align="center">
|
|
MeloNX enables Nintendo Switch game emulation on iOS using the Ryujinx iOS code base.
|
|
</p>
|
|
|
|
<p align="center">
|
|
MeloNX is an iOS Nintendo Switch emulator based on Ryujinx, written primarily in C#. Designed to bring accurate performance and a user-friendly interface to iOS, MeloNX makes Switch games accessible on Apple devices.
|
|
Developed from the ground up, MeloNX is open-source and available on Github under the <a href="https://github.com/MeloNX-Emu/MeloNX/blob/master/LICENSE.txt" target="_blank">MeloNX license (Based on MIT)</a>. <br
|
|
</p>
|
|
|
|
### Step 3
|
|
# Compatibility
|
|
|
|
MeloNX works on iPhone XS/XR and later and iPad 8th Gen and later. Check out the Compatibility on the <a href="https://melonx.org/compatibility/" target="_blank">website</a>.
|
|
|
|
# Usage
|
|
|
|
## FAQ
|
|
- MeloNX is made for iOS 17+, on iOS 15 - 16 MeloNX can be installed but will have issues or may not work at all.
|
|
- MeloNX needs Xcode or a Paid Apple Developer Account. SideStore support may come soon (SideStore Side Issue)
|
|
- MeloNX needs JIT
|
|
- Recommended Device: iPhone 15 Pro or newer.
|
|
- Low-End Recommended Device**: iPhone 13 Pro.
|
|
- Lowest Supported Device: iPhone XR
|
|
|
|
|
|
## How to install
|
|
|
|
### Paid Developer Account
|
|
|
|
1. **Sideload the App**
|
|
- Use any sideloading tool that supports Apple IDs.
|
|
|
|
2. **Enable Entitlements**
|
|
- Visit [Apple Developer Identifiers](https://developer.apple.com/account/resources/identifiers).
|
|
- Locate **MeloNX** and enable the following entitlements:
|
|
- `Increased Memory Limit`
|
|
- `Increased Debugging Memory Limit`
|
|
|
|
3. **Reinstall the App**
|
|
- Delete the existing installation.
|
|
- Sideload the app again with the updated entitlements.
|
|
|
|
4. **Enable JIT**
|
|
- Use your preferred method to enable Just-In-Time (JIT) compilation.
|
|
|
|
5. **Add Necessary Files**
|
|
|
|
If having Issues installing firmware (Make sure your Keys are installed first)
|
|
- If needed, install firmware and keys from **Ryujinx Desktop**.
|
|
- Copy the **bis** and **system** folders
|
|
|
|
### Xcode
|
|
|
|
**NOTE: These Xcode builds are nightly and may have unfinished features.**
|
|
|
|
1. **Compile Guide**
|
|
- Visit the [guide here](https://git.743378673.xyz/MeloNX/MeloNX/src/branch/XC-ios-ht/Compile.md).
|
|
|
|
2. **Add Necessary Files**
|
|
|
|
If having Issues installing firmware (Make sure your Keys are installed first)
|
|
- If needed, install firmware and keys from **Ryujinx Desktop**.
|
|
- Copy the **bis** and **system** folders
|
|
|
|
## Features
|
|
|
|
- **Audio**
|
|
|
|
Audio output is entirely supported, audio input (microphone) isn't supported.
|
|
We use C# wrappers for [OpenAL](https://openal-soft.org/), and [SDL2](https://www.libsdl.org/) & [libsoundio](http://libsound.io/) as fallbacks.
|
|
|
|
- **CPU**
|
|
|
|
The CPU emulator, ARMeilleure, emulates an ARMv8 CPU and currently has support for most 64-bit ARMv8 and some of the ARMv7 (and older) instructions, including partial 32-bit support.
|
|
It translates the ARM code to a custom IR, performs a few optimizations, and turns that into x86 code.
|
|
There are three memory manager options available depending on the user's preference, leveraging both software-based (slower) and host-mapped modes (much faster).
|
|
The fastest option (host, unchecked) is set by default.
|
|
Ryujinx also features an optional Profiled Persistent Translation Cache, which essentially caches translated functions so that they do not need to be translated every time the game loads.
|
|
The net result is a significant reduction in load times (the amount of time between launching a game and arriving at the title screen) for nearly every game.
|
|
NOTE: This feature is enabled by default, You must launch the game at least twice to the title screen or beyond before performance improvements are unlocked on the third launch!
|
|
These improvements are permanent and do not require any extra launches going forward.
|
|
|
|
- **GPU**
|
|
|
|
The GPU emulator emulates the Switch's Maxwell GPU using Metal (via MoltenVK) APIs through a custom build of OpenTK or Silk.NET respectively.
|
|
|
|
- **Input**
|
|
|
|
We currently have support for keyboard, touch input, JoyCon input support, and nearly all controllers.
|
|
Motion controls are natively supported in most cases; for dual-JoyCon motion support, DS4Windows or BetterJoy are currently required.
|
|
In all scenarios, you can set up everything inside the input configuration menu.
|
|
|
|
- **DLC & Modifications**
|
|
|
|
MeloNX does not support add-on content/downloadable content.
|
|
Mods (romfs, exefs, and runtime mods such as cheats) are supported;
|
|
|
|
- **Configuration**
|
|
|
|
The emulator has settings for enabling or disabling some logging, remapping controllers, and more.
|
|
|
|
## License
|
|
|
|
This software is licensed under the terms of the [MeloNX license (Based on MIT License)](LICENSE.txt).
|
|
This project makes use of code authored by the libvpx project, licensed under BSD and the ffmpeg project, licensed under LGPLv3.
|
|
See [LICENSE.txt](LICENSE.txt) and [THIRDPARTY.md](distribution/legal/THIRDPARTY.md) for more details.
|
|
|
|
## Credits
|
|
|
|
- [Ryujinx](https://github.com/ryujinx-mirror/ryujinx) is used for the base of this emulator. (link is to ryujinx-mirror since they were supportive)
|
|
- [LibHac](https://github.com/Thealexbarney/LibHac) is used for our file-system.
|
|
- [AmiiboAPI](https://www.amiiboapi.com) is used in our Amiibo emulation.
|
|
- [ldn_mitm](https://github.com/spacemeowx2/ldn_mitm) is used for one of our available multiplayer modes.
|
|
- [ShellLink](https://github.com/securifybv/ShellLink) is used for Windows shortcut generation.
|