Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kiwigrenade/chip-8
CHIP-8 emulator in C++. POC for my Bachelor's Degree Thesis.
https://github.com/kiwigrenade/chip-8
chip-8 chip-8-emulator chip8 cmake cpp emulation emulator proof-of-concept
Last synced: 2 months ago
JSON representation
CHIP-8 emulator in C++. POC for my Bachelor's Degree Thesis.
- Host: GitHub
- URL: https://github.com/kiwigrenade/chip-8
- Owner: KiwiGrenade
- License: mit
- Created: 2024-05-26T20:00:51.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-08-26T21:54:55.000Z (4 months ago)
- Last Synced: 2024-08-27T00:42:05.799Z (4 months ago)
- Topics: chip-8, chip-8-emulator, chip8, cmake, cpp, emulation, emulator, proof-of-concept
- Language: C++
- Homepage:
- Size: 2.45 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# CHIP-8
CHIP-8 emulator in C++.
POC for my Bachelor's Degree Thesis.## Opcodes
- [x] ```0x00E0: Clear screen```
- [x] ```0x00EE: Return from subroutine```
- [x] ```0x1NNN: Jump to location```
- [x] ```0x2NNN: Call a subroutine at address NNN```
- [x] ```0x3XKK: Skip next instr. if V[X] == KK```
- [x] ```0x4XKK: Skip next instr. if V[X] != KK```
- [x] ```0x5XY0: Skip next instr. if V[X] == V[Y]```
- [x] ```0x6XKK: V[X] = KK```
- [x] ```0x7XKK: V[X] += KK```
- [x] ```0x8XY0: V[X] = V[Y]```
- [x] ```0x8XY1: V[X] OR V[Y]```
- [x] ```0x8XY2: V[X] AND V[Y]```
- [x] ```0x8XY3: V[X] XOR V[Y]```
- [x] ```0x8XY4: V[X] ADD V[Y]```
- [x] ```0x8XY5: V[X] SUB V[Y]```
- [x] ```0x8XY6: V[X] = V[X] / 2```
- [x] ```0x8XY7: V[X] SUBN V[X]```
- [x] ```0x8XYE: V[X] = V[X] * 2```
- [x] ```0x9XY0: Skip next instr. if V[X] != V[Y]```
- [x] ```0xANNN: I = NNN```
- [x] ```0xBNNN: pc = NNN + V[0x0]```
- [x] ```0xCXKK: V[X] = random byte AND KK```
- [x] ```0xDXYN: Display n-byte sprite starting at memory location I (V[X, V[Y]), V[F] = collision```
- [x] ```0xEX9E: Skip next instr. if key with value of V[X] is pressed```
- [x] ```0xEXA1: Skip next instr. if key with value of V[X] is NOT pressed```
- [x] ```0xFX07: V[X] = delay_timer```
- [x] ```0xFX0A: Wait for key press, store value of pressed key in V[X]```
- [x] ```0xFX15: delay_timer = V[X]```
- [x] ```0xFX18: sound_timer = V[X]```
- [x] ```0xFX1E: I = I + V[X]```
- [x] ```0xFX29: I + location_of_sprite_for_digit_V[X]```
- [x] ```0xFX33: Store BCD representation of V[X] in memory locations I, I+1 and I+2```
- [x] ```0xFX55: Store registers V[0x0] through V[X] in memory starting at location I```
- [x] ```0xFX65: Read registers V[0x0] through V[X] from memory starting at location I```## Roms
### Tests
- [x] CHIP-8 splash screen
- [x] IBM logo
- [x] Corax+ opcode test
- [x] Flags test
- [x] Quirks test
- [x] Keypad test
- [x] Beep test### Games
T.B.A.## Side Quests
- [ ] Add debug mode
- [ ] Add telemetry
- [ ] Translate C++ code into WebAssembly
- [ ] Host assembly code on server## Materials
- [Timendus/chip8-test-suite](https://github.com/Timendus/chip8-test-suite)
- [CHIP-8 Specification](http://devernay.free.fr/hacks/chip8/C8TECH10.HTM#1.0)
- [CHIP-8 Wikipedia Page](https://en.wikipedia.org/wiki/CHIP-8#Virtual_machine_description)
- [CHIP-8 Emulator Guide in C++](https://multigesture.net/articles/how-to-write-an-emulator-chip-8-interpreter)
- [CHIP-8 Emulator Guide](https://chip-8.github.io/links/#emulatorinterpreter-development)
- [CHIP-8 Instruction Scheduling and Frequency](https://jackson-s.me/2019/07/13/Chip-8-Instruction-Scheduling-and-Frequency.html)## [Notes](notes.md)