{"id":41892015,"url":"https://github.com/marethyu/noufu","last_synced_at":"2026-01-25T14:09:28.324Z","repository":{"id":144289490,"uuid":"392211525","full_name":"marethyu/noufu","owner":"marethyu","description":"GameBoy emulator with debugger written in C++ using Win32 and SDL2","archived":false,"fork":false,"pushed_at":"2024-09-15T22:14:53.000Z","size":1105,"stargazers_count":24,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-09-16T00:09:27.120Z","etag":null,"topics":["c-plus-plus","emulator","gameboy","gameboy-emulation","sdl2","win32","winapi","windows"],"latest_commit_sha":null,"homepage":"","language":"C++","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/marethyu.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-03T06:15:53.000Z","updated_at":"2024-09-15T22:14:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"003e7284-b9f8-4ee5-a926-78622ceddaad","html_url":"https://github.com/marethyu/noufu","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/marethyu/noufu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marethyu%2Fnoufu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marethyu%2Fnoufu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marethyu%2Fnoufu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marethyu%2Fnoufu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marethyu","download_url":"https://codeload.github.com/marethyu/noufu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marethyu%2Fnoufu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28754157,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T13:59:49.818Z","status":"ssl_error","status_checked_at":"2026-01-25T13:59:33.728Z","response_time":113,"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":["c-plus-plus","emulator","gameboy","gameboy-emulation","sdl2","win32","winapi","windows"],"created_at":"2026-01-25T14:09:27.732Z","updated_at":"2026-01-25T14:09:28.311Z","avatar_url":"https://github.com/marethyu.png","language":"C++","readme":"# \u003cruby\u003e脳\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eのう\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003e\u003cruby\u003e腐\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eふ\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003e\r\n\r\nDMG-01 emulator written in modern C++ using Win32 API and SDL2. It is intended as a hobby project to sharpen my C++ skills. The emulator is not complete, so it might have some issues. Please don't hesitate to open an issue if you find any.\r\n\r\n## Some Screenshots\r\n\r\n![Blargg CPU Instrs](media/blargg-cpu-instrs.png) | ![DMG ACID 2](media/dmg-acid2.png)\r\n![Tetris](media/tetris.png) | ![Super Mario Land](media/super-mario-land.png)\r\n![Yugioh](media/yugioh.png) | ![Zelda](media/zelda.png)\r\n![Donkey Kong Land](media/donkey-kong-land.png) | ![VRALLY](media/vrally.png)\r\n\r\n## Features\r\n\r\n- Able to emulate many of the common games with reasonable speed and accuracy.\r\n- Configurable with `config.ini` (see the below section for more information).\r\n- Accurate CPU emulation (passes Blargg's CPU tests).\r\n- Adequate PPU emulation (passes [dmg-acid2](https://github.com/mattcurrie/dmg-acid2) test). This emulator uses Pixel FIFO, as opposed to common scanline renderer.\r\n- Supported cartridge types: Plain ROM, MBC1, MBC1+RAM, and MBC1+RAM+BATTERY. MBC1 RAM savestates are supported.\r\n- Ability to preview the background map up to three tiles.\r\n- Allows custom colour palettes.\r\n- Ability to take screenshots to `.bmp` files.\r\n\r\n## `config.ini` Explained\r\n\r\nWhen you run the emulator for the first time, the `config.ini` with default settings will be created. The example contents of the file is shown below\r\n```\r\nBootROMPath=C:\\Users\\Jimmy\\OneDrive\\Documents\\git\\noufu\\ROMS\\Boot\\dmg_boot.bin\r\nCPULogging=0\r\nColor0=C4.F0.C2\r\nColor1=5A.B9.A8\r\nColor2=1E.60.6E\r\nColor3=2D.1B.00\r\nInterruptLogging=0\r\nMMULogging=0\r\nPreviewBackground=1\r\nScreenScaleFactor=2\r\nUseBootROM=1\r\n```\r\n\r\n- `UseBootROM` - Set to 1 if you want to run the boot ROM at startup.\r\n\r\n- `BootROMPath` - A path to the DMG boot ROM. This field is required if you set `UseBootROM` to 1.\r\n\r\n- `Color0`, `Color1`, `Color2`, `Color3` - Colour palette to be used by PPU. Its values follow this format: `RED.GREEN.BLUE`. `RED`, `GREEN`, and `BLUE` must be written as 2-digit hexadecimal values. See `Colour Palettes` section for examples.\r\n\r\n- `ScreenScaleFactor` - Sets the display size. If it is set to 1 then the resolution will be 160x144. If 2 then it will be 320x288, etc.\r\n\r\n- `CPULogging` - If you want the emulator to log its CPU state (currently buggy and will make the emulation slower, so I don't recommend turning it on for now...).\r\n\r\n- `InterruptLogging` - Log the state of interrupt manager if turned on (1).\r\n\r\n- `MMULogging` - Log the state of MMU if turned on.\r\n\r\n- `PreviewBackground` - Turn on if you want to preview the background map. The below is the demonstration of this feature.\r\n\r\n[](https://user-images.githubusercontent.com/42195546/130702128-da022966-3b18-4513-ad36-ae5d6f4458f2.mp4)\r\n\r\n~~*The status bar is flickering because I miscalculated when the VBlank period should end. It's already fixed, so don't worry about that. I will create the new demo video when I have time.*~~\r\n\r\n## Keybindings\r\n\r\n- \u003ckbd\u003eA\u003c/kbd\u003e - 'A' button\r\n- \u003ckbd\u003eS\u003c/kbd\u003e - 'B' button\r\n- \u003ckbd\u003eEnter\u003c/kbd\u003e - 'start' button\r\n- \u003ckbd\u003eSpace\u003c/kbd\u003e - 'select' button\r\n- \u003ckbd\u003e\u0026#8592;\u003c/kbd\u003e - DPad left\r\n- \u003ckbd\u003e\u0026#8593;\u003c/kbd\u003e - DPad up\r\n- \u003ckbd\u003e\u0026#8594;\u003c/kbd\u003e - DPad right\r\n- \u003ckbd\u003e\u0026#8595;\u003c/kbd\u003e - DPad down\r\n\r\n## Build Instructions\r\n\r\nRequirements:\r\n\r\n- TDM-GCC v9.2.0 (x64)\r\n- fmt v8.0.0 (already preinstalled in `include/3rdparty`)\r\n- SDL v2.0.12 (optional)\r\n\r\nRun `setup.bat` first before anything else.\r\n\r\nTo build, type\r\n```\r\nmingw32-make SDL=1\r\n```\r\nRemove `SDL=1` if you don't have SDL installed.\r\n\r\nTo clean, type\r\n```\r\nmingw32-make clean\r\n```\r\n\r\n## Releases\r\n\r\nCurrently there are 3 different builds for this emulator.\r\n\r\n- `cli\\` - Rudimentary CLI debugger.\r\n- `gui\\gdi` - GUI with Windows GDI32 graphics output.\r\n- `gui\\sdl` - GUI with SDL2 graphics output.\r\n\r\nYou can fetch yours [here](https://github.com/marethyu/noufu/releases).\r\n\r\n## Colour Palettes\r\n\r\nColours can be modified in `config.ini`.\r\n\r\nGameBoy Green (default)\r\n```\r\nColor0=E0.F8.D0\r\nColor1=88.C0.70\r\nColor2=34.68.56\r\nColor3=08.18.20\r\n```\r\n\r\nGreyscale\r\n```\r\nColor0=FF.FF.FF\r\nColor1=A9.A9.A9\r\nColor2=54.54.54\r\nColor3=00.00.00\r\n```\r\n\r\nSpazeHaze\r\n```\r\nColor0=F8.E3.C4\r\nColor1=CC.34.95\r\nColor2=6B.1F.B1\r\nColor3=0B.06.30\r\n```\r\n\r\nMist GB\r\n```\r\nColor0=C4.F0.C2\r\nColor1=5A.B9.A8\r\nColor2=1E.60.6E\r\nColor3=2D.1B.00\r\n```\r\n\r\n## Acknowledgements\r\n\r\nThis project wouldn't be possible if it weren't for [infamous pandocs](https://gbdev.io/pandocs/) and the awesome [emudev](https://emudev.org/) community, especially its Discord server. I get a lot of my questions answered there. Also, I owe a lot to [Optix's GBEDG](https://hacktixme.ga/GBEDG/). It helped me to understand and implement PPU's pixel FIFO rendering algorithm.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarethyu%2Fnoufu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarethyu%2Fnoufu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarethyu%2Fnoufu/lists"}