{"id":13693052,"url":"https://github.com/gabrieloc/GIOVANNI","last_synced_at":"2025-05-02T21:31:18.857Z","repository":{"id":41377447,"uuid":"85166749","full_name":"gabrieloc/GIOVANNI","owner":"gabrieloc","description":"A Gameboy Emulator for the Apple Watch","archived":false,"fork":false,"pushed_at":"2019-10-12T11:19:01.000Z","size":6925,"stargazers_count":940,"open_issues_count":17,"forks_count":85,"subscribers_count":38,"default_branch":"master","last_synced_at":"2024-08-03T17:14:49.913Z","etag":null,"topics":["emulation","emulator","gameboy","watchos"],"latest_commit_sha":null,"homepage":"","language":"Swift","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/gabrieloc.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":"2017-03-16T07:40:00.000Z","updated_at":"2024-07-24T11:40:40.000Z","dependencies_parsed_at":"2022-09-05T13:10:37.033Z","dependency_job_id":null,"html_url":"https://github.com/gabrieloc/GIOVANNI","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrieloc%2FGIOVANNI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrieloc%2FGIOVANNI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrieloc%2FGIOVANNI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrieloc%2FGIOVANNI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gabrieloc","download_url":"https://codeload.github.com/gabrieloc/GIOVANNI/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224337267,"owners_count":17294694,"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":["emulation","emulator","gameboy","watchos"],"created_at":"2024-08-02T17:01:04.957Z","updated_at":"2024-11-12T19:30:23.715Z","avatar_url":"https://github.com/gabrieloc.png","language":"Swift","funding_links":[],"categories":["iOS Apps","Apple Watch","Sample Apps","Swift"],"sub_categories":["iOS Games","Blog"],"readme":"![GIOVANNI GAMEPLAY](gameplay.gif)\n![GIOVANNI](banner.png)\n\n**A Gameboy Emulator for the Apple Watch.**\n\n**Interested in how this was made? Check out the write-up [here](http://gabrieloc.com/2017/03/21/GIOVANNI.html)**\n\n## Installation\n\nGiovanni uses git submodules for it's one dependency, a modified version of the [Gambatte](https://github.com/gabrieloc/gambatte) emulator. When cloning, ensure submodules are also pulled down:\n\n``` bash\n$ git clone --recursive git@github.com:gabrieloc/GIOVANNI.git\n```\n\nTo run on your device:\n1. Make sure you have an Apple developer account\n2. Select your development team under the `Signing` area for each target (`giovanni_iOS`, `giovanni_watchOS`, `giovanni WatchKit Extension`, and `Gambatte_watchOS`)\n3. Change the `Bundle Identifier` for each of the above targets to something unique. For example, `giovanni_iOS` uses `com.gabrieloc.giovanni`, so change that to something like `com.YOUR_USERNAME.giovanni`.\n4. Select the `giovanni` scheme in the top left corner with your device selected and run.\n\nIf you are still having issues, please following the tutorial provided by [Redmond Pie](http://www.redmondpie.com/install-giovanni-game-boy-emulator-on-apple-watch-heres-how-tutorial/)\n\n## Usage\n\nGames are loaded from your iPhone's documents directory. In iTunes, drop `.gb` or `.gbc` files into the Giovanni app documents folder, and they'll show up automatically on your Apple Watch. When you play a game for the first time, it'll download to your watch and get cached in the watch's documents directory. Subsequent loads are immediate.\n\nUPDATE: Giovanni can open ROMs natively, allowing you to bypass iTunes entirely. [More info](https://github.com/gabrieloc/GIOVANNI/pull/9).\n\nEmulator saving and loading is automatic, and happens whenever the app gets closed/inactivated or opened/activated. In-game saving and loading is completely separate. If for some reason the emulator save gets corrupted, force-touching the screen will bring up the option to reset the emulator, allowing you to resume from your in-game save.\n\nThe control scheme is as follows:\n\n![Controls](controls.png)\n\n## Troubleshooting\n\nDisclaimer: Due to the constraints of watchOS, you may experience crashes or graphical glitches. Keep in mind that this project likely does not align with what Apple expects from the platform, which in turn makes it difficult to optimize and debug.\n\nIf for some reason the app becomes unresponsive and must be force-quit, you can do so by having the app in the foreground, pressing the side button, then pressing and holding the Digital Crown for about 5 seconds.\n\n### Games don't show up\nBecause Giovanni relies on your iPhone for transferring games, ensure your paired iPhone is on and within reach.\n\n### Garbled (or all white) pixels\nVideo memory often gets corrupt, in which case you will have to force emulation to be reset. While in-game, force touch the screen and select Reset. If the app closes after that, you will have to re-open, and repeat the process until it works.\n\n### Colors wrong\nSome games appear to format pixel data differently. The rendering work is done in [GameCoreSnapshots.swift](https://github.com/gabrieloc/GIOVANNI/blob/master/gambatte_watchOS/GameCoreSnapshots.swift), you may have luck adjusting how the Core Graphics context is created.\n\n## Known Issues\n\n### Games sometime crash when trying to fill the sound buffer\nThe sound buffer isn't even used, but required by Gambatte. The issue goes away after re-opening the app, but is a huge pain regardless.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabrieloc%2FGIOVANNI","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgabrieloc%2FGIOVANNI","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabrieloc%2FGIOVANNI/lists"}