smb-vanilla-port
A C and C++ decompilation of the NES games "Super Mario Bros" and "Super Mario Bros: The Lost Levels"
A experimental NES emulator written in Haskell
FuNesFuNes is a Nintendo Entertainment System (NES) emulator, written in Haskell.
Warning
This emulator is for research purposes. Do not use as your daily emulator. You can easily find more mature NES emulators on GitHub!
To build the emulator, you will need to have Stack and the SDL2 library installed.
# In the cloned repository stack build stack run -- ./my_rom.nes # The path to the rom to use
Note: stack install will install the emulator as funes-exe
| NES Controller | Physical Buttons |
|---|---|
| A | A |
| B | S or Z |
| Start | Enter |
| Select | Space |
| Directional Pad | Arrows |
Press Q or esc to quit.
We use the nestest ROM and trace to test the CPU's behaviour and instructions.
While accuracy is not the ultimate goal, we use the AccuracyCoin ROM to evaluate the correctness of the emulator.
Do not be scared of the failing tests. Please check out this video to understand what this ROM checks for.
Score: 83 / 131
Results from Nov. 21 2025
⚠️ Turn down your headphones before playing!
FuNes is an experiment before anything else. The goal was to see if the functional paradigm would apply well to writting virtual machines and emulator, thus being written in Haskell.
While the goal is to have a working emulator, it is in no way 100% compliant. Some features are not (yet) implemented (see here) and some behaviour may be invalid.
This project wouldn't exist without the following resources. Many thanks to their respective authors 🙏
It's simple: Functional Programming + NES = FuNes
The fact that it shares the name with the late french actor Louis de Funes is accidental.
more like this
A C and C++ decompilation of the NES games "Super Mario Bros" and "Super Mario Bros: The Lost Levels"
search projects, people, and tags