This project is a functional NES emulator developed entirely in C for Minix 3 as part of a computer laboratory course. A central goal was to build core device drivers from scratch and use them as the foundation for low-level hardware interaction inside the emulator.

Architecture #
The emulator is built on a small driver stack that covers timing and real-time clock control, keyboard and mouse input, graphics rendering, and serial communication. This architecture made it possible to connect operating-system-level components directly with emulator logic in a controlled Minix environment.
Features #
On top of that driver layer, the project implements full CPU and PPU emulation with accurate instruction handling, automatic cartridge detection, and ROM mapping for standard .nes files with iNES headers. It also supports real controller input through a wireless ESP8266 bridge, includes flexible display scaling options, and improves usability with optimized ROM loading and unloading.
Technical Notes #
The emulator was developed in a course-specific Minix setup, so reproducibility depends on that environment configuration. The repository includes source code and setup details for anyone interested in exploring how low-level operating system modules interact with application-level emulation.
You can explore the code and implementation details in the repository below.