{"id":15108687,"url":"https://github.com/humpheh/goboy","last_synced_at":"2025-05-15T11:02:09.396Z","repository":{"id":25986163,"uuid":"100868808","full_name":"Humpheh/goboy","owner":"Humpheh","description":"Multi-platform Nintendo Game Boy Color emulator written in Go","archived":false,"fork":false,"pushed_at":"2023-03-06T22:31:43.000Z","size":3669,"stargazers_count":2626,"open_issues_count":10,"forks_count":123,"subscribers_count":43,"default_branch":"master","last_synced_at":"2025-04-07T08:11:54.809Z","etag":null,"topics":["emulator","gameboy","gameboy-emulator","go","golang","macos","windows"],"latest_commit_sha":null,"homepage":"https://humpheh.github.io/goboy/","language":"Go","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/Humpheh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"docs/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-08-20T14:59:05.000Z","updated_at":"2025-04-06T07:45:45.000Z","dependencies_parsed_at":"2022-08-28T16:51:49.494Z","dependency_job_id":"f91de93c-46a1-4153-95c5-383f01449e8f","html_url":"https://github.com/Humpheh/goboy","commit_stats":{"total_commits":151,"total_committers":9,"mean_commits":16.77777777777778,"dds":0.3509933774834437,"last_synced_commit":"da8716d056e1e38d3660d8dcfe679dd3a97f37bf"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Humpheh%2Fgoboy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Humpheh%2Fgoboy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Humpheh%2Fgoboy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Humpheh%2Fgoboy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Humpheh","download_url":"https://codeload.github.com/Humpheh/goboy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248911487,"owners_count":21182097,"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":["emulator","gameboy","gameboy-emulator","go","golang","macos","windows"],"created_at":"2024-09-25T22:22:01.942Z","updated_at":"2025-04-14T15:53:22.112Z","avatar_url":"https://github.com/Humpheh.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GoBoy\n\n[![Build Status](https://travis-ci.org/Humpheh/goboy.svg?branch=master)](https://travis-ci.org/Humpheh/goboy)\n[![codecov](https://codecov.io/gh/Humpheh/goboy/branch/master/graph/badge.svg)](https://codecov.io/gh/Humpheh/goboy)\n[![Go Report Card](https://goreportcard.com/badge/github.com/Humpheh/goboy)](https://goreportcard.com/report/github.com/Humpheh/goboy)\n[![GoDoc](https://godoc.org/github.com/Humpheh/goboy?status.svg)](https://godoc.org/github.com/Humpheh/goboy)\n\nGoBoy is a multi-platform Nintendo GameBoy and GameBoy Color emulator written in go.\nThe emulator can run the majority of GB games and some CGB games. There is also\ncolour and sound support.\nThis emulator was primarily built as a development exercise and is still work in progress.\nPlease feel free to contribute if you're interested in GameBoy emulator development.\n\n\u003cimg src=\"docs/images/links-awakening-dx.png\" width=\"400\"\u003e\u003cimg src=\"docs/images/pkmn-gold-game.png\" width=\"400\"\u003e\n\nThe program includes debugging functions making it useful for understanding the emulator operation for\nbuilding one yourself. These functions include printing of opcodes and register values to the console at each\nstep (although will greatly slow down the emulation) and toggling of individual sound channels.\n\n## Installation\n\nDownload the [latest release](https://github.com/Humpheh/goboy/releases/latest) of GoBoy from the releases page. \n\n### Building from source\n\nWith go installed, you can install GoBoy into your go bin by running:\n```sh\ngo get github.com/Humpheh/goboy/cmd/goboy\n```\n\nIf you have Go 1.11 you can also do:\n```sh\ngit clone https://github.com/Humpheh/goboy.git\ncd goboy\ngo build -o goboy cmd/goboy/main.go\n```\n\nGoBoy is compatible with MacOS, Windows and Linux. Building on Windows 10 requires MinGW and on Linux, you'll need to install [gtk](https://www.gtk.org/download/linux.php).\n\nGoBoy uses the go library [pixel](https://github.com/faiface/pixel) for control binding and graphics rendering,\nwhich requires OpenGL. You may need to install some requirements which can be found on the\n[pixels readme](https://github.com/faiface/pixel#requirements).\n\n## Usage \n```sh\ngoboy zelda.gb\n```\nControls: \u003ckbd\u003e\u0026larr;\u003c/kbd\u003e \u003ckbd\u003e\u0026uarr;\u003c/kbd\u003e \u003ckbd\u003e\u0026darr;\u003c/kbd\u003e \u003ckbd\u003e\u0026rarr;\u003c/kbd\u003e \u003ckbd\u003eZ\u003c/kbd\u003e \u003ckbd\u003eX\u003c/kbd\u003e \u003ckbd\u003eEnter\u003c/kbd\u003e \u003ckbd\u003eBackspace\u003c/kbd\u003e\n\nThe colour palette can be cycled with \u003ckbd\u003e=\u003c/kbd\u003e (in DMG mode), and the game can\nbe made fullscreen with \u003ckbd\u003eF\u003c/kbd\u003e.\n\n\nOther options:\n```sh\n  -dmg\n    \tset to force dmg mode\n  -mute\n    \tmute sound output\n```\n\nDebug or experimental options:\n```sh\n  -cpuprofile string\n    \twrite cpu profile to file (debugging)\n  -disableVsync\n    \tset to disable vsync (debugging)\n  -stepthrough\n    \tstep through opcodes (debugging)\n  -unlocked\n    \tif to unlock the cpu speed (debugging)\n```\n\n### Debugging\nThere are a few keyboard shortcuts useful for debugging: \n\n\u003ckbd\u003eQ\u003c/kbd\u003e - force toggle background\u003cbr/\u003e\n\u003ckbd\u003eW\u003c/kbd\u003e - force toggle sprites\u003cbr/\u003e\n\u003ckbd\u003eA\u003c/kbd\u003e - print gb background palette data (cgb)\u003cbr/\u003e\n\u003ckbd\u003eS\u003c/kbd\u003e - print sprite palette data (cgb)\u003cbr/\u003e\n\u003ckbd\u003eD\u003c/kbd\u003e - print background map to log\u003cbr/\u003e\n\u003ckbd\u003eE\u003c/kbd\u003e - toggle opcode printing to console (will slow down execution)\u003cbr/\u003e\n\u003ckbd\u003e7,8,9,0\u003c/kbd\u003e - toggle sound channels 1 through 4.\n\n### Saving \nIf the loaded rom supports a battery a `\u003crom-name\u003e.sav` (e.g. `zelda.gb.sav`) file will be created\nnext to the loaded rom containing a dump of the RAM from the cartridge. A loop in the program will\nupdate this save file every second while the game is running.\n\n## Testing\nGoBoy currently passes all of the tests in Blargg's `cpu_instrs` and `instr_timing` test roms.\n\n\u003cimg src=\"docs/images/cpu-instrs.png\" width=\"400\"\u003e\u003cimg src=\"docs/images/instr-timing.png\" width=\"400\"\u003e\n\nThese roms are included in the source code along with a test to check the output is as expected\n(`instructions_test.go` and `timing_test.go`). These tests are also run on each commit.\n\n## Contributing\n\nPlease feel free to open pull requests to this project or play around if you're interested! There are\nstill plenty of small bugs that can easily be found through playing games on the emulator, or take a\ntask from the TODO list below!\n\n## Known Bugs and TODO list\n- [x] Sprites near edge of screen not drawing\n- [x] Top half of sprite disappearing off top of screen\n- [x] Small sprites row glitch\n- [x] BG tile window offset issue - visible on *Pokemon Red* splash screen - possibly mistimed interrupt?\n- [x] *Harry Potter and The Chamber of Secrets* has odd sprite issues\n- [x] Request to set screen to white does not do so\n- [x] MBC3 banking support\n- [x] Improve APU (see *Pokemon Yellow* opening screen for reason why)\n- [x] Resizable window\n- [x] White screen when off\n- [x] STOP opcode behaviour\n- [ ] Sprite Z-drawing bugs\n- [ ] Minor APU timing issues\n- [ ] Better APU buffering\n- [ ] Stop jittering\n- [ ] MBC3 clock support\n- [ ] Speed up CPU and PPU\n- [ ] Platform native UI?\n- [ ] More DMG colour palettes\n- [ ] Support save-states\n- [ ] Support boot roms\n- [ ] [Blargg's test ROMs](http://gbdev.gg8.se/wiki/articles/Test_ROMs)\n\n\u003cimg src=\"docs/images/links-awakening.png\" width=\"400\"\u003e\u003cimg src=\"docs/images/pkmn-tcg.png\" width=\"400\"\u003e\n\n\u003cimg src=\"docs/images/pkmn-gold.png\" width=\"400\"\u003e\u003cimg src=\"docs/images/pkmn-red.png\" width=\"400\"\u003e\n\n## Resources\nA large variety of resources were used to understand and test the GameBoy hardware. Some of these include:\n* \u003chttp://www.codeslinger.co.uk/pages/projects/gameboy/files/GB.pdf\u003e\n* \u003chttps://github.com/retrio/gb-test-roms\u003e\n* \u003chttp://www.codeslinger.co.uk/pages/projects/gameboy/beginning.html\u003e\n* \u003chttp://bgb.bircd.org/\u003e - invaluable for debugging\n* \u003chttps://github.com/AntonioND/giibiiadvance/tree/master/docs\u003e\n* \u003chttps://github.com/trekawek/coffee-gb\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhumpheh%2Fgoboy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhumpheh%2Fgoboy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhumpheh%2Fgoboy/lists"}