Welcome to hnes. hnes is a NES emulator written in Haskell.
The following mappers are supported:
- NROM (0)
- UNROM (2)
- AOROM (7)
Lots of games run, but more don't. You can see which roms are compatible here: http://tuxnes.sourceforge.net/nesmapper.txt The best games seem to be MMC3, so that is a priority.
Mappers are basically custom memory modules that exist on the cartridges themselves, that allow referencing more memory than the NES originally shipped with. Sometimes they even do computation. A very clever idea, but a nightmare to emulate, since each mapper has to be emulated as well
|Up, Down, Left, Right||Arrow Keys|
Get Stack for building Haskell projects.
$ stack exec -- pacman -Sy mingw-w64-x86_64-pkg-config mingw-w64-x86_64-SDL2 $ stack build
OS X instructions:
$ brew install sdl2 $ stack build
Ubuntu Linux instructions:
$ sudo apt-get install libsdl2-dev $ stack build
$ pkg install sdl2 $ stack build
stack exec -- hnes roms/tests/cpu/nestest/nestest.nes
- Basic structure
- Loading roms
- All official opcodes
- All illegal opcodes
- Nestest passing
- Blarggs CPU test roms passing
- SDL integration
- Background rendering
- Sprite rendering
- VBlank timing for Battletoads edge case
- Controller input handled
- Performance tuning
- Command line interface
- Parse args
- Use optparse-applicative
- Some debug params?
There's a small test suite that is used to check for CPU and PPU accuracy. They use test roms rather than hand coding tests.
There are so many, where do I even begin.
- Performance is pretty average still. I get around 80 fps on my 2015 i5 MacBook.
- VBlank timing is off. I don't know the exact reasons, but it causes scrolling issues.