Skip to content

hawkins00/imit8-chip8

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

86 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

imit8-chip8

This is an emulator for CHIP-8 code. CHIP-8 is a minimal, interpreted language for creating simplistic games for 8-bit computers.

Though there are many other Chip-8 implementations in existence, this particular project is aimed at being extensible, and suitable for use in teaching environments.

Extensibility in this project is emphasized in the structure/design of the program. Though the current code base starts with the CPU core and Display implementations needed to run Chip-8 code (ROMs), the structure of the project is designed such that "displays" and "cores" can be written for other platforms, then added in a plug-in/drop-in fashion.

Extensive logging and the ability to display the current opcode in execution is also possible. Future implementation plans include being able to slow down execution and step through one instruction at a time, while viewing memory states, etc. to be able to demonstrate the workings of a CPU.

Building

The project was built in Jetbrains CLion, and therefore includes the CMake files necessary to build and run the project there. It is worth noting, however, that there is nothing proprietary in use in the current code base that requires specific libraries or platforms. As such, a simple "g++ *.cpp" should be sufficient to compile a working binary on either Windows or Linux platforms.

Use

To load and run a ROM, place its path as the lone paramater to the program: ./imit8-chip8 dir/romfile.ch8

Future Plans

The graphic output of the VM is ascii- / console-based. The experience could be improved by using an OpenGL library for more responsive display updates. The library could also be used to create actual game beeps.

Authors

Matt Hawkins & Chris Kim

License

This program is licensed under the "GPLv3 License". Please see the file License.md in this distribution for license terms.

Releases

No releases published

Packages

No packages published