Skip to content

halfvector/nes-2015

Folders and files

NameName
Last commit message
Last commit date

Latest commit

c87a590 · Aug 21, 2019

History

92 Commits
Mar 3, 2019
Aug 21, 2019
Mar 3, 2019
Aug 21, 2019
Jul 5, 2019
Dec 24, 2018
Mar 3, 2019
Jul 5, 2019
Aug 21, 2019

Repository files navigation

Nintendo Emulator

Current Status

  • Realtime CPU, PPU, and ALU emulation

CPU

  • Load iNES cartridge, parse headers, CHR, and PRG roms
  • Enough features to play Super Mario Bros, Donkey Kong, Arkanoid, Gradius, and Metal Gear
  • All memory addressing modes. All standard and some obscure opcodes.
  • Decent cycle counting, including iffy page-boundary-crossing penalty calculator
  • Memory Mapped IO with most PPU and some ALU addresses.
  • Very nice disassembler output

PPU

  • Vertical and Horizontal scrolling, Sprite DMA, Address Mirroring
  • Per-pixel scanline advancement
  • Sprite-0 hit detection, HBlank/VBlank support

APU

  • Basic implementation: two square waves, enough to play SMB intro music.

Supported Memory Mappers

  • NROM (iNES Mapper 0)
  • UNROM (iNES Mapper 2)
  • CNROM (iNES Mapper 3)

Input

  • Basic joystick support

Dependency management using conan

  1. Add repo: conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan
  2. Download dependencies: ./conan-resolve-deps.sh
  3. CLion/CMake will pickup dependencies automatically during build step

All 2015 goals were met!

Target Platform: Ported from Windows to OS X Primary Goals: CPU & PPU Performance, using C++14 features, scanline-accurate CPU<->PPU synchronization Stretch Goals: APU emulation, memory-mapper supports, pixel-accurate synchronization

Compatibility Goals:

  • Primary: Super Mario Bros & Donkey Kong
  • Secondary: other 32kB ROM + 8kB VROM games
  • Stretch: Official Nintendo memory mapper powered games

About

NES emulator in C++

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published