Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/romain-gilliotte/chip8
Yet another Chip8 emulator and recompiler
https://github.com/romain-gilliotte/chip8
chip8-emulator interpreter recompiler
Last synced: about 1 month ago
JSON representation
Yet another Chip8 emulator and recompiler
- Host: GitHub
- URL: https://github.com/romain-gilliotte/chip8
- Owner: romain-gilliotte
- License: bsd-2-clause
- Created: 2020-11-21T15:03:44.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2021-01-13T12:21:11.000Z (almost 4 years ago)
- Last Synced: 2024-10-14T09:43:39.198Z (3 months ago)
- Topics: chip8-emulator, interpreter, recompiler
- Language: C
- Homepage:
- Size: 107 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Chip8 Emulator
This repository is a toy project so don't expect everything to work.
It aims to be a working interpreter and a dynamic recompiler for Chip8 in C.
# Goals
We're in 2020, no one needs a chip8 emulator, and besides, dozens are already available on the internet for all kinds of platforms.
This project's goal is to learn modern C/C++ tooling (build, delivery, dependency management, testing, ...).
As a warning, my last time using C for anything was C99 in school a decade ago.
The stack we used back then was Emacs, hand-crafted Makefiles, GCC and GDB, all in command line on FreeBSD computers. There was no dependency management, no unit testing and so on...Be indulgent!
# Milestones
Some milestones for this project.
- [x] Basic build system with CMake
- [x] Unit testing
- [x] Interpreter
- [x] Graphics
- [x] Inputs
- [ ] Quality: Linter?
- [x] Recompiler by hand (some instructions)
- [x] Scale2x
- [ ] Menus (to do what... load roms? set quirks? enable debugger?)
- [ ] Write NodeJS native library
- [ ] Write CPython native library
- [ ] Hardware rendering
- [ ] Shader to look like old TV
- [ ] Cross-compilation: Make this work at least in windows / linux
- [ ] Delivery: Distro packages, flatpak, windows installers...
- [ ] Dependency management: Vcpkg? Nuget? Conan? How to use/bundle recent versions of dependencies? npm's package.json equivalent?
- [ ] CI/CD: What are the industry standart CI/CD systems for C/C++?
- [ ] Recompiler using asmjit?
- [ ] Recompiler using LLVM?# Doc
## Build & Run
```sh
# In the project folder
mkdir build
cd build
cmake ..
make
./emulator "your_rom.ch8"
```# Resources
This section contains resources I'm using.
## About Chip8 itself
http://emulator101.com/
http://devernay.free.fr/hacks/chip8/C8TECH10.HTM
http://mattmik.com/files/chip8/mastering/chip8.html
## About Emulation
### x64 instruction encoding
http://www.c-jump.com/CIS77/CPU/x86/lecture.html#X77_0010_real_encoding
http://ref.x86asm.net/coder64.html#modrm_byte_32_64
https://defuse.ca/online-x86-assembler.htm#disassembly
https://wiki.osdev.org/X86-64_Instruction_Encoding#ModR.2FM_and_SIB_bytes
### x86 adressing
https://www.youtube.com/watch?v=t44pm0GzKvk
https://www.youtube.com/watch?v=XOnzjEd_dLg
### JIT
https://eli.thegreenplace.net/2013/11/05/how-to-jit-an-introduction
https://eli.thegreenplace.net/2017/adventures-in-jit-compilation-part-1-an-interpreter/
https://eli.thegreenplace.net/2017/adventures-in-jit-compilation-part-2-an-x64-jit/
https://eli.thegreenplace.net/2017/adventures-in-jit-compilation-part-3-llvm/
https://eli.thegreenplace.net/2017/adventures-in-jit-compilation-part-4-in-python/
http://www.multigesture.net/wp-content/uploads/mirror/zenogais/Dynamic%20Recompiler.html
## About Dependencies
### SDL
https://benedicthenshaw.com/soft_render_sdl2.html
## About Tooling
https://www.jetbrains.com/lp/devecosystem-2020/c/
### CMake
https://cmake.org/documentation/
https://www.youtube.com/playlist?list=PLK6MXr8gasrGmIiSuVQXpfFuE1uPT615s
https://www.youtube.com/watch?v=y7ndUhdQuU8
https://www.youtube.com/watch?v=y9kSr5enrSk
https://cliutils.gitlab.io/modern-cmake/
https://cgold.readthedocs.io/en/latest/
### Cmocka
https://api.cmocka.org/group__cmocka__exec.html#ga7c62fd0acf2235ce98268c28ee262a57
### Nuget
https://www.nuget.org/packages/sdl2/