{"id":18622406,"url":"https://github.com/hadess/smartboy-dumper","last_synced_at":"2026-02-28T07:36:27.090Z","repository":{"id":146219862,"uuid":"160556127","full_name":"hadess/smartboy-dumper","owner":"hadess","description":"Linux dumper for the Hyperkin Smartboy","archived":false,"fork":false,"pushed_at":"2025-01-20T10:05:07.000Z","size":74,"stargazers_count":10,"open_issues_count":4,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-11T12:52:17.148Z","etag":null,"topics":["cartridge","driver","gameboy","hyperkin","linux","smartboy"],"latest_commit_sha":null,"homepage":null,"language":"Smali","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hadess.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING.GPLv3","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":"2018-12-05T17:44:40.000Z","updated_at":"2025-01-20T10:05:09.000Z","dependencies_parsed_at":null,"dependency_job_id":"feb8bf6c-94a0-4f86-9746-249536f84c3e","html_url":"https://github.com/hadess/smartboy-dumper","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hadess/smartboy-dumper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadess%2Fsmartboy-dumper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadess%2Fsmartboy-dumper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadess%2Fsmartboy-dumper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadess%2Fsmartboy-dumper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hadess","download_url":"https://codeload.github.com/hadess/smartboy-dumper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadess%2Fsmartboy-dumper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29927623,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T19:37:42.220Z","status":"online","status_checked_at":"2026-02-28T02:00:07.010Z","response_time":90,"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":["cartridge","driver","gameboy","hyperkin","linux","smartboy"],"created_at":"2024-11-07T04:16:43.828Z","updated_at":"2026-02-28T07:36:27.085Z","avatar_url":"https://github.com/hadess.png","language":"Smali","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Smartboy Dumper\n\n![Smartboy](smartboy.jpg)\n\nThe [Smartboy](https://hyperkinlab.com/products/smartboy/) is an accessory\nfor USB-C equipped smartphones. The smartphone slides in the opening and\nconnects with the USB-C plug when it reaches the bottom. You then have\na contraption that looks like a very expensive Game Boy/Game Boy Color console.\n\n## Hardware\n\nAlternatively, using a cheap USB-C/USB-A adapter, one can plug the device\ninto a normal PC. Although this is pretty cumbersome for normal usage, as\nthe USB-C plug is pretty loose, it's good enough for development, as was\ndone here.\n\nThe Smartboy will show up as 2 separate devices:\n- one `NES PC Game Pad` input device for the D-pad, 4 face buttons, and 2\n  shoulder buttons\n- one USB ACM serial port\n\nThe input device is pretty uninteresting, as all the buttons work, and are\nusable by the host OS.\n\nThe USB ACM serial port is used on Android by the official [Smartboy Companion](https://play.google.com/store/apps/details?id=hyperkin.smartboyserial\u0026hl=en)\napplication to temporarily dump the contents of the Game Boy (Color) cartridge\nthat's plugged into it. The builtin software will also remove the dumped ROM from\nthe phone as soon as the cartridge doesn't make a good connection.\n\n## Software\n\nUsing Android X86 in a virtual machine, and a copy of the official application,\nI captured the communications between the device and the application. In parallel,\nI also disassembled the app's APK using [APKTool](https://ibotpeaches.github.io/Apktool/).\n\n[One file](disasm/h.smali) in the disassembly contained interesting strings that were present in the\nUSB captures (with some spoilers in the margin):\n```\n    const-string v1, \"start\"            # START\n    const-string v1, \"end\"              # END\n    const-string v1, \"nr\"               # No ROM\n    const-string v1, \"rom\"              # ROM\n    const-string v1, \"srm\"              # SRAM\n    const-string v1, \"ms\"\n    const-string v1, \"vs\"\n    const-string v1, \"nm\"               # NAME\n    const-string v1, \"rb\"               # ROM Banks (x16k = size)\n    const-string v1, \"sd\"               # Start Dump\n```\n\n`nm` and `rb` appear constantly when connecting to the serial port with a terminal\nemulator, the former being the detected name of the ROM on the cartridge, `rb` being\nthe detected ROM size (\"ROM banks\").\n\n`sd` also appears in our dumps, and is sent by the host to start the dumping process.\n\nThe protocol looks like `nmROMNAMErb256` repeated until a command is sent. Sending `sd`,\nwill make `start` followed by `rom` appear, followed by the contents of the ROM. The ROM\ndata end with `end`, sometimes followed by `vs`. If the cartridge contains a support SRAM,\n`srm` will appear after the end of the ROM data, followed by the SRAM content, before `end`\nis finally shown.\n\n`nr` will appear continuously if no game pak is inserted.\n\n`FIXME`: `ms` looks like it means \"Mass Storage\" and `vs` is \"Serial Com\" but they never\nappeared in a USB dump on my retail unit. Maybe a feature of the developer version?\n\n## Smartboy Dumper\n\nThe Smartboy Dumper was written to document and have a proof of concept for applications\non phone OSes could use the Smartboy's cartridge dumping feature without using Hyperkin's,\nfiddly, Android-only, application.\n\nNote that the disassembled source and reverse-engineering were done on the assumption that:\n```\nit is hard to imagine how something that is available for free can be stolen\n```\n[as Hyperkin say themselves on their website](https://web.archive.org/web/20240226205048/http://retron5.in/node/3).\n\n## License\n\nGNU GPL v3+\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhadess%2Fsmartboy-dumper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhadess%2Fsmartboy-dumper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhadess%2Fsmartboy-dumper/lists"}