A chip8 emulator writen in Rust https://blog.nuculabs.dev
Find a file
2024-12-08 23:53:32 +02:00
.idea Implement logical & arithmetic instructions 2024-12-06 17:16:43 +02:00
roms add unit tests 2024-12-07 22:48:19 +02:00
src draw the screen withing its 64x32 size 2024-12-08 23:44:42 +02:00
.gitignore fix timers bug 2024-12-07 22:52:42 +02:00
Cargo.lock implement generate random number + jump with offset 2024-12-06 23:51:05 +02:00
Cargo.toml implement generate random number + jump with offset 2024-12-06 23:51:05 +02:00
LICENSE Create LICENSE 2024-11-17 23:08:18 +02:00
README.md update README.md 2024-12-08 23:53:32 +02:00

Chip8 Emulator

A Chip8 emulator written in rust for learning and educational purposes.

See it in action:

asciicast


About Chip8

CHIP-8 is an interpreted programming language and a simple virtual machine designed primarily for running on 8-bit microcomputers and other systems in the late 1970s and early 1980s. Created by Joseph Weisbecker for RCA's COSMAC VIP microcomputer, CHIP-8 was intended to make programming more accessible by providing a higher-level language that could abstract away the complexities of direct hardware manipulation.

The CHIP-8 architecture features a straightforward design:

CPU: It uses a 16-bit address space and has 16 8-bit registers (V0-VF), where VF often serves as a flag register. Instructions are 2 bytes long, allowing for 35 possible opcodes.
Memory: There are 4KB (4096 bytes) of RAM, with the first 512 bytes reserved for the interpreter itself, leaving 3584 bytes for programs and data.
Display: A 64x32 pixel monochrome display where each pixel can be either on or off.
Input: It handles input through a 16-key hexadecimal keypad.
Timers: Two timers (delay and sound) decrement at 60 Hz, providing simple timing mechanisms.

CHIP-8 games and programs were typically small, often fitting within the limited memory constraints, and included classics like "Pong", "Space Invaders", and "Tetris" adaptations. The simplicity of CHIP-8 has made it a popular choice for educational purposes, teaching fundamentals of computer architecture, programming, and emulation. Modern emulators and interpreters for CHIP-8 exist on various platforms, including web browsers, allowing enthusiasts to run and even develop new games for this vintage system. This has kept CHIP-8 relevant as a tool for understanding basic computing concepts and low-level programming.

How is this project organized

The project is written in Rust and it's organized in the following modules:

.
├── display.rs # The screen / display module.
├── emulator.rs # The emulator logic which emulates the CPU.
├── input.rs # The input logic.
├── instruction.rs # The instruction decoding logic.
├── main.rs # The main file. This is the entrypoint.
├── sound.rs # The sound module.
└── stack.rs # A stack implementation.


Made with ❤️ by NucuLabs.dev

Follow me on 🦋 and let's chat: @nuculabs.dev