{"id":16188574,"url":"https://github.com/konsumer/dkart","last_synced_at":"2025-07-22T14:38:02.551Z","repository":{"id":6521939,"uuid":"7762876","full_name":"konsumer/dkart","owner":"konsumer","description":"An open-hardware and software Gameboy flash-cart and hardware peripheral framework","archived":false,"fork":false,"pushed_at":"2020-05-20T11:57:42.000Z","size":2988,"stargazers_count":28,"open_issues_count":2,"forks_count":2,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-02T22:33:14.829Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/konsumer.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}},"created_at":"2013-01-22T22:33:53.000Z","updated_at":"2024-10-09T17:14:37.000Z","dependencies_parsed_at":"2022-09-08T02:36:15.448Z","dependency_job_id":null,"html_url":"https://github.com/konsumer/dkart","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/konsumer/dkart","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konsumer%2Fdkart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konsumer%2Fdkart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konsumer%2Fdkart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konsumer%2Fdkart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/konsumer","download_url":"https://codeload.github.com/konsumer/dkart/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konsumer%2Fdkart/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266511249,"owners_count":23940769,"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-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"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":[],"created_at":"2024-10-10T07:28:04.611Z","updated_at":"2025-07-22T14:38:02.518Z","avatar_url":"https://github.com/konsumer.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dkart\n\nAn open-hardware and software Gameboy flash-cart and hardware peripheral framework that uses off-the-shelf hardware. The goal is to be ultra-cheap and simple.\n\n![logo](./logo.png)\n\n## quickstart\n\nIf you just want to get started, go to [releases](https://github.com/konsumer/dkart/releases) and grab `dkart.gb`, and put it on a FAT32-formatted SDCard. Solder together the hardware, plug it in, and startup your gameboy.\n\n\n## Hardware\n\nIt's meant to be very cheap \u0026 easy to put together. I made a PCB, and you can just solder in a [cheap ESP32 board](https://www.banggood.com/Geekcreit-ESP32-WiFibluetooth-Development-Board-Ultra-Low-Power-Consumption-Dual-Cores-Unsoldered-p-1214159.html) and the [SDCard shield](https://www.banggood.com/SD-Card-Module-Slot-Socket-Reader-Mp3-player-p-74105.html), and it should work.\n\nOriginally, I designed this as a custom circuit with really low-resource chips, but realized it was much easier and cheaper to just use more modern ready-made stuff.\n\nEventually I'd like to add an i2c bus that can be triggered/read from gameboy, so users can easily mess with hardware peripherals.\n\nI am still working on the PCB \u0026 schematic. You can open hardware/Dkart.json at [easyeda](https://easyeda.com/).\n\n### under consideration\n\nHere are some other ideas I am looking at:\n\n* [STM32F401](https://www.banggood.com/STM32F401-Development-Board-STM32F401CCU6-STM32F4-Learning-Board-p-1568897.html)\n* [This board](https://www.banggood.com/LILYGO-TTGO-T2-ESP32-0_95-OLED-SD-Card-WiFi-bluetooth-Module-Development-Board-p-1270477.html) has a SDCard and OLED screen (and wifi/bluetooth)\n* [cheap atmega2560 board](https://robotdyn.com/mega-2560-pro-mini-atmega2560-16au.html), works with arduino \u0026 has more IO/RAM/CPU, but still not big enough to hold every ROM\n* [fast flash mem](https://www.sparkfun.com/products/15809) - I could load the rom \u0026 ram into flash temporarily on a lower-end microcontroller, then feed the data to the GB.\n* [something like this](https://www.banggood.com/GY-Openlog-Cleanflight-Naze32-F3-Blackbox-Flash-Recorder-Module-p-1309673.html) has a lot of storage (32GB) but might not be fast enough\n* [ready-made cart PCB](https://store.kitsch-bent.com/product/kk_gb_brkout) - with a little simple soldering and a big flash chip, I could probly get it all to fit inside a cartridge\n* [something like this](http://ww1.microchip.com/downloads/en/DeviceDoc/20005023B.pdf) could be hooked up directly to GB pins, with maybe a little simple mode-management from a micro\n* [sdfat](https://github.com/greiman/SdFat-beta) can do 3965.11 KB/Sec transfer in dedicated SPI with a slow cad, which should be fast enough\n* [better SDCards](https://www.cameramemoryspeed.com/sd-memory-card-faq/fastest-memory-card/) can go much faster, so make sure to check SD speed (SDFst has a `bench` sketch)\n* 3d print longer cart to hold more electronics if needed. [here](https://www.thingiverse.com/thing:2882206) are some nice variations. [Here](https://www.thingiverse.com/thing:3101147) is a nice modular design (opnscad - chnage logo, etc)\n* I have a [ATxmega128A1 breakout](https://www.sparkfun.com/products/retired/9546) laying around, but it's discontinued at sparkfun. It has 78 IO and 32 MIPS! It only has 128kB of flash memory \u0026 8 kB SRAM, but could be used easily with other things, possibly SD alone is fast enough.\n* look at [this ESP32 cart](https://hackaday.io/project/20769-wifi-game-boy-cartridge). They have a lot of the same ideas.\n\n\n## Firmware\n\nThe firmware runs on the device to emulate ROM/RAM reading/writing data to a microSD card formatted FAT16/FAT32/ExFat. The firmware is meant to be compiled in Arduino IDE. If you open serial-monitor when it's running, you'll see some debugging output. On Arch Linux, I had to use `arduino-PR-beta1.9-BUILD-117` for serial-monitor to work, due to some java error.\n\nFiles should all be in the root of the SDCard. The fRAM-size is 128K so you may hit limits if you have a ton of ROM files on the SD (limit should be around 8,737.) The file-list uses ROM-header-title, so if you have a bunch of the same ROM file-named differently, it will work, but in the ROM-list they will all have the same name. You can use this trick to have different copies of the same ROM with separate RAM files (like 1-per-song for nanoloop, for example.)\n\n## Software\n\nA menu runs on the Gameboy to choose the current ROM/RAM. When a ROM is chosen, the gameboy reboots using that ROM/RAM.\n\nTo compile, run\n\n```sh\nmake\n```\n\nin the software directory. \n\nYou can read more about it in [software](./software/README.md).\n\n## TODO\n\n* Actually Implement MBC1\n* Get SD-loading working (on boot load into RAM from SD while playing logo)\n* Get menu working (get list of ROMs from firmware, on menu selection, set mem, load on reboot \u0026 clear mem)\n* Implement MBC5\n* Replace Nintendo logo with mine\n* add extra IO-functionality, reading/writing to a specific memory location to turn on \"I/O mode\" and be able to interface with other peripherals\n* Add support for sub-directories\n* Create a modern cross-platform GBDK-focused full dev-env (use wine \u0026 docker to run stuff like GBTD.) Alternately, write some web-based tools around GBDK.js to allow sprite/map/sound editing.\n\n## License\n\n* Hardware is licensed ![CC-BY-SA](http://i.creativecommons.org/l/by-sa/3.0/88x31.png)\n* Firmware \u0026 Software is licensed ![GPLv3](http://www.gnu.org/graphics/gplv3-88x31.png)\n\n\n## Thanks\n\n* Lots of hardware/firmware ideas from [here](https://dhole.github.io/post/gameboy_cartridge_emu_1/)\n* Ideas for menu ROM programming from [gbdk_playground](https://github.com/mrombout/gbdk_playground), [gbdk-salvage](https://github.com/gbdk-salvage/grooves-game-boy-programming), \u0026 [GBSoundDemo](https://github.com/Zal0/GBSoundDemo)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkonsumer%2Fdkart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkonsumer%2Fdkart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkonsumer%2Fdkart/lists"}