[0.5.0] Nin - Yet Another NES Emulator

Discuss emulation of the Nintendo Entertainment System and Famicom.

Moderator: Moderators

Post Reply
Posts: 1
Joined: Wed Sep 25, 2019 2:12 am

[0.5.0] Nin - Yet Another NES Emulator

Post by Nax » Mon Dec 02, 2019 11:25 am


I've been working on a NES emulator for some time now, might as well share it here.
It's called Nin, and is available here: https://github.com/Nax/nin
Right now it has releases for macOS and Windows. Linux and, eventually, FreeBSD support is also planned.

The emulator is split into two parts: libnin, which is an externally driven, headless library which implements the bulk of the emulation, and the actual Nin emulator, which is the GUI and sits on top of libnin. Libnin is mostly implemented in C, with some parts in C++ (I am planning to revert to pure C at some point, and eventually dive down to assembly), whereas Nin is implemented in C++, using Qt for windowing, OpenAL Soft for audio and OpenGL for rendering.

It is not really useable as an emulator right now. While the emulation itself works fine (at least for the implemented mappers), the UI lacks some rather basic features such as savestates and controller remapping.

EDIT: I did some work on the UX side of things. Nin now includes the ability to load recently opened files, and includes an audio visualizer.
I expect to release v0.4.1 pretty soon.

EDIT (02/12/2019): After a while, 0.5.0 is now released. Changes include:

* The ability to step by frame and by instruction.
* A better audio visualizer: better UX + the ability to visualize the audio in the frequency domain as well.
* Much better audio emulation.
* The ability to dynamically adjust audio playback speed by a very small offset to avoid pops and cracks.
* Some PAL support (requires NES 2.0 headers).
* A very basic memory viewer.
* A very basic debugger that can display the registers as well as disassemble the next few instructions at PC.
* Better NMI & IRQ timings.
* Much better mapper support, should avoid most crashes with exotic header values.
* Includes an utility to convert from iNes to NES 2.0 using a database. The emulator itself will NOT use a database, by design.
* Fix a very, very old bug in the PPU causing some odd behavior with Y scroll (most notably in Battletoads intro).
* Plenty of new mappers.
* A lot of misc. fixes and improvements.

The supported mappers so far are: NROM, MMC1, MMC2, MMC3, MMC4, UxROM, UxROM (180), CNROM, AxROM, GxROM, Color Dreams.

MMC1 has one known bug that should not affect most games and will be fixed, eventually. MMC3 is experimental and has some IRQ timing issues.


Still plenty of work to do, but these are huge improvements from the previous release. It's been a ton of fun so far :beer:

Last bumped by Nax on Mon Dec 02, 2019 11:25 am.

Post Reply