Contributing
Getting the Code
NESEmu is hosted on GitHub. To download the code, clone the repository:
git clone https://github.com/nesemu/NESemu.git
Building NESEmu
As a macOS Cocoa app, NESEmu builds in
Xcode. In the repository, open
NESemu.xcworkspace
and build the NESEmu
target:
cd NESemu
open NESemu.xcworkspace
Be sure to use Xcode 10 on macOS Mojave 10.14 or later.
Submitting a Pull Request
Our preferred way to accept contributions is through pull requests on GitHub. Start by forking your own copy of the NESEmu repository, commit your changes there, and then submit a PR upstream.
A few guidelines to follow when submitting a pull request:
Keep them small. Multiple small pull requests are easier to review and merge individually than one large, complex PR. A general rule of thumb is that a PR should be no larger than a single new feature or bug fix.
Submit and seek feedback early. Don’t spend a long time trying to perfect your change before submitting a PR. Go ahead and submit so that the community can looks at it and provide feedback. Speaking of feedback…
Accept feedback. You might be asked to change something about your PR. Don’t take it personally. Conforming to feedback is crucial to ensure that the codebase remains cohesive and consistent and to keep the project moving in the right direction.
Ways to contribute
There are currently several areas that need improvement. Our backend emulation,
written in C++ and located in the nes_lib
directory, is mostly complete, but
is currently lacking APU (Audio Processing Unit) emulation. This means that
NESEmu currently has no sound and is obviously a high priority right now as we
work towards making NESEmu a feature-complete emulator. We are also always
looking to add more mappers to our Gamepak emulator to support more titles!
Our frontend is written in Swift using Cocoa, and is far from complete. The main missing feature right now is player-two controller input mappings, along with gamepad input support. In addition, any improvements to the UI or overall user experience are welcome!
Finally, the last major piece of development work is adding support for savegames or save states. This will require significant work in both backend (being able to load and export save files) and the frontend (a nice, polished UI for creating and managing save states).
Of course, if you think of something else that needs improving or a new feature we haven’t thought of yet, please share! Also take a look at our GitHub issue tracker for an up-to-date list of outstanding issues.
Cross-Platform development
Currently the APU
branch of our repository contains a separate, cross-platform
version of our app that builds using CMake and uses the SDL2 library to render
graphics and audio and read input. This was replaced in favor of the native
macOS version because of a serious bug in the SDL2 library. However, we are still open to the
possibility of creating a cross-platform version of our app, so if you’re
interested in developing this further, let us know!