Skip to content
Screenshot of Dn-FamiTracker 0.5.0.2
Screenshot of Dn-FamiTracker 0.5.0.2 Image by Dn-Programming-Core-Management, via Wikimedia Commons (GPL).

Fami

NES EMULATOR

Fami

Fami is an open-source Nintendo Famicom / NES emulator written in C# (.NET). It aims for fairly fast performance with audio and basic features (save states, rewind, zapper support) and implements several common NES mappers.

NESPRIMARY SYSTEM
2021PROJECT BEGAN
Open sourcePROJECT MODEL

WHY IT MATTERS

Why this project exists

Fami was created to produce a fast, usable NES/Famicom emulator implemented in C#, with working audio and support for several common cartridge mappers. The repository documents a focus on performance (Release-mode full speed on modern CPUs) and on reusing proven components for PPU and APU functionality.

BEST FOR

Best use cases

Quick experimentation, learning how a simple NES emulator is structured in C#, and playing many NROM/MMC1/UxROM/MMC3/other-mapped ROMs for testing. Useful to developers who want a C# codebase showing a PPU port and an APU implementation borrowed from BizHawk.

The Legend of Zelda gameplay on NES
Gameplay from The Legend of Zelda on NES.

The people behind Fami

History & maintenance

The repository was first committed and the README added in September 2021. Development continued with multiple mapper and PPU improvements through 2021 and later; commits show activity beyond 2021. The project is hosted on GitHub under an open-source license and publishes releases on the repository's Releases page. The code uses a PPU port derived from the One Lone Coder NES tutorial and an APU implementation adapted from the BizHawk NES APU source. Known limitations and TODO items are documented in the README (menu/dialog work, more mappers, button mapping via config, fullscreen).

What Fami supports

  • Nintendo Famicom (Famicom)
  • Nintendo Entertainment System (NES)
  • Common NES cartridge mappers: NROM, MMC1, UxROM, MMC3, AxROM (plus additional mappers added in later commits)
  • PC host running .NET-compatible runtimes

Download and availability

OFFICIAL DOWNLOADS

Get Fami

Official binaries and release artifacts (if any) are published on the project's GitHub Releases page; source can be cloned from the repository.

Get Fami ↗

DOCUMENTATION

Official documentation

Read the official configuration, compatibility, and troubleshooting material before changing advanced options.

Read official documentation ↗
Broken or missing download? Emulator projects move and official links sometimes change. Please contact Retro Replay so the source can be verified and updated.

Fami setup guide

Setup note: This project can be used either by downloading a release (if present) or by building from source. Building from source is the recommended way to get the most up-to-date fixes and mapper improvements.

  1. Prerequisites: Windows development: .NET 5 SDK and Visual Studio 2019 (v16+) are listed as prerequisites in the repository README. The code is C#/.NET and targets .NET, so ensure an appropriate SDK/runtime is installed for the release you intend to run or build.
  2. Download a release or clone the repo: If you prefer prebuilt artifacts, check the repository's Releases page for assets. Otherwise, clone the repository (https://github.com/RupertAvery/Fami) and open the solution (Fami.sln) in Visual Studio.
  3. Build (from source): Open Fami.sln in Visual Studio targeting the recommended SDK (README lists .NET 5). Build the solution in Release configuration to achieve playable performance (the README notes debug mode can be slow; Release runs at full speed on modern CPUs).
  4. Run from command line: The README shows the simple usage: fami.exe "<path to rom>". The UI project (Fami.UI) hosts the frontend; the command-line invocation loads the specified ROM image. Verify the executable you run matches the architecture/runtime you built for (x86/x64).
  5. Controller, keys and Zapper (light gun): The README contains the built-in keyboard mappings (arrow keys, Z/X for A/B, V/C for Start/Select, F2/F4 for save/load state, Backspace for rewind). Zapper/light-gun support is implemented but the README warns of timing-related inaccuracies and mouse movement issues immediately after firing; use with caution for precision gameplay.
  6. Save states and rewind: Fami supports save/load state (currently only a single slot is documented) and a rewind feature up to 8 seconds. Use F2 to save and F4 to load (per README). Rewind is mapped to Backspace by default.
  7. Mapper and compatibility notes: The README lists supported mappers (NROM/000, MMC1/001, UxROM/002, MMC3/004, AxROM/007) and documents the PPU implementation is a port from an educational C++ PPU (One Lone Coder tutorial). The APU is adapted from BizHawk's NES APU implementation and uses blargg's blip_buf for audio timing.
  8. Known issues and troubleshooting: The README documents zapper accuracy problems and other timing issues (e.g., right-click outside-screen behavior). If games behave incorrectly, try debugging with Release build, check for mapper support for the ROM, or test with simpler NROM games first. If audio or timing is off, ensure you built/run against the runtime version the project targets and that the audio backend on the host is functioning.

Software reminder: Fami does not include commercial game ROMs, firmware, or BIOS files. You must supply your own legally-obtained ROM images. Follow all applicable laws when obtaining game files.

Sources and further reading

Detailed guides and tutorials

Explore step-by-step guides for Fami as they are published.