Whirlwind

Whirlwind is an Nintendo Entertainment System (NES) compatible FPGA core. It was designed using the Terasic DE10-Standard Development Kit, and utilizes the ADV7123 VGA DAC for video and the WM87312 codec for audio, though these can be changed for your particular development environment. The 6502 soft core was created by Jens Gutschmidt (huge thanks for this well designed core) – further information may be found on the OpenCores project page. Joypad input is currently accepted as simple input from DB9 style joysticks. Though Whirlwind is currently in development, it is able to play most NROM128/256 and SxROM cartridges (ie mapper 0 and 1), and has been successfully tested with:

Super Mario Bros
Legend of Zelda
Metroid
Mega Man 2
Blaster Master
Tetris
Dr. Mario
Willow
A Boy and his Blob
Kung Fu
Excitebike
Ice Climber
Donkey Kong
Popeye

See the latest games in action here:

Some of these will have audio issues due to known limitations below.

Games with known playability issues:

Zelda II: Adventure of Link (overworld map does not populate correctly, and game is unplayable after leaving palace)

Additional mappers will be developed soon (mapper 2 is scheduled next). Whirlwind currently also has the following limitations:

Only the player 1 joypad is implemented
The DMC channel in the APU is currently unimplemented (sound effects such as doors opening in Zelda are missing)
The APU mixer levels slightly deviate from real NES
The pulse channel sweeps sometimes end prematurely (some sound effects don’t sound quite right)
Likely other bugs, please let me know if you encounter any!

Whirlwind is available on Github.