{"id":16323709,"url":"https://github.com/im-rises/chip8topia","last_synced_at":"2026-05-09T09:32:47.603Z","repository":{"id":217059670,"uuid":"742925895","full_name":"Im-Rises/Chip8topia","owner":"Im-Rises","description":"Chip8 Emulator made in C++ for desktop and web","archived":false,"fork":false,"pushed_at":"2024-04-13T18:57:59.000Z","size":3625,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-04-14T02:56:43.465Z","etag":null,"topics":["chip8","cpp","emscripten","emulator","interpreter","linux","windows"],"latest_commit_sha":null,"homepage":"https://im-rises.github.io/Chip8topia/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Im-Rises.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2024-01-13T19:24:25.000Z","updated_at":"2024-05-21T22:40:22.596Z","dependencies_parsed_at":"2024-03-29T07:31:09.557Z","dependency_job_id":"ff3340db-75be-4e15-8834-40c3be38e7b1","html_url":"https://github.com/Im-Rises/Chip8topia","commit_stats":null,"previous_names":["im-rises/chip8topia"],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Im-Rises%2FChip8topia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Im-Rises%2FChip8topia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Im-Rises%2FChip8topia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Im-Rises%2FChip8topia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Im-Rises","download_url":"https://codeload.github.com/Im-Rises/Chip8topia/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254170067,"owners_count":22026219,"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":["chip8","cpp","emscripten","emulator","interpreter","linux","windows"],"created_at":"2024-10-10T22:55:28.060Z","updated_at":"2026-05-09T09:32:42.578Z","avatar_url":"https://github.com/Im-Rises.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Chip8topia\n\n\u003cp align=\"center\"\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/59691442/183268126-b3d19e66-8f2d-463a-805e-ae6ef7cc6c01.png\" alt=\"cmakeLogo\" style=\"height:60px;\"/\u003e\n      \u003cimg src=\"https://img.shields.io/badge/C%2B%2B-00599C?style=for-the-badge\u0026logo=c%2B%2B\u0026logoColor=white\" alt=\"cppLogo\" style=\"height:60px;\"/\u003e\n      \u003cimg src=\"https://img.shields.io/badge/OpenGL-FFFFFF?style=for-the-badge\u0026logo=opengl\" alt=\"openglLogo\" style=\"height:60px;\"/\u003e\n\u003c/p\u003e \n\n## Description\n\nChip8topia is a Chip8 emulator written in C++ for Windows, Linux, macOS and WebAssembly. It uses OpenGL/WebGL for the\nrendering\nand ImGui for the UI.\nThe application is compiled with CMake and uses Vcpkg for most dependencies.\nFor the WebAssembly version, it uses Emscripten to compile with vcpkg for most dependencies as well.\n\nIt can emulate the original Chip8, the SCHIP1.1, SCHIPC and Xo-Chip.\n\nPlatforms:\n\n- [x] Windows\n- [x] Linux\n- [x] macOS\n- [x] WebAssembly\n\nEmulated consoles:\n\n- [x] Chip8\n- [x] SCHIP1.1\n- [x] SCHIPC\n- [x] Xo-Chip\n\n## Screenshots\n\n| Chip8topia Tools                                                                                                      | Chip8topia Debug Tools                                                                                                 |\n|-----------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|\n| ![chip8topia-main-tools](https://github.com/Im-Rises/Chip8topia/assets/59691442/0024eddd-8af2-49fa-89e4-6b4e11660712) | ![chip8topia-debug-tools](https://github.com/Im-Rises/Chip8topia/assets/59691442/44ed037c-4921-4c83-9411-54c9a0b51f53) |\n\n| Invaders (Chip8)                                                                                                         | Car (SCHIP)                                                                                                         | T8NKS (Xo-Chip)                                                                                                       |                                                                                                                   \n|--------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|\n| ![invaders-game-screenshot](https://github.com/Im-Rises/Chip8topia/assets/59691442/3e5a2078-2cf7-4929-94c2-ea42cea24efd) | ![car-game-screenshot](https://github.com/Im-Rises/Chip8topia/assets/59691442/13774fed-1ce4-4ab6-b73d-40aa374661a0) | ![t8nks-game-screenshot](https://github.com/Im-Rises/Chip8topia/assets/59691442/e4ab6b1f-e5a4-485f-a26b-dab63e20aff1) |\n\n| Alien Inv8sion Title Screen (Xo-Chip Octo)                                                                                 | Alien Inv8sion Gameplay (Xo-Chip Octo)                                                                                  |\n|----------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|\n| ![alien-inv8sion-titlescreen](https://github.com/Im-Rises/Chip8topia/assets/59691442/71eb63c2-4716-49ba-868b-1525f593529e) | ![alien-inv8sion-gameplay](https://github.com/Im-Rises/Chip8topia/assets/59691442/b1c7441a-6045-4cf3-bb98-7fd6d03835d3) |\n\n## Features\n\n### Main\n\n- [x] Desktop and Web version\n- [x] Chip8, SCHIP1.1, SCHIPC and Xo-Chip support\n- [x] Pause/Resume/Restart the emulation\n- [x] Change the emulation speed\n- [x] Change the game colors\n- [x] Fullscreen mode\n- [x] Rom loader\n- [x] Sound\n\n### Debug Tools\n\n- [x] Registers viewer\n- [x] Stack viewer\n- [x] Memory Editor\n- [x] Virtual Keypad\n- [x] Disassembly\n- [x] Disassembly controls (break, step, run, reset)\n- [x] Breakpoints\n- [x] Planes viewer\n\n## Controls\n\n### Original game controls\n\n| 1 | 2 | 3 | C |\n|---|---|---|---|\n| 4 | 5 | 6 | D |\n| 7 | 8 | 9 | E |\n| A | 0 | B | F |\n\n### Emulator game controls (QWERTY)\n\n| 1 | 2 | 3 | 4 |\n|---|---|---|---|\n| Q | W | E | R |\n| A | S | D | F |\n| Z | X | C | V |\n\n## TODO\n\nMajor:\n\n- [ ] Add Xo-Chip audio\n\nMinor:\n\n- [ ] Cleanup the full handling of the sound emulation\n- [ ] Restarting a game when playing big xo-chip games will not reload the game from the start (we should reset memory\n  and reload the game rom)\n- [ ] Improve disassembly (check TODO in the Chip8topiaDisassembly.cpp and Chip8topiaDisassembler)\n\n\u003c!-- Other\nOther tasks:\n- [ ] Depending on the rom extension, load the correct console (Chip8, SCHIP, SCHIPC, Xo-Chip)\n- [ ] Replace the input handler singleton with another pattern...\n- [ ] Use cpack to create a release (also update the GitHub Actions) https://cmake.org/cmake/help/book/mastering-cmake/chapter/Packaging%20With%20CPack.html\n- [ ] Add a way to change the input keys\n- [ ] Add a background when no rom is loaded\n\nProfiling logs:\n- [x] Issue with imgui viewport when vsync enabled and window out of the sdl2/glfw main window it doubles the time of the swap buffers, like its doing it two times (disabled completely vsync and use of std::this_thread::sleep_for(std::chrono::milliseconds(16)) in the main loop)\n- [x] LD_Vx_K is somehow very, very slow ??? (corrected by not iterating over all the keys but only checking if the previous bitset of the keys is different from the current one)\n- [x] Breakpoints in Chip8Emulator is slow (stop using a std::set when checking if we should break on the current PC and use of an array)\n--\u003e\n\n## Documentation\n\n- [chip8.gulrak.net](https://chip8.gulrak.net/)\n- [chip-8.github.io](https://chip-8.github.io/)\n- [tobiasvl.github.io](https://tobiasvl.github.io/blog/write-a-chip-8-emulator/)\n- [Timendus/chip8-test-suite](https://github.com/Timendus/chip8-test-suite)\n- [Timendus/silicon8](https://github.com/Timendus/silicon8/tree/)\n- [Timendus/alien-inv8sion](https://github.com/Timendus/alien-inv8sion)\n- [johnearnest.github.io](http://johnearnest.github.io/Octo/docs/XO-ChipSpecification.html)\n- [johnearnest.github.io/chip8Archive](https://johnearnest.github.io/chip8Archive/?sort=platform)\n- [johnearnest.github.io/Octo](https://johnearnest.github.io/Octo/)\n- [jacobsebek SDL2 audio callback demo](https://gist.github.com/jacobsebek/10867cb10cdfccf1d6cfdd24fa23ee96)\n\n[//]: # (- [devernay.free.fr]\u0026#40;http://devernay.free.fr/hacks/chip8/C8TECH10.HTM\u0026#41;)\n\n## Rom links\n\n- [https://github.com/JohnEarnest/chip8Archive](JohnEarnest/chip8Archive)\n- [https://archive.org/details/Chip-8RomsThatAreInThePublicDomain](Chip-8RomsThatAreInThePublicDomain)\n\n\u003c!--\n### Other resources\n\nhttps://en.wikipedia.org/wiki/CHIP-8\nhttps://www.laurencescotford.net/2020/07/19/chip-8-on-the-cosmac-vip-arithmetic-and-logic-instructions/\nhttps://www.laurencescotford.net/2020/07/19/chip-8-on-the-cosmac-vip-drawing-sprites/\nhttps://webgl2fundamentals.org/webgl/lessons/webgl-data-textures.html\nhttps://emscripten.org/docs/porting/files/packaging_files.html\nhttps://emscripten.org/docs/porting/files/index.html\nhttps://emscripten.org/docs/porting/files/file_systems_overview.html#file-system-overview\nhttps://emscripten.org/docs/porting/files/Synchronous-Virtual-XHR-Backed-File-System-Usage.html#synchronous-virtual-xhr-backed-file-system-usage\nhttps://github.com/marketplace/actions/upload-release-asset\nhttps://github.com/mymindstorm/setup-emsdk\nhttps://github.com/Armchair-Software/emscripten-browser-file\n--\u003e\n\n## Dependencies\n\n- [Vcpkg](https://vcpkg.io/en)\n- [SDL2](https://www.libsdl.org/)\n- [GLAD](https://glad.dav1d.de/)\n- [stb](https://github.com/nothings/stb)\n- [spdlog](https://github.com/gabime/spdlog)\n- [ImGui](https://github.com/ocornut/imgui)\n- [ImGuiFileDialog](https://github.com/aiekick/ImGuiFileDialog)\n- [ImGui Memory Editor](https://github.com/ocornut/imgui_club/tree/main/imgui_memory_editor)\n- [ImGuiNotify](https://github.com/TyomaVader/ImGuiNotify/tree/Dev)\n- [IconFontCppHeaders](https://github.com/juliettef/IconFontCppHeaders)\n- [Font-Awesome](https://github.com/FortAwesome/Font-Awesome)\n- [emscripten-browser-file](https://github.com/Armchair-Software/emscripten-browser-file)\n\n## Build\n\nBefore building, be sure to fetch all the git submodules and install vcpkg.\n\n### Submodule:\n\nTo fetch the submodules:\n\n```bash\ngit submodule update --init --recursive\n```\n\nIf you want to update the submodules:\n\n```bash\ngit submodule update --remote\n```\n\n### Build\n\nOnce you have fetched the submodules and installed vcpkg, you can build the project.\nGo to the root of the project and create a build directory.\n\n\u003e **Note**\n\u003e Be sure to change the path to vcpkg or emscripten if necessary in the following commands.\n\n#### Build for Windows or Linux\n\nUse the following command to set up the build:\n\n```bash\ncmake -B [build directory] -S . -DCMAKE_TOOLCHAIN_FILE=[path to vcpkg]/scripts/buildsystems/vcpkg.cmake\n```\n\nThen build with:\n\n```bash\ncmake --build [build directory]\n```\n\n### Build for WebAssembly (Emscripten)\n\nUse the following command to set up the build:\n\n```bash\nemcmake cmake -B [build directory] -S . -DCMAKE_TOOLCHAIN_FILE=~/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DVCPKG_TARGET_TRIPLET=wasm32-emscripten \"-DCMAKE_EXE_LINKER_FLAGS=-s USE_SDL=2 -s FULL_ES3=1 -s WASM=1 -s EXPORTED_RUNTIME_METHODS=[ccall] -s ALLOW_MEMORY_GROWTH=1 -s EXPORTED_FUNCTIONS=[_main,_malloc,_free] --preload-file ../../Chip8Games --preload-file ../../shaders --preload-file ../../fonts\" -DCMAKE_BUILD_TYPE=Release\n```\n\nthen build with:\n\n```bash\nemmake make -C [build directory]\n```\n\n## GitHub Actions\n\n[![CMake Vcpkg Publish Binaries](https://github.com/Im-Rises/Chip8topia/actions/workflows/cmake-vcpkg-publish-binaries.yml/badge.svg)](https://github.com/Im-Rises/Chip8topia/actions/workflows/cmake-vcpkg-publish-binaries.yml)\n[![CMake Vcpkg Emscripten Publish](https://github.com/Im-Rises/Chip8topia/actions/workflows/cmake-vcpkg-emscripten-publish.yml/badge.svg)](https://github.com/Im-Rises/Chip8topia/actions/workflows/cmake-vcpkg-emscripten-publish.yml)\n\nThe project uses GitHub Actions to build and publish the desktop builds to the GitHub release page and publish the\nWebAssembly build to GitHub Pages.\n\n## Contributors\n\nQuentin MOREL :\n\n- @Im-Rises\n- \u003chttps://github.com/Im-Rises\u003e\n\n[![GitHub contributors](https://contrib.rocks/image?repo=Im-Rises/Chip8topia)](https://github.com/Im-Rises/Chip8topia/graphs/contributors)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fim-rises%2Fchip8topia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fim-rises%2Fchip8topia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fim-rises%2Fchip8topia/lists"}