{"id":17256472,"url":"https://github.com/tianzerl/fcpp","last_synced_at":"2025-07-04T09:38:26.832Z","repository":{"id":134393482,"uuid":"504051347","full_name":"TianZerL/FCPP","owner":"TianZerL","description":"A cross-platform, simple and accurate FC/NES emulator in C++","archived":false,"fork":false,"pushed_at":"2024-04-09T16:00:37.000Z","size":1035,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-23T21:43:25.358Z","etag":null,"topics":["cpp","emulator","emulators","fc","nes"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TianZerL.png","metadata":{"files":{"readme":"readme.cn.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-06-16T07:14:41.000Z","updated_at":"2025-02-04T17:42:28.000Z","dependencies_parsed_at":null,"dependency_job_id":"6860af5d-e66e-4a9f-b203-1a1ea438a9c5","html_url":"https://github.com/TianZerL/FCPP","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/TianZerL/FCPP","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TianZerL%2FFCPP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TianZerL%2FFCPP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TianZerL%2FFCPP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TianZerL%2FFCPP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TianZerL","download_url":"https://codeload.github.com/TianZerL/FCPP/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TianZerL%2FFCPP/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263484398,"owners_count":23473753,"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","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":["cpp","emulator","emulators","fc","nes"],"created_at":"2024-10-15T07:14:32.381Z","updated_at":"2025-07-04T09:38:26.796Z","avatar_url":"https://github.com/TianZerL.png","language":"C++","readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./images/Logo.svg\"\u003e\n\u003c/div\u003e\n\n# FCPP\nFCPP是一个使用C++实现的，跨平台的、简单而精确的FC/NES模拟器。\nFCPP是我的本科毕业设计，但我希望不止于此，而是继续做得更好。\n\nFCPP可以编译为WebAssembly，[在浏览器中尝试!](https://tianzerl.github.io/FCPP_WASM_DEMO/)\n\n# 截图\n![截图](/images/Screenshots.png)\n\n# 默认按键映射\n| NES手柄 | 键盘  | Xbox360手柄 |\n| ------- | ----- | ----------- |\n| A       | A     | A           |\n| B       | S     | B           |\n| Select  | X     | X           |\n| Start   | Z     | Start       |\n| Up      | Up    | Up          |\n| Down    | Down  | Down        |\n| Left    | Left  | Left        |\n| Right   | Right | Right       |\n| Turbo A | Q     | LB          |\n| Turbo B | W     | RB          |\n\n# 快捷键\n| 按键 | 功能      | QFCPP支持 | TFCPP支持 |\n| ---- | --------- | --------- | --------- |\n| F1   | 快速存档  | 是        | 是        |\n| F2   | 快速读档  | 是        | 是        |\n| F3   | 重置      | 是        | 是        |\n| F4   | 暂停\\恢复 | 是        | 是        |\n| F5   | 倒带      | 是        | 否        |\n\n# 编译\n## 第三方库\n- SDL2（可选，作为多媒体后端）\n- SFML2（可选，作为多媒体后端）\n- raylib（可选，作为多媒体后端，可由CMake自动下载）\n- Qt5或者Qt6（可选，用于编译GUI）\n- Pybind11（可选，用于编译Python绑定，可由CMake自动下载）\n## 编译工具\n- CMake（v3.13及以上）\n- 支持C++17的编译器\n## CMake选项\n| 选项                      | 描述                 | 默认值 |\n| ------------------------- | -------------------- | ------ |\n| FCPP_SHARED_LIB           | 编译为动态库         | OFF    |\n| FCPP_IO_WITH_SFML2        | 编译SFML2后端        | OFF    |\n| FCPP_IO_WITH_SDL2         | 编译SDL2后端         | ON     |\n| FCPP_IO_WITH_RAYLIB       | 编译raylib后端       | OFF    |\n| FCPP_BUILD_CLI            | 编译CLI              | ON     |\n| FCPP_BUILD_GUI            | 编译GUI              | ON     |\n| FCPP_BUILD_TEST_CORE      | 编译libfcpp测试程序  | OFF    |\n| FCPP_BUILD_TEST_WASM      | 编译WASM测试demo     | OFF    |\n| FCPP_BUILD_TEST_DEBUGGER  | 编译Debugger测试demo | OFF    |\n| FCPP_BUILD_C_BINDING      | 编译C语言绑定        | OFF    |\n| FCPP_BUILD_PYTHON_BINDING | 编译Python绑定       | OFF    |\n| FCPP_BUILD_WASM           | 编译wasm相关库       | OFF    |\n| FCPP_BUILD_TOOLS          | 编译fcpp_tools库     | OFF    |\n| FCPP_LTO                  | 开启链接时优化       | OFF    |\n## 构建示例\n### Windows（MSVC）\n1. 根据需要调整CMake选项，并使用CMake生成Visual Studio项目。\n2. 若无特殊需求，调整构建模式为release。\n3. 生成`ALL_BUILD`项目。\n4. （可选）生成`INSTALL`项目，安装二进制文件到指定位置。\n### Linux（GCC或者Clang）\n以KUbuntu21.10使用Qt5编译默认CMake配置为例：\n\n```shell\n# 安装Qt5和SDL2\nsudo apt-get install qtbase5-dev qtbase5-dev-tools qttools5-dev libsdl2-dev\n# 进入FCPP根目录，准备构建\ncd FCPP \u0026\u0026 mkdir build \u0026\u0026 cd build\n# 执行cmake\ncmake ..\n# 构建\nmake\n# 执行二进制文件\n./bin/qfcpp\n# 安装（可选）\nmake install\n```\n### WASM (Emscripten)\n使用Emscripten编译不需要额外依赖项，下载emsdk编译即可\n```shell\n# 进入FCPP根目录，准备构建\ncd FCPP \u0026\u0026 mkdir build_wasm \u0026\u0026 cd build_wasm\n# 执行cmake\nemcmake cmake .. -DFCPP_PRESET_EMSCRIPTEN=ON -DROM_PATH=\"/rom/文件/路径\"\n# 构建\nemmake make\n# 开启一个http服务器以在浏览器上运行\nemrun ./bin/fcpp_test_wasm.html\n```\n### Mac\n未测试，理论可行，和Linux类似\n\n# Mapper支持\n- Mapper 0\n- Mapper 1\n- Mapper 2\n- Mapper 3\n- Mapper 4\n- Mapper 7\n- Mapper 9\n- Mapper 10\n- Mapper 11\n- Mapper 13\n- Mapper 92\n- Mapper 180\n\nMapper与游戏的对应关系可参考[此处](http://tuxnes.sourceforge.net/nesmapper.txt).\n\n# 测试ROM\n- [NovaTheSquirrel](https://github.com/NovaSquirrel/NovaTheSquirrel)\n- [nes-test-roms](https://github.com/christopherpow/nes-test-roms)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftianzerl%2Ffcpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftianzerl%2Ffcpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftianzerl%2Ffcpp/lists"}