[0.6.1] Nin - Yet Another NES Emulator

Discuss emulation of the Nintendo Entertainment System and Famicom.

Moderator: Moderators

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

[0.6.1] 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.

EDIT (09/19/2019): Version 0.6.1 is released (0.6.0 had an issue and was not publicly released).

Some of the changes:

* Some FDS support. Saves are not supported yet and it's not possible to flip sides/change disk yet.
* Add Overscan support, with 4 presets.
* Add pillarboxing, on by default
* Add the option to fit the content to the window
* Add a pixel aspect ratio option, so far the options are Square Pixels and NTSC
* Add an option to force integer scaling (does not work well with non-square pixels yet)
* Add fullscreen support
* Improve the memory viewer, it's now properly scrollable
* Better, more accurate audio emulation.


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