
Emulador de Nintendo Entertainment System desenvolvido em C com SDL2.
NESEmu é um emulador de console NES (Nintendo Entertainment System) construído do zero em linguagem C. O projeto implementa a arquitetura completa do hardware original, incluindo o processador MOS 6502, a PPU (Picture Processing Unit) e o sistema de mappers para compatibilidade com diversos cartuchos.
O objetivo principal é educacional — fornecer uma referência clara e funcional de como um emulador de console clássico opera em nível de hardware.
| Componente |
Descrição |
| CPU 6502 |
Implementação completa do processador MOS 6502 com todos os 151 opcodes e 13 modos de endereçamento |
| PPU |
Unidade de processamento gráfico com renderização de backgrounds, sprites, scrolling e paleta de cores NTSC |
| Mappers |
Suporte nativo a mappers 0 (NROM), 1 (MMC1), 2 (UxROM), 3 (CNROM) e 4 (MMC3) |
| Controle |
Entrada via teclado e gamepad para dois jogadores simultâneos |
| Screenshots |
Captura de tela em formato BMP com uma única tecla |
- Compilador C (GCC, Clang ou MSVC)
- SDL2 >= 2.0
- GNU Make (opcional)
git clone https://github.com/Developer-Vini/NESEmu.git
cd NESEmu
make
./nes_emulator <rom.nes>
make
nes_emulator.exe <rom.nes>
gcc -O2 -Wall -Iinclude -o nes_emulator \
src/main.c src/cpu.c src/ppu.c src/bus.c \
src/cartridge.c src/palette.c \
$(sdl2-config --cflags --libs) -lm
Jogador 1
| Tecla |
Função |
Z |
A |
X |
B |
Enter |
Start |
Shift |
Select |
↑ ↓ ← → |
D-Pad |
Jogador 2
| Tecla |
Função |
Q |
A |
W |
B |
1 |
Start |
2 |
Select |
T / G / F / H |
↑ / ↓ / ← / → |
Comandos do Sistema
| Tecla |
Função |
R |
Reset |
P |
Screenshot |
Esc |
Sair |
┌─────────────────────────────┐
│ Main Loop │
└──────────────┬──────────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
v v v
┌──────────┐ ┌─────────────┐ ┌──────────┐
│ Input │ │ CPU │ │ PPU │
│ Handler │───────>│ MOS 6502 │──────>│ (NTSC) │
└──────────┘ └──────┬──────┘ └────┬─────┘
│ │
v │
┌─────────────┐ │
│ Bus │<────────────┘
│ (Decoding) │
└──────┬──────┘
│
┌──────────────┴──────────────┐
│ │
v v
┌─────────────┐ ┌─────────────┐
│ Cartridge │ │ RAM/IO │
│ PRG + CHR │ │ 2KB RAM │
└─────────────┘ └─────────────┘
Projeto educacional. Uso livre para fins de estudo e aprendizado.