{"id":31865414,"url":"https://github.com/rupertavery/fami","last_synced_at":"2025-10-12T19:18:59.003Z","repository":{"id":72086322,"uuid":"400707962","full_name":"RupertAvery/Fami","owner":"RupertAvery","description":"A fast Nintendo Famicom/NES emulator with audio written in C#","archived":false,"fork":false,"pushed_at":"2023-11-22T19:30:30.000Z","size":890,"stargazers_count":14,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-04-24T06:38:19.886Z","etag":null,"topics":["csharp","emulation","emulator","famicom","nes"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RupertAvery.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-08-28T05:14:14.000Z","updated_at":"2024-02-13T18:20:53.000Z","dependencies_parsed_at":"2023-07-03T15:46:26.473Z","dependency_job_id":null,"html_url":"https://github.com/RupertAvery/Fami","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/RupertAvery/Fami","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RupertAvery%2FFami","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RupertAvery%2FFami/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RupertAvery%2FFami/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RupertAvery%2FFami/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RupertAvery","download_url":"https://codeload.github.com/RupertAvery/Fami/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RupertAvery%2FFami/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279012646,"owners_count":26085158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","emulation","emulator","famicom","nes"],"created_at":"2025-10-12T19:18:57.879Z","updated_at":"2025-10-12T19:18:58.984Z","avatar_url":"https://github.com/RupertAvery.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Fami - Famicom/NES Emulator\n\n**Fami** is a NES emulator written in C#.  The name is derived from the Japanese model of the NES, the Family Computer or Famicom.\n\nThe main goal was to build a fast NES emulator with sound in C#.\n\nWhen running in Debug mode, the emulator manages around 40-50 fps, but runs full speed when running in Release mode on a Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz.\n\n# Screenshots\n\n![image](https://user-images.githubusercontent.com/1910659/132545071-78baf290-197d-4dd0-b9b5-a9d4fb778295.png)\n\n![image](https://user-images.githubusercontent.com/1910659/132545227-e33430e0-f5b6-483b-b72a-4693ef096053.png)\n\n![image](https://user-images.githubusercontent.com/1910659/132545346-a13d6b1e-859b-49eb-88da-f3ea6cb9ce98.png)\n\n![image](https://user-images.githubusercontent.com/1910659/132545470-067b202f-ff32-473e-9d10-f5c6e52aa412.png)\n\n\n# Prerequisites\n\n* .NET 5 SDK\n* Visual Studio 2019 v16+\n\n# Features\n\n* Zapper/Light-gun support\n* Support for using controllers\n* Save/Load States (only slot 1 right now)\n* Rewind (up to 8 seconds)\n\n# Todo\n\n* Button mapping through a configuration file\n* Menus and dialogs\n* Implement more mappers\n* Fullscreen\n\n# Usage\n\n```\nfami.exe \"\u003cpath to rom\u003e\"\n```\n\n# Key mapping\n\nThe mappings don't use Space or Enter or Escape since Steam maps the controller to these buttons.\n\n|  Key        |  Function    |\n|-------------|--------------|\n|  Up         |  D-Pad Up    |\n|  Down       |  D-Pad Down  |\n|  Left       |  D-Pad Left  |\n|  Right      |  D-Pad Right |\n|  V          |  Start       |\n|  C          |  Select      |\n|  Z          |  Button A    |\n|  X          |  Button B    |\n|  R          |  Reset       |\n|  F2         |  Save State  |\n|  F4         |  Load State  |\n|  Backspace  |  Rewind      |\n\n# Mappers\n\n* NROM (000)\n* MMC1 (001)\n* UxROM (002)\n* MMC3 (004)\n* AxROM (007)\n\n# PPU\n\nThe PPU is a port of the C++ PPU used in One Lone Coders NES Emulation Tutorial and retains all the comments.\n\n# APU\n\nThe APU is taken from the BizHawk NES APU found here: https://github.com/TASVideos/BizHawk/blob/master/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/APU.cs\n\nI decided to use it as it gave the best audio output.\n\nIt uses blargg's `blip_buf` library to effectively generate samples that are timed against an emulation clock (it coincides with every tick of a CPU cycle) which greatly simplifies synchronization of audio.  \n\n# Known Issues\n\n## Zapper/Light gun \n\nIf you move the mouse immediately after firing, the sensor position will move, causing your aim to be off from where you clicked. \n\nRight-clicking to trigger \"outside\" of the screen kind of works.  It's good enough for game mode selection screens, but doesn't work well during actual gameplay. It still registers as a trigger \"inside\" the screen. This is probably caused by timing issues.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frupertavery%2Ffami","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frupertavery%2Ffami","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frupertavery%2Ffami/lists"}