All Projects → enusbaum → Xamarines

enusbaum / Xamarines

Licence: mit
🕹️📱Cross-Platform Nintendo Emulator using Xamarin and .Net Standard!

Programming Languages

csharp
926 projects

Projects that are alternatives of or similar to Xamarines

Simpleauth
The Simplest way to Authenticate and make Rest API calls in .Net
Stars: ✭ 148 (-3.27%)
Mutual labels:  xamarin, uwp, xamarin-forms
Csla
A home for your business logic in any .NET application.
Stars: ✭ 865 (+465.36%)
Mutual labels:  xamarin, uwp, xamarin-forms
Xamarin.forms.googlemaps
Map library for Xamarin.Forms using Google maps API
Stars: ✭ 483 (+215.69%)
Mutual labels:  xamarin, uwp, xamarin-forms
Arcgis Toolkit Dotnet
Toolkit for ArcGIS Runtime SDK for .NET
Stars: ✭ 125 (-18.3%)
Mutual labels:  xamarin, uwp, xamarin-forms
Plugin.audiorecorder
Audio Recorder plugin for Xamarin and Windows
Stars: ✭ 140 (-8.5%)
Mutual labels:  xamarin, uwp, xamarin-forms
Professionalcsharp7
Code samples for the book Professional C# 7 and .NET Core 2.0 (with updates for 2.1), Wrox Press
Stars: ✭ 403 (+163.4%)
Mutual labels:  xamarin, uwp, xamarin-forms
Reactiveui
An advanced, composable, functional reactive model-view-viewmodel framework for all .NET platforms that is inspired by functional reactive programming. ReactiveUI allows you to abstract mutable state away from your user interfaces, express the idea around a feature in one readable place and improve the testability of your application.
Stars: ✭ 6,709 (+4284.97%)
Mutual labels:  xamarin, uwp, xamarin-forms
Arcgis Runtime Samples Dotnet
Sample code for ArcGIS Runtime SDK for .NET – UWP, WPF, Xamarin.Android, Xamarin.iOS, and Xamarin.Forms
Stars: ✭ 274 (+79.08%)
Mutual labels:  xamarin, uwp, xamarin-forms
Xamarin.plugins
Cross-platform Native API Access from Shared Code!
Stars: ✭ 1,176 (+668.63%)
Mutual labels:  xamarin, uwp, xamarin-forms
Mvvmlight
The main purpose of the toolkit is to accelerate the creation and development of MVVM applications in Xamarin.Android, Xamarin.iOS, Xamarin.Forms, Windows 10 UWP, Windows Presentation Foundation (WPF), Silverlight, Windows Phone.
Stars: ✭ 973 (+535.95%)
Mutual labels:  xamarin, uwp, xamarin-forms
Ammyui
Ammy language repository
Stars: ✭ 356 (+132.68%)
Mutual labels:  xamarin, uwp, xamarin-forms
Ffimageloading
Image loading, caching & transforming library for Xamarin and Windows
Stars: ✭ 1,288 (+741.83%)
Mutual labels:  xamarin, uwp, xamarin-forms
Mvvmcross
The .NET MVVM framework for cross-platform solutions, including Xamarin.iOS, Xamarin.Android, Windows and Mac.
Stars: ✭ 3,594 (+2249.02%)
Mutual labels:  xamarin, uwp, xamarin-forms
Htmllabelplugin
Use this Xamarin.Forms plugin to display HTML content into a label.
Stars: ✭ 119 (-22.22%)
Mutual labels:  xamarin, uwp, xamarin-forms
Open Source Xamarin Apps
📱 Collaborative List of Open Source Xamarin Apps
Stars: ✭ 318 (+107.84%)
Mutual labels:  xamarin, uwp, xamarin-forms
Smarthotel360 Mobile
SmartHotel360 Mobile
Stars: ✭ 535 (+249.67%)
Mutual labels:  xamarin, uwp, xamarin-forms
DevOpsExamples
A repo to show you how to use a private NuGet feed, such as Telerik, to restore packages in Azure DevOps, GitHub Actions, GitLab CI and AppCenter.
Stars: ✭ 16 (-89.54%)
Mutual labels:  xamarin, uwp, xamarin-forms
arcgis-runtime-demos-dotnet
Demo applications provided by the ArcGIS Runtime SDK for .NET Team
Stars: ✭ 51 (-66.67%)
Mutual labels:  xamarin, uwp, xamarin-forms
Rg.plugins.popup
Xamarin Forms popup plugin
Stars: ✭ 964 (+530.07%)
Mutual labels:  xamarin, uwp, xamarin-forms
Faceoff
An iOS, Android and UWP app created in Xamarin.Forms that uses Microsoft's Cognitive Emotion API Services to compare facial expressions
Stars: ✭ 79 (-48.37%)
Mutual labels:  xamarin, uwp, xamarin-forms

XamariNES - A Cross-Platform NES Emulator using .Net!

XamariNES is a cross-platform Nintendo Emulator using .Net Standard written in C#. This project started initially as a nighits/weekend project of mine to better understand the MOS 6502 processor in the original Nintendo Entertainment System. The CPU itself didn't take long working on it a couple hours here and there. I decided once the CPU was completed, how hard could it be just to take it to next step and do the PPU? Here we are a year later and I finally think I have the PPU in a semi-working state.

I've been a huge fan of the Microsoft Xamarin platform for many years now and wanted to utilize it as my UI layer for the emulator. This allowed me to write a fairly simple Xamarin.Forms project and quickly target multiple platforms (iOS, Android, macOS, and Windows) with only a couple platform specific lines of code. If you haven't used Xamarin or Xamarin.Forms, please use this solution to give it a whirl!

My goals for this project were simple:

  • Write my fist emulated 8-bit CPU using C#
  • Learn the inner workings of the MOS 6502 CPU powering the original Nintendo Entertainment System
  • Structure the code to match the NES schematic as closely as possible
  • Write the code in a way that made it readable and easier to understand for someone wanting to learn as I was
  • Use .Net Standard & Microsoft Xamarin.Forms Framework to make the emulator cross-platform

Contribute!

There's still a TON of things missing from this emulator and areas of improvement which I just haven't had the time to get to yet.

  • Performance Improvements
  • Additional Cartridge Mappers
  • Audio Support (for the brave)

Solution Layout

Projects have a README.MD which expands on the internal functionality and layout of that project. I tried to make the solution layout similar to that of the PCB within an actual Nintendo. This is why XamariNES uses delegates as the interconnect between the PPU and the CPU (representing the PCB traces), which differs from other emulators that might pass the CPU & PPU obejcts into one another for reference.

A brief summary of each project is as follows:

  • XamariNES.Emulator - The System
    • All components are integrated into this project, same as the PCB
    • External facing actons (Controller Input, ROM Loading) go through the Emulator
    • Handles clock synchronization/frame limiting of the CPU & PPU
    • Implements DMA Delegate to handle transfer of data between CPU & PPU
  • XamariNES.CPU - MOS 6502 CPU
    • CPU Core
    • CPU Memory & Registers
    • Access to Cartridge Memory Mapper
  • XamariNES.PPU - NES Picture Processing Unit
    • PPU Core
    • PPU Memory, Registers, and Latches
    • Access to Cartridge Memory Mapper
  • XamariNES.Cartridge - NES Cartridge
    • Handles loading the specified ROM and setting up PRG/CHR banks
    • Exposes Memory Mapper used by CPU & PPU to access PRG/CHR memory
    • Interceptor Pattern to allow for hooks/delegates to be mapped to memory offsets
  • XamariNES.Controller - NES Controller
    • Maintains and exposes controller button states
  • XamariNES.UI.platform - Xamarin.Forms projects for cross-platform UI
    • Xamarin.Forms project containing the UI logic for the emulator
    • Projects specific to their respective platforms (iOS, Android, Windows, macOS)

There are also a couple Common/Support/Testing projects which contain miscellaneous functionality.

Thanks!

I wanted to put down some thank you's here for folks/projects/websites that were invaluable for helping me get this project into a functional state:

  • Nesdev wiki - Wealth of detailed, accurate information on all aspects of the Nintendo Entertainment System
  • 6502.org - Great amount of documentation, errata and tools specific to the MOS 6502 processor. Their interactive simulator specifically was invaluable for debugging the CPU
  • Obelisk.me.uk - Concise 6502 documentation, included a lot of it on my opcode documentation
  • NEScafé Emulator by Rhys Rustad-Elliott - I literally would not have been able to untangle how the PPU works without this. Borrowed many of the same routines and logic around memory access and frame rendering

License & Copyright

XamariNES is Copyright (c) 2019 Eric Nusbaum and is distributed under the MIT License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].