This project is a Nintendo Entertainment System (NES) emulator developed in Java. The goal is to replicate the functionality of the NES hardware in software, allowing classic games to run on modern platforms. The emulator implements key components of the NES, including:
- CPU (6502): Simulation of the NES's main processor.
- PPU (Picture Processing Unit): Rendering of graphics and sprites.
- APU (Audio Processing Unit): Audio generation.
- Mappers: Address translation to support different game cartridges.
In addition to being a tribute to classic video games, this project demonstrates how fundamental Computer Science concepts can be applied to build complex and functional systems.
Developing an NES emulator in Java is a challenging task that requires mastering fundamental Computer Science concepts. This project highlights the importance of understanding and applying key areas such as:
- Detailed understanding of how a CPU operates, including instruction cycles, registers, and addressing modes.
- Simulation of hierarchical memory systems (RAM, ROM, VRAM, etc.), essential for replicating the NES's behavior.
- Direct manipulation of bits and bytes to implement CPU operations and mappers.
- Interpretation of
.nesfiles in binary and hexadecimal formats, closely mirroring the original hardware's logic.
- Coordination between independent components, such as the CPU, PPU, and APU, which run in parallel and must be synchronized for games to function correctly.
- Detailed recreation of components like the PPU, responsible for graphics, and the APU, responsible for audio.
- Implementation of mappers, necessary to handle different memory layouts and support variations in game cartridges.
- Application of best practices, such as modularization, testing, and documentation, to manage highly complex systems.
- Use of optimized algorithms and data structures to ensure the emulator performs efficiently.
- Advanced use of Java to create robust systems, including binary file manipulation, object-oriented programming, and real-time component integration.
- Language: Java 21+
- Tools: Maven (dependency management), Git (version control)
- Libraries: Specific dependencies can be added for advanced features.
- iNES Format Documentation
- 6502 CPU Manual
- Nesdev Wiki - An excellent resource for understanding NES hardware.
This project is licensed under the MIT License. See the LICENSE file for more details.
If you’d like to discuss or contribute to the project, feel free to reach out:
- Name: Matheus Oliveira
- Email: matheus.6148@gmail.com
- GitHub: omatheusmesmo
- LinkedIn: Matheus Oliveira
I hope this README inspires you to explore the fundamentals of Computer Science and understand how complex systems can be faithfully recreated in software. 🚀