{"id":21185816,"url":"https://github.com/dylangageot/mechgah","last_synced_at":"2025-10-09T14:05:40.106Z","repository":{"id":203049672,"uuid":"191144949","full_name":"dylangageot/mechgah","owner":"dylangageot","description":"Mechgah is an accurate NES emulator, developped for Linux and written in C.","archived":false,"fork":false,"pushed_at":"2021-02-27T09:53:54.000Z","size":4332,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-09T14:05:37.387Z","etag":null,"topics":["6502","c","emulator","nes","object-oriented"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dylangageot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-06-10T10:15:18.000Z","updated_at":"2023-10-23T19:15:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"fa8043f7-f738-4606-84bc-716c900a7701","html_url":"https://github.com/dylangageot/mechgah","commit_stats":null,"previous_names":["dylangageot/mechgah"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/dylangageot/mechgah","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dylangageot%2Fmechgah","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dylangageot%2Fmechgah/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dylangageot%2Fmechgah/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dylangageot%2Fmechgah/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dylangageot","download_url":"https://codeload.github.com/dylangageot/mechgah/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dylangageot%2Fmechgah/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279001530,"owners_count":26083117,"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-09T02:00:07.460Z","response_time":59,"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":["6502","c","emulator","nes","object-oriented"],"created_at":"2024-11-20T18:19:08.997Z","updated_at":"2025-10-09T14:05:40.101Z","avatar_url":"https://github.com/dylangageot.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mechgah README\n\n## Why develop a new NES emulator?\n\nThis project is born in our engineering school ([INSA Rennes](https://www.insa-rennes.fr/), France) as part of a C language programming course. For one semester, in a team of four, we had to demonstrate our knowledge on a practical case. We had the choice of the subject, so we chose to develop a NES emulator because we thought (and it was) that it could train us on some aspect of computer architecture with the 6502 that NES use and, by the way, learn how gaming was in the past. This work was possible with the tons of documentation that is available on [NESdev](https://nesdev.com/).\n\nOur team is composed of:\n- Baptiste **Me**hat (CPU, PPU)\n- Nicolas **Ch**abanis (CPU, Loader, Controller)\n- Dylan **Ga**geot (CPU, PPU, NROM Mapper)\n- Nicolas **H**ily (CPU, Controller, SDL)\n\n## Dependencies\n\nOur NES emulator depends on various library, which are:\n\n- libsdl1.2-dev\n- libsdl-gfx1.2-dev\n- [cmocka](https://cmocka.org/)\n\nYou can install libsdl1.2-dev and libsdl-gfx1.2-dev with this command on Ubuntu :\n```bash\nsudo apt install libsdl1.2-dev libsdl-gfx1.2-dev\n```\n\n## Makefile\n\n```bash\nmake            # build mechgah executable (you can precise mechgah)\nmake run-test   # build unit test and run it with Valgrind\n                # and code coverage feature\nmake doc        # build Doxygen documentation from doxyfile\nmake clean      # clean every generated file (including coverage and doc dir)\n```\n\n## CMake\n\nRun the following command to compile this project through CMake:\n```bash\ncmake . -Bbuild\ncd build\nmake mechgah    # build mechgah executable\nmake utest      # build unit test\n```\nIf you want to launch unit tests, run ./build/utest from the root of the repository (that is because our unit tests use relative path for file opening). If you are using CLion, precise executables working directory to root path.\n\n## User manual\n\n### Synopsis\n```bash\n./mechgah [OPTION]... [ROM]\n```\n\n### Description\n\nLaunches the NES emulator on the given ROM filename and with the given OPTION. If no ROM filename is given, the emulator won't launch. If multiple filenames are given, the emulator will launch with the first one.\n\n### Options\n\n    -s [scale]\n      Defines the scaling factor. Must be between 1 (genuine resolution) and 15 (4K resolution).\n      If not specified, scaling factor is set to 2.\n\n## Screenshot\n\n![Screenshot of SMB on Mechgah](https://github.com/dylangageot/mechgah/blob/master/gestion-de-projet/rapport/images/smb_nes.png)\n\n## Todo\n\n- Add APU\n- Add mappers\n- Enhance PPU behavior (optimization with prediction algorithm)\n- Troubleshoot Controller (aren't working after a Game Over on *Super Mario Bros.*)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdylangageot%2Fmechgah","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdylangageot%2Fmechgah","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdylangageot%2Fmechgah/lists"}