I love emulators. I love that they exist. I love that we have computers that are not only fast enough to translate and emulate instructions in real time for
totally different computers that may not even exist any more but also for computers that are shipping today!
I love these C# based emulators:
Today I learned about
Ryujinx, an experimental Nintendo Switch Emulator written in C# on .NET Core. The homepage is at https://ryujinx.org/. Emulators are great for learning about how to write and factor great code. Some are certainly "big ball of mud" architecture, but RyuJinx is VERY nice.
Ryujix is particularly cleanly factored with individual projects and modules that really follow the single responsibility principal.
It's written in
.NET 5 and you can just git clone it, and go into the Ryujinx folder and "dotnet run," or build from Visual Studio. There are also daily builds on their site.
Some of the impressive features - and again, this is written in C# on cross-platform open source .NET 5:
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. The GPU emulator emulates the Switch's Maxwell GPU using the OpenGL API (version 4.4 minimum) through a custom build of OpenTK. Xinput-compatible controllers are supported natively; other controllers can be supported with the help of Xinput wrappers such as x360ce.
Most emulators are created for educational and experimental purposes, so don't look to be using this for nefarious purposes. This is a fantastic codebase to explore and experiment with.
Using a computer is like riding in a Lyft. Writing an Emulator is like disassembling an internal combustion engine and putting it back together differently and it still works. It won't make you a better person but it will make you appreciate your Lyft.
Sponsor: Simplify code, reduce costs, and build faster without compromising the transactionality, scale and flexibility you need. Fauna - a global serverless database for all your applications. Learn more!