{"id":30174357,"url":"https://github.com/alpyen/zynq-gbcartreader","last_synced_at":"2026-02-08T22:31:54.768Z","repository":{"id":305974603,"uuid":"1024575252","full_name":"alpyen/zynq-gbcartreader","owner":"alpyen","description":"Embedded Software Development project to read \u0026 write GameBoy cartridges.","archived":false,"fork":false,"pushed_at":"2025-12-07T14:23:16.000Z","size":1754,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-09T11:14:13.315Z","etag":null,"topics":["cpp","embedded","fpga","gameboy","gameboy-color","vhdl","vitis","vivado"],"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/alpyen.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":"2025-07-22T23:35:07.000Z","updated_at":"2025-12-07T14:23:19.000Z","dependencies_parsed_at":"2025-08-16T17:13:01.636Z","dependency_job_id":"05c06a5f-5ca1-417e-a848-8b8b53335801","html_url":"https://github.com/alpyen/zynq-gbcartreader","commit_stats":null,"previous_names":["alpyen/zynq-gbcartreader"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alpyen/zynq-gbcartreader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alpyen%2Fzynq-gbcartreader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alpyen%2Fzynq-gbcartreader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alpyen%2Fzynq-gbcartreader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alpyen%2Fzynq-gbcartreader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alpyen","download_url":"https://codeload.github.com/alpyen/zynq-gbcartreader/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alpyen%2Fzynq-gbcartreader/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29247593,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T21:42:34.334Z","status":"ssl_error","status_checked_at":"2026-02-08T21:41:38.468Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cpp","embedded","fpga","gameboy","gameboy-color","vhdl","vitis","vivado"],"created_at":"2025-08-12T00:50:26.868Z","updated_at":"2026-02-08T22:31:54.763Z","avatar_url":"https://github.com/alpyen.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Note: This project is a work in progress and is being actively developed. See the Todo-List at the bottom.\n\n\n___\n\n# ZYNQ GBCartReader - Read \u0026 Write GameBoy cartridges\n\nThis project is aimed to dive into FPGA SoCs and embedded software development\nby designing a system that's able to read and write to gameboy cartridges with\na custom designed PCB which interfaces between the FPGA and the game cartridge.\n\nStarting from a very basic bitbanging implementation solely running on the ARM core,\nthe following design iterations will make use of a more sophisticated architecture\nby offloading the board communication to an IP core and moving commands and responses\naround with AXI interfaces.\n\n\u003cdiv align=\"center\"\u003e\n   \u003cimg width=\"58.4%\" src=\"docs/front.jpg\" /\u003e\n   \u003cimg width=\"36.6%\" src=\"docs/back.jpg\" /\u003e\u003cbr\u003e\n   A (badly) handsoldered demonstration of this project with a Pokémon Red cartridge.\u003cbr\u003e\n   Left is Top, Right is Bottom.\n\u003c/div\u003e\n\n\n## Supported Cartridge Types\n\nThere are a couple of different cartridge types that mostly distinguish between the type of\nmapper chip and additional periphery such as RAM, Real-Time-Clock, Battery and more. Here's\na list of the ones that are available.\n\n|  Type  | Status  | Verified On                                                                                  |\n| :----: | :-----: | :------------------------------------------------------------------------------------------- |\n| No MBC |   ✅    | Motocross Maniacs (DMG-MX-NOE)\u003cbr\u003e Othello (DMG-OT-NOE)                                      |\n|  MBC1  |   ✅*   | Super Mario Land (DMG-ML-NOE)                                                                |\n|  MBC2  |   ✅    | F-1 RACE (DMG-F1-NOE)                                                                        |\n|  MBC3  | WIP ✅* | Pokémon Crystal (CGB-BYTD-NOE)\u003cbr\u003e Pokémon Silver (DMG-AAXD-NOE)                             |\n|  MBC5  |   ✅    | Pokémon Red (DMG-APAD-NOE)\u003cbr\u003e Pokémon Blue (DMG-APED-NOE)\u003cbr\u003e Pokémon Yellow (DMG-APSD-NOE) |\n\n- ✅ compatible and verified\u003cbr\u003e\n- ✅* compatible but only partially verified\u003cbr\u003e\n- 🚫 not implemented yet\n\nSome exotic cartridges exist which are not supported. For an exhaustive list check the \u003ca href=\"https://gbdev.io/pandocs/MBC2.html\"\u003ePan Docs\u003c/a\u003e\nand \u003ca href=\"https://gbhwdb.gekkio.fi/cartridges/gb.html\"\u003eGameBoy hardware database\u003c/a\u003e. Most games simply use No MBC, MBC1, 3 or 5.\nIf I own any of the uncommon ones I'll implement them, otherwise I'll skip them as I cannot verify them.\n\n\n## Quick Start\n\nThis project was developed with Vivado/Vitis 2025.1 and uses scripts for these versions.\nIt should be possible to recreate the projects with minimal hassle on older versions.\n\n\n### Vivado\n\nYou can regenerate the project by starting Vivado and opening the tcl console.\nNavigate with `cd` into the vivado subfolder and run: `source regenerate.tcl`\n\nVivado will rebuild the project from the source files. Once that's done you can\ngenerate the wrappers for the different block design implementations, synthesize\nand export the XSA files for use in Vitis.\n\n\u003e Note: The automatic wrapper generation is not implemented for now.\n\n### Vitis\n\nVitis offers a python interface to dispatch commands from scripts to the application.\nIn order to use this, you need to source the settings64.sh from the Vitis installation.\nIf you've installed the Xilinx tools in the default location then open up a new terminal\nand load the settings by running these commands based on your operating system:\n\n- Windows: `call C:/Xilinx/2025.1/Vitis/settings64.bat`\n- Linux: `source /opt/Xilinx/2025.1/Vitis/settings64.sh`\n\nIn the same terminal navigate with `cd` into the vitis subfolder of this repository\nand run: `vitis -s regenerate.py`\n\n\u003e Note: This script has to be run from Vitis, it will not work with your local python installation.\n\nThe script takes care of several things:\n1. Performs sanity checks to see if the execution environment is correct and if the\n   XSA files have been exported, otherwise the platform generation will fail.\n2. Delete **everything** except the regenerate.py inside the vitis subfolder to remove\n   a potentionally old workspace.\n3. Regenerate the different platforms and applications used to run it on the board.\n4. Link sources located outside the vitis workspace to into the projects.\n\nOnce the regeneration is complete you can open the Vitis GUI and set the workspace\nto the vitis subfolder. Now you're ready to build the applications and deploy them.\n\n\n___\n\n### Acknowledgements\n\nThis project heavily relies on the work of others who have reverse engineered and documented\nthe inner workings of the Game Boy and its cartridges and/or compiled existing information:\n- Pan Docs - https://github.com/gbdev/pandocs\n- Game Boy: Complete Technical Reference - https://github.com/Gekkio/gb-ctr\n\n\n___\n\n### Todo-List\n\n- Port bare-metal app to MicroBlaze on a Basys3\n- Port bare-betal app to be used on Arduino\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falpyen%2Fzynq-gbcartreader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falpyen%2Fzynq-gbcartreader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falpyen%2Fzynq-gbcartreader/lists"}